<?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=Motivierte+linke+H%C3%A4nde</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=Motivierte+linke+H%C3%A4nde"/>
	<link rel="alternate" type="text/html" href="http://wiki.fhem.de/wiki/Spezial:Beitr%C3%A4ge/Motivierte_linke_H%C3%A4nde"/>
	<updated>2026-04-14T03:10:27Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Homebridge_einrichten&amp;diff=40551</id>
		<title>Homebridge einrichten</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Homebridge_einrichten&amp;diff=40551"/>
		<updated>2025-12-19T08:49:45Z</updated>

		<summary type="html">&lt;p&gt;Motivierte linke Hände: Installationshinweise aktualisiert&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;
= Aktuelle Systeme =&lt;br /&gt;
Für aktuelle Systeme ist die Installation recht simpel:&lt;br /&gt;
&lt;br /&gt;
Für Debian-basierte Systeme (Debian, Ubuntu, Raspbian, etc.) fügt man das Homebridge-Repository dem eigenen System hinzu, installierte homebridge und loggt sich dann auf dem UI ein. Anschließend installiert man über das UI homebridge-fhem und richtet dann beides in Homekit ein. Die Details stehen unten.&lt;br /&gt;
&lt;br /&gt;
Für andere Systeme gibt es Installationshinweise [https://github.com/homebridge/homebridge auf Github].&lt;br /&gt;
&lt;br /&gt;
== Homebridge installieren (Debian-basierte Systeme) ==&lt;br /&gt;
Key hinzufügen:&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;&amp;gt;&lt;br /&gt;
curl -sSfL https://repo.homebridge.io/KEY.gpg | sudo gpg --dearmor | sudo tee /usr/share/keyrings/homebridge.gpg  &amp;gt; /dev/null&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Repository hinzufügen:&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;deb [signed-by=/usr/share/keyrings/homebridge.gpg] https://repo.homebridge.io stable main&amp;quot; | sudo tee /etc/apt/sources.list.d/homebridge.list &amp;gt; /dev/null&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Homebridge installieren:&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; apt install homebridge&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Anschließend sollte Homebridge laufen und ein Login auf dem Webinterface möglich sein:&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;&amp;gt;&lt;br /&gt;
http://&amp;lt;ip-des-Systems&amp;gt;:8581&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Homebridge FHEM installieren ==&lt;br /&gt;
Im Hombridge-Webinterface auf der linken Seite &amp;quot;Plugins&amp;quot; auswählen. Unter den Plugins nach &amp;quot;FHEM&amp;quot; suchen, dann von dort Homebridge FHEM installieren.&lt;br /&gt;
&lt;br /&gt;
Es empfiehlt sich außerdem, in FHEM ein siri Device anzulegen:&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;&amp;gt;&lt;br /&gt;
define siri siri&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Sicherheitshalber Homebridge über das Webinterface an dieser Stelle neu starten.&lt;br /&gt;
&lt;br /&gt;
== Homebridge und Homebridge FHEM in Homekit einrichten ==&lt;br /&gt;
Im Homebridge Webinterface gibt es auf der Status-Seite einen QR-Code. Dieser muss mit Homekit (&amp;quot;Gerät hinzufügen&amp;quot;) gescannt werden, um Homebridge zu Homekit hinzuzufügen. &lt;br /&gt;
&lt;br /&gt;
Außerdem gibt es in den &amp;quot;Bridge-Einstellungen&amp;quot; zu Homebridge FHEM (erreichbar über die senkrechten drei Punkte auf der Plugins-Seite) einen QR-Code für Homebridge FHEM. Auch dieser muss mit Homekit (&amp;quot;Gerät hinzufügen&amp;quot;) gescannt werden.&lt;br /&gt;
&lt;br /&gt;
In den &amp;quot;Einstellungen&amp;quot; (nicht &amp;quot;Bridge-Einstellungen&amp;quot;) zu Homebridge FHEM (auch erreichbar über die senkrechten drei Punkte auf der Plugins-Seite) kann man einen &amp;quot;Filter&amp;quot; konfigurieren. Alle in FHEM konfigurierten Geräte, die auf diesen Filter passen, werden dann in Homekit sichtbar. Ich nutze dabei nach wie vor einen alten Filter, der alle dem Raum &amp;quot;Cfg_Homekit&amp;quot; zugeordneten Geräte für Homekit selektiert:&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;&amp;gt;&lt;br /&gt;
room=Cfg_Homekit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Jetzt sollte Homebridge laufen (auch automatisch starten) und die ausgewählten Geräte in Homekit erscheinen. Ab jetzt gilt es nur noch, diese einzeln zu konfigurieren und damit in Homekit auch nutzbar zu machen. [[Homebridge_User_Configs]] kann dabei sehr hilfreich sein.&lt;br /&gt;
&lt;br /&gt;
= Für ältere Systeme oder manuellere Installationen =&lt;br /&gt;
Für ältere Systeme und manuellere Installationsmethoden nachfolgend die älteren Setup-Anweisungen aus diesem Wiki: Diese Vorgehensweise wurde auf einem Intel NUC mit Ubuntu Server 14.04 LTS und auf einem Raspberry Pi mit Raspbian getestet&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/homebridge/HAP-NodeJS/blob/master/src/lib/gen/HomeKit.ts]&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;
== 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;
= Alternativen =&lt;br /&gt;
Will man nur &amp;quot;Hey Siri: Radio An&amp;quot; als Schaltbefehl senden und Homekit vermeiden, kann man auch Apple Shortcuts nutzen: [[Hey Siri Kurzbefehle, Apple Shortcuts]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Sprachsteuerung]]&lt;/div&gt;</summary>
		<author><name>Motivierte linke Hände</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Regul%C3%A4rer_Ausdruck&amp;diff=39707</id>
		<title>Regulärer Ausdruck</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Regul%C3%A4rer_Ausdruck&amp;diff=39707"/>
		<updated>2024-11-24T11:55:23Z</updated>

		<summary type="html">&lt;p&gt;Motivierte linke Hände: Randnotiz zum veralteten Regex-Tester-Link nach Update der Links gelöscht.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ein [[Regulärer Ausdruck]] (englisch &#039;&#039;regular expression&#039;&#039;, daher auch häufig als &#039;&#039;&#039;&#039;&#039;RegExp&#039;&#039;&#039;&#039;&#039; oder &#039;&#039;&#039;&#039;&#039;Regex&#039;&#039;&#039;&#039;&#039; abgekürzt; siehe auch [https://de.wikipedia.org/wiki/Regul%C3%A4rer_Ausdruck Wikipedia]) wird im Kontext von FHEM häufig benutzt, um aus Zeichenketten oder aus dem Strom der Ereignisse anhand von Mustern und Regeln einzelne Teile bzw. Ereignisse zu extrahieren. &lt;br /&gt;
&lt;br /&gt;
== Anwendung in FHEM ==&lt;br /&gt;
Die Notwendigkeit der Verwendung regulärer Ausdrücke ergibt sich beispielsweise bei der Definition eines [[FileLog]] (Filtern der Ereignisse) oder um aus einem mit [[HTTPMOD]] &amp;quot;gewonnenen&amp;quot; Datenstrom die relevanten Daten zu Weiterverarbeitung zu isolieren.&lt;br /&gt;
&lt;br /&gt;
Einige Stellen, an denen reguläre Ausdrücke in FHEM vorkommen (wie z.B. [[FileLog]] und [[SVG]]), bieten eine Basisunterstützung bei der Definition und Verwaltung der zugehörigen Ausdrücke.&lt;br /&gt;
&lt;br /&gt;
== Werkzeuge zur Erstellung Regulärer Ausdrücke ==&lt;br /&gt;
Insbesondere bei nur gelegentlicher Erstellung von Regulären Ausdrücken können diverse im Internet verfügbare &amp;quot;Tester&amp;quot; oder &amp;quot;Analyzer&amp;quot; wertvolle Hilfe leisten.&lt;br /&gt;
&lt;br /&gt;
=== Regular Expression Tester ===&lt;br /&gt;
Exemplarisch wird hier auf [https://regex101.com regex101.com] und [https://regexr.com regexr.com] verwiesen, von denen insbesondere der erste auch eine &amp;quot;Explain&amp;quot; Funktion bietet, mit deren Einsatz die einzelnen Bestandteile des zu testenden regulären Ausdrucks erläutert werden. Wer einen deutschen Tester mit angegebenem Urheber sucht, findet zum Beispiel [https://regexe regexe] von Andreas Göbel. Es gibt viele andere Internetseiten, die sich mit der gleichen Thematik befassen.&lt;br /&gt;
&lt;br /&gt;
==== &amp;quot;Execute&amp;quot; ====&lt;br /&gt;
Anhand des nebenstehenden Bildschirmfotos soll an einem einfachen Beispiel die generelle Funktionsweise derartiger Hilfsmittel erläutert werden:&lt;br /&gt;
;Input&lt;br /&gt;
:Datenstrom, der mit dem regulären Ausdruck verarbeitet werden soll; hier ein Teil (der Quelldaten) einer HTML-Seite.&lt;br /&gt;
;Expression&lt;br /&gt;
:Regulärer Ausdruck, mit dessen Hilfe aus dem Datenstrom der Wert des Feldes &#039;&#039;CM Status&#039;&#039;, also in diesem Fall &#039;&#039;Operational&#039;&#039; extrahiert werden soll.&lt;br /&gt;
;Output&lt;br /&gt;
:Die einzelnen Teile des Testergebnisses. Der Ausdruck in Klammern {{Taste|([A-Za-z]+)}} stellt den Teil dar, der zur Weiterverarbeitung benutzt werden soll; der Rest dient zu Identifizierung der richtigen Stelle (hier &#039;&#039;Match at character 802&#039;&#039;) innerhalb des Datenstroms.&lt;br /&gt;
&lt;br /&gt;
==== &amp;quot;Explain&amp;quot; ====&lt;br /&gt;
[[Datei:RegExp_TestExplain.png|mini|400px|right|Regular Expression Tester, Explain]]&lt;br /&gt;
Der oben beschriebene &#039;&#039;Regular Expression Tester&#039;&#039; bietet über die Schaltfläche &#039;&#039;Explain&#039;&#039; auch eine Erläuterungsfunktion. Ebenfalls am obigen Beispiel wird im Bildschirmfoto wieder dargestellt, wie die einzelnen Bestandteile des regulären Ausdrucks sich auswirken.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
=== Regex101.com ===&lt;br /&gt;
[[Datei:RegExp_regex101-com.png|mini|400px|left|regex101.com - Beispiel aus Spritpreismonitor]]&lt;br /&gt;
Auf der Seite [http://regex101.com/#p regexp101.com] werden die Bestandteile des regulären Ausdrucks zusätzlich zur Erläuterung auch noch farblich voneinander abgehoben. Das nebenstehende Beispiel zeigt einen kurzen Auszug aus dem [[Spritpreismonitor]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
== (Weitere) Beispiele ==&lt;br /&gt;
Es finden sich hier und im FHEM Forum viele, teilweise recht komplexe Beispiele für die Verwendung von regulären Ausdrücken, unter anderem&lt;br /&gt;
* auf der Seite [[Spritpreismonitor]]&lt;br /&gt;
* in der Beschreibung des Moduls [[HTTPMOD]]&lt;br /&gt;
* auf der Seite [[Wetter und Wettervorhersagen]]&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
== Links == &lt;br /&gt;
* [https://de.wikipedia.org/wiki/Regul%C3%A4rer_Ausdruck Wikipedia]&lt;br /&gt;
* [https://wiki.selfhtml.org/wiki/Perl/Regul%C3%A4re_Ausdr%C3%BCcke selfhtml]&lt;br /&gt;
* [http://perldoc.perl.org/perlre.html perldoc]&lt;br /&gt;
* [http://chris.photobooks.com/regex/ Regular Expression Tester]&lt;br /&gt;
* [http://regex101.com/#p regexp101.com]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Glossary]]&lt;/div&gt;</summary>
		<author><name>Motivierte linke Hände</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Regul%C3%A4rer_Ausdruck&amp;diff=39706</id>
		<title>Regulärer Ausdruck</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Regul%C3%A4rer_Ausdruck&amp;diff=39706"/>
		<updated>2024-11-24T11:54:26Z</updated>

		<summary type="html">&lt;p&gt;Motivierte linke Hände: Links zu regex-Testern aktualisiert und den Text angepasst.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ein [[Regulärer Ausdruck]] (englisch &#039;&#039;regular expression&#039;&#039;, daher auch häufig als &#039;&#039;&#039;&#039;&#039;RegExp&#039;&#039;&#039;&#039;&#039; oder &#039;&#039;&#039;&#039;&#039;Regex&#039;&#039;&#039;&#039;&#039; abgekürzt; siehe auch [https://de.wikipedia.org/wiki/Regul%C3%A4rer_Ausdruck Wikipedia]) wird im Kontext von FHEM häufig benutzt, um aus Zeichenketten oder aus dem Strom der Ereignisse anhand von Mustern und Regeln einzelne Teile bzw. Ereignisse zu extrahieren. &lt;br /&gt;
&lt;br /&gt;
== Anwendung in FHEM ==&lt;br /&gt;
Die Notwendigkeit der Verwendung regulärer Ausdrücke ergibt sich beispielsweise bei der Definition eines [[FileLog]] (Filtern der Ereignisse) oder um aus einem mit [[HTTPMOD]] &amp;quot;gewonnenen&amp;quot; Datenstrom die relevanten Daten zu Weiterverarbeitung zu isolieren.&lt;br /&gt;
&lt;br /&gt;
Einige Stellen, an denen reguläre Ausdrücke in FHEM vorkommen (wie z.B. [[FileLog]] und [[SVG]]), bieten eine Basisunterstützung bei der Definition und Verwaltung der zugehörigen Ausdrücke.&lt;br /&gt;
&lt;br /&gt;
== Werkzeuge zur Erstellung Regulärer Ausdrücke ==&lt;br /&gt;
Insbesondere bei nur gelegentlicher Erstellung von Regulären Ausdrücken können diverse im Internet verfügbare &amp;quot;Tester&amp;quot; oder &amp;quot;Analyzer&amp;quot; wertvolle Hilfe leisten.&lt;br /&gt;
&lt;br /&gt;
=== Regular Expression Tester ===&lt;br /&gt;
{{Randnotiz|RNTyp=r|RNText=Die Seite von Chris Nielsen ist nicht mehr (oder derzeit nicht?) verfügbar, daher sollte gelegentlich dieses Beispiel auf eine andere Seite/Anwendung umgestellt werden.--[[Benutzer:Ph1959de|Peter]] ([[Benutzer Diskussion:Ph1959de|Diskussion]]) 13:47, 31. Aug. 2020 (CEST)}}&lt;br /&gt;
[[Datei:RegExp_TestExecute.png|mini|400px|right|Regular Expression Tester, Execute]]&lt;br /&gt;
Exemplarisch wird hier auf [https://regex101.com regex101.com] und [https://regexr.com regexr.com] verwiesen, von denen insbesondere der erste auch eine &amp;quot;Explain&amp;quot; Funktion bietet, mit deren Einsatz die einzelnen Bestandteile des zu testenden regulären Ausdrucks erläutert werden. Wer einen deutschen Tester mit angegebenem Urheber sucht, findet zum Beispiel [https://regexe regexe] von Andreas Göbel. Es gibt viele andere Internetseiten, die sich mit der gleichen Thematik befassen.&lt;br /&gt;
&lt;br /&gt;
==== &amp;quot;Execute&amp;quot; ====&lt;br /&gt;
Anhand des nebenstehenden Bildschirmfotos soll an einem einfachen Beispiel die generelle Funktionsweise derartiger Hilfsmittel erläutert werden:&lt;br /&gt;
;Input&lt;br /&gt;
:Datenstrom, der mit dem regulären Ausdruck verarbeitet werden soll; hier ein Teil (der Quelldaten) einer HTML-Seite.&lt;br /&gt;
;Expression&lt;br /&gt;
:Regulärer Ausdruck, mit dessen Hilfe aus dem Datenstrom der Wert des Feldes &#039;&#039;CM Status&#039;&#039;, also in diesem Fall &#039;&#039;Operational&#039;&#039; extrahiert werden soll.&lt;br /&gt;
;Output&lt;br /&gt;
:Die einzelnen Teile des Testergebnisses. Der Ausdruck in Klammern {{Taste|([A-Za-z]+)}} stellt den Teil dar, der zur Weiterverarbeitung benutzt werden soll; der Rest dient zu Identifizierung der richtigen Stelle (hier &#039;&#039;Match at character 802&#039;&#039;) innerhalb des Datenstroms.&lt;br /&gt;
&lt;br /&gt;
==== &amp;quot;Explain&amp;quot; ====&lt;br /&gt;
[[Datei:RegExp_TestExplain.png|mini|400px|right|Regular Expression Tester, Explain]]&lt;br /&gt;
Der oben beschriebene &#039;&#039;Regular Expression Tester&#039;&#039; bietet über die Schaltfläche &#039;&#039;Explain&#039;&#039; auch eine Erläuterungsfunktion. Ebenfalls am obigen Beispiel wird im Bildschirmfoto wieder dargestellt, wie die einzelnen Bestandteile des regulären Ausdrucks sich auswirken.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
=== Regex101.com ===&lt;br /&gt;
[[Datei:RegExp_regex101-com.png|mini|400px|left|regex101.com - Beispiel aus Spritpreismonitor]]&lt;br /&gt;
Auf der Seite [http://regex101.com/#p regexp101.com] werden die Bestandteile des regulären Ausdrucks zusätzlich zur Erläuterung auch noch farblich voneinander abgehoben. Das nebenstehende Beispiel zeigt einen kurzen Auszug aus dem [[Spritpreismonitor]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
== (Weitere) Beispiele ==&lt;br /&gt;
Es finden sich hier und im FHEM Forum viele, teilweise recht komplexe Beispiele für die Verwendung von regulären Ausdrücken, unter anderem&lt;br /&gt;
* auf der Seite [[Spritpreismonitor]]&lt;br /&gt;
* in der Beschreibung des Moduls [[HTTPMOD]]&lt;br /&gt;
* auf der Seite [[Wetter und Wettervorhersagen]]&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
== Links == &lt;br /&gt;
* [https://de.wikipedia.org/wiki/Regul%C3%A4rer_Ausdruck Wikipedia]&lt;br /&gt;
* [https://wiki.selfhtml.org/wiki/Perl/Regul%C3%A4re_Ausdr%C3%BCcke selfhtml]&lt;br /&gt;
* [http://perldoc.perl.org/perlre.html perldoc]&lt;br /&gt;
* [http://chris.photobooks.com/regex/ Regular Expression Tester]&lt;br /&gt;
* [http://regex101.com/#p regexp101.com]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Glossary]]&lt;/div&gt;</summary>
		<author><name>Motivierte linke Hände</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=IR-MQTT-Gateway&amp;diff=34619</id>
		<title>IR-MQTT-Gateway</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=IR-MQTT-Gateway&amp;diff=34619"/>
		<updated>2021-01-15T15:26:52Z</updated>

		<summary type="html">&lt;p&gt;Motivierte linke Hände: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware|Bild=IR_WLAN_Gateway_Modul.jpg&lt;br /&gt;
|Bildbeschreibung=IR-WLAN-Gateway&lt;br /&gt;
|HWProtocol=MQTT&lt;br /&gt;
|HWType=Sender/Receiver&lt;br /&gt;
|HWCategory=Other&lt;br /&gt;
|HWComm=2,4 GHz&lt;br /&gt;
|HWChannels=1&lt;br /&gt;
|HWVoltage=5V&lt;br /&gt;
|HWPoweredBy=Kleinspannung&lt;br /&gt;
|HWPowerConsumption= ~0,2W(Standby)&lt;br /&gt;
|HWSize=55x20 mm (Durchm. x Höhe)&lt;br /&gt;
|HWDeviceFHEM=MQTT, MQTT_DEVICE und MQTT_BRIDGE&lt;br /&gt;
|HWManufacturer=HomeBrew}}&lt;br /&gt;
&lt;br /&gt;
Hier wird die Einbindung des [[IR-WLAN-Gateway]] über MQTT beschrieben. Details zur Hardware und zu anderen Arten der Einbindung sind im Hauptartikel zum IR-WLAN-Gateway zu finden.&lt;br /&gt;
{{Hinweis|Dieser Artikel entstand vor Einführung der [[MQTT#Installation in FHEM|MQTT2-Module]]. Die Integration mit dem neueren Modul [[MQTT2_DEVICE]] ist ebenfalls möglich, einige Schritte dafür wurden bereits ergänzt. Neben der unten genannten kann insbesondere auch [[MQTT2-Module - Praxisbeispiele#Tasmota|Tasmota]] verwendet werden. Dazu existiert auch ein [[MQTT2-Module - Praxisbeispiele#attrTemplate|attrTemplate]], das für die Analyse der empfangenen IR-Codes hilfreich ist, die dann wieder für die Sendeseite benötigt werden.}}&lt;br /&gt;
&lt;br /&gt;
MQTT2-Module_-_Praxisbeispiele#Tasmota&lt;br /&gt;
&lt;br /&gt;
== Allgemeines ==&lt;br /&gt;
Hier soll die Einbindung der Hardware als transparentes Input- und Output-Device erfolgen, wobei das Hauptziel die Erstellung einer grafischen Fernbedienungsmöglichkeit darstellt. Diese wird mittels [[Remotecontrol]] umgesetzt. &lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
datei:Remote IRMQTT.png|400px|thumb|Umsetzungsbeispiel&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung, firmware ==&lt;br /&gt;
Zunächst muß der ESP8266 mit einer MQTT-fähigen firmware versehen werden. Vorliegend wurde als ESP8266 ein &#039;&#039;Wemos D1 Mini&#039;&#039; verwendet. &lt;br /&gt;
Weiter wird ein vorhandener MQTT-Broker vorausgesetzt.&lt;br /&gt;
&lt;br /&gt;
=== Flashen ===&lt;br /&gt;
Grundsätzlich sollte diese Anleitung mit jeder MQTT-fähigen firmware funktionieren, der Verfasser hat den Quellcode von [https://github.com/enc-X/mqtt-ir-transceiver hier] verwendet und wie folgt angepaßt:  &lt;br /&gt;
&lt;br /&gt;
* (Nur für Nutzung der Arduino IDE zum kompilieren, wird main.cpp zu src.ino umbenannt)&lt;br /&gt;
* in globals.h sind die Zeilen 27ff an die konkret verwendete Hardware anzupassen. Für den sog. IRBlaster also wie folgt:&lt;br /&gt;
 // production device - (also Wemos...)&lt;br /&gt;
 #define RECV_PIN D4    // D3 - GPIO0 - IR detector/demodulator&lt;br /&gt;
 #define TRANS_PIN D1   // RX - GPIO3 - IR LED trasmitter &lt;br /&gt;
 #define TRIGGER_PIN D7 // D4 - GPIO2 - trigger reset (press and hold after boot - 5 seconds)&lt;br /&gt;
 #define LED_PIN D2      // D4 - GPIO2&lt;br /&gt;
 #define BUTTON_ACTIVE_LEVEL LOW&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
Danach kann man die Firmware kompilieren und auf den Wemos flashen. &lt;br /&gt;
 &lt;br /&gt;
=== MQTT-Einstellungen vornehmen ===&lt;br /&gt;
Nach einem Reboot des Wemos kann man sich mit dessen Netzwerk verbinden und dann die Einstellungen für das eigene WLAN und den verwendeten MQTT-Broker vornehmen. Hier wurde &#039;&#039;ir_blaster&#039;&#039; als Basistopic verwendet.&lt;br /&gt;
&lt;br /&gt;
Die Funktionalität des Gateways kann man dann z.B. mit mosquitto_sub prüfen:&lt;br /&gt;
 mosquitto_sub -h &amp;lt;Server-IP&amp;gt; -d -t ir_blaster/receiver/#&lt;br /&gt;
&lt;br /&gt;
Drückt man jetzt Tasten auf einer vorhandenen Infrarot-Fernbedienung, sollte die LED am Wemos blinken und entsprechende Ausgaben von mosquitto_sub erfolgen.&lt;br /&gt;
&lt;br /&gt;
== MQTT_DEVICE ==&lt;br /&gt;
&lt;br /&gt;
=== Empfangsseite ===&lt;br /&gt;
Um Informationen über empfangene Fernbedienungssignale in FHEM zu erhalten, wird zunächst das Gateway als [[MQTT_DEVICE]] angelegt:&lt;br /&gt;
&lt;br /&gt;
 define IR_Blaster MQTT_DEVICE&lt;br /&gt;
&lt;br /&gt;
Je nach Art der Fernbediencodes kann dann mittels &lt;br /&gt;
 attr IR_Blaster autoSubscribeReading ir_blaster/receiver/+/+&lt;br /&gt;
zunächst für verschiedene Fernbedienungstypen und -protokolle die automatisierte Anlage von passenden Subscriptions erfolgen. Hierzu werden dann einfach einzelne Tasten der jeweiligen Fernbedienung gedrückt. Manche Fernbedienungen benötigen einen weiteren Subtopic, hierfür ist das Attribut auf folgende Einstellung zu ändern:&lt;br /&gt;
 attr IR_Blaster autoSubscribeReading ir_blaster/receiver/+/+/+&lt;br /&gt;
&lt;br /&gt;
Die sich daraus ergebenden Attribute sehen z.B. so aus:&lt;br /&gt;
&lt;br /&gt;
 attr IR_Blaster subscribeReading_0 ir_blaster/receiver/NEC/0&lt;br /&gt;
 attr IR_Blaster subscribeReading_1 ir_blaster/receiver/RC6/1&lt;br /&gt;
 attr IR_Blaster subscribeReading_12 ir_blaster/receiver/RC5/12&lt;br /&gt;
 attr IR_Blaster subscribeReading_13 ir_blaster/receiver/UNKNOWN/13&lt;br /&gt;
 attr IR_Blaster subscribeReading_15 ir_blaster/receiver/RC6/15&lt;br /&gt;
 attr IR_Blaster subscribeReading_16388 ir_blaster/receiver/PANASONIC/48/16388&lt;br /&gt;
 attr IR_Blaster subscribeReading_20 ir_blaster/receiver/RC6/20&lt;br /&gt;
 attr IR_Blaster subscribeReading_32 ir_blaster/receiver/NEC/32&lt;br /&gt;
 &lt;br /&gt;
=== Sendeseite ===&lt;br /&gt;
Da die firmware die zu sendenden Codes jeweils aus dem passenden Topic erwartet, ist das publishSet jeweils entsprechend anzupassen, z.B. auf &lt;br /&gt;
 attr IR_Blaster publishSet ir_blaster/sender/NEC/32/&lt;br /&gt;
&lt;br /&gt;
Dann sollten sich die Fernbediencodes bereits senden lassen.&lt;br /&gt;
 set IR_Blaster 1587632295&lt;br /&gt;
&lt;br /&gt;
Da es sehr umständlich ist, bei Wechsel zwischen verschiedenen Fernbedienungsprotokollen jeweils erst das &#039;&#039;publishSet&#039;&#039; zu ändern, nutzen wir die Möglichkeit, entsprechende &amp;lt;code&amp;gt;publishSet_&amp;lt;reading&amp;gt;&amp;lt;/code&amp;gt; anzulegen. Für jede der gewünschten Protokolle ist daher ein entsprechendes Attribut zu setzen. Für obiges Beispiel wäre dies z.B.&lt;br /&gt;
 attr IR_Blaster publishSet_IRNEC32 ir_blaster/sender/NEC/32&lt;br /&gt;
&lt;br /&gt;
Nunmehr sollte der obige Code auch über diesen Befehl erfolgreich an den Wemos übertragen werden können:&lt;br /&gt;
 set IR_Blaster NEC32 1587632295&lt;br /&gt;
&lt;br /&gt;
Wenn dies funktioniert, können die übrigen Attribute gesetzt werden:&lt;br /&gt;
 attr IR_Blaster publishSet_IRPANA ir_blaster/sender/PANASONIC/48/16388&lt;br /&gt;
 attr IR_Blaster publishSet_IRRC512 ir_blaster/sender/RC5/12&lt;br /&gt;
 attr IR_Blaster publishSet_IRRC61 ir_blaster/sender/RC6/1&lt;br /&gt;
 attr IR_Blaster publishSet_IRRC615 ir_blaster/sender/RC6/15&lt;br /&gt;
 attr IR_Blaster publishSet_IRRC620 ir_blaster/sender/RC6/20&lt;br /&gt;
 attr IR_Blaster publishSet_IRRaw ir_blaster/sender/sendStoredRaw&lt;br /&gt;
 attr IR_Blaster publishSet_UNKNOWN13 ir_blaster/sender/UNKNOWN/13&lt;br /&gt;
 attr IR_Blaster publishSet_rawMode ir_blaster/sender/rawMode&lt;br /&gt;
 attr IR_Blaster publishSet_sendGC ir_blaster/sender/sendGC&lt;br /&gt;
 attr IR_Blaster publishSet_sendRAW ir_blaster/sender/sendRAW&lt;br /&gt;
&lt;br /&gt;
== MQTT2_DEVICE ==&lt;br /&gt;
Wenn man Mosquitto wie in [[MQTT2 DEVICE]] beschrieben mit einem Broker eingerichtet hat, sollte das IR-WLAN-Gateway automatisch gefunden und angelegt werden. Auf dieses neue Device muss dann noch das passende Template angewendet werden, z.B. bei einem auf Tasmota geflashten IR-Blaster:&lt;br /&gt;
 set IR_Blaster attrTemplate tasmota_ir&lt;br /&gt;
Beim Anwenden des Templates wird man nach 4 Befehlen gefragt. Diese werden später mittels des setList-Attributs für die Befehle &amp;quot;power&amp;quot;, &amp;quot;volumeup&amp;quot; und &amp;quot;11&amp;quot; verwendet (die &amp;quot;11&amp;quot; ist ein Beispiel dafür, zwei Tasten hintereinander zu senden). Das sind aber ohnehin nur Beispiele, die im setList-Attribut später geändert werden können. Für den Anfang reicht es, dort irgendwelche IR-Befehle einzutragen. &lt;br /&gt;
&lt;br /&gt;
Zu verwendende IR-Befehle kann man der Tasmota-Konsole entnehmen: Wenn man die vorhandene Fernbedienung auf den IR-Blaster richtet und Tasten drückt, zeigt die Konsole den empfangenen Befehl an. Z.B. zeigt Tasmota:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;13:23:52 MQT: tele/tasmota-ir/RESULT = {&amp;quot;IrReceived&amp;quot;:{&amp;quot;Protocol&amp;quot;:&amp;quot;NEC&amp;quot;,&amp;quot;Bits&amp;quot;:32,&amp;quot;Data&amp;quot;:&amp;quot;0x1D00B946&amp;quot;,&amp;quot;DataLSB&amp;quot;:&amp;quot;0xB8009D62&amp;quot;,&amp;quot;Repeat&amp;quot;:0}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Der entsprechende IR-Befehl ist dann:&lt;br /&gt;
 {&amp;quot;Protocol&amp;quot;:&amp;quot;NEC&amp;quot;,&amp;quot;Bits&amp;quot;:32,&amp;quot;Data&amp;quot;:&amp;quot;0x1D00B946&amp;quot;,&amp;quot;DataLSB&amp;quot;:&amp;quot;0xB8009D62&amp;quot;,&amp;quot;Repeat&amp;quot;:0}&lt;br /&gt;
Ggf. ändert man &amp;quot;Repeat&amp;quot; auf eine andere Zahl als &amp;quot;0&amp;quot;, um Sende- bzw. Empfangsproblemen zur ein mehrfaches Versenden des IR-Befehls vorzubeugen.&lt;br /&gt;
 {&amp;quot;Protocol&amp;quot;:&amp;quot;NEC&amp;quot;,&amp;quot;Bits&amp;quot;:32,&amp;quot;Data&amp;quot;:&amp;quot;0x1D00B946&amp;quot;,&amp;quot;DataLSB&amp;quot;:&amp;quot;0xB8009D62&amp;quot;,&amp;quot;Repeat&amp;quot;:2}&lt;br /&gt;
Über setList kann man dann definieren, dass IR-Befehle über den IR-Blaster gesendet werden. Z.B. kann man über&lt;br /&gt;
 setList IR_Blaster power:noArg cmnd/tasmota-ir/IRsend {&amp;quot;Protocol&amp;quot;:&amp;quot;NEC&amp;quot;,&amp;quot;Bits&amp;quot;:32,&amp;quot;Data&amp;quot;:&amp;quot;0x1D00B946&amp;quot;,&amp;quot;DataLSB&amp;quot;:&amp;quot;0xB8009D62&amp;quot;,&amp;quot;Repeat&amp;quot;:2}&lt;br /&gt;
erreichen, dass der IR-Befehl versendet wird, wenn man in FHEM&lt;br /&gt;
 set IR_Blaster power&lt;br /&gt;
ausführt. So können in setList alle benötigten Befehle gespeichert werden.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich zu solchen spezifischen Befehlen wird in setList der generische Befehl&lt;br /&gt;
 set IR_Blaster irsend&lt;br /&gt;
abgelegt. Dieser kann verwendet werden, um beliebige IR-Befehle über den IR-Blaster zu versenden. Z.B. versendet&lt;br /&gt;
 set IR_Blaster irsend NEC 32 0x1D00B946&lt;br /&gt;
den oben als Beispiel verwendeten IR-Befehl.&lt;br /&gt;
&lt;br /&gt;
== Grafische Darstellung in FHEM == &lt;br /&gt;
Diese erfolgt über remotecontrol. Das Modul ist [[Remotecontrol|hier]] näher beschrieben, an dieser Stelle daher nur die sich ergebenden auszugsweisen Definitionen des notify und des remotecontrol-Devices:&lt;br /&gt;
&lt;br /&gt;
=== remotecontrol ===&lt;br /&gt;
 define Receiver remotecontrol&lt;br /&gt;
 attr Receiver rc_iconpath icons/remotecontrol&lt;br /&gt;
 attr Receiver rc_iconprefix black_btn_&lt;br /&gt;
 attr Receiver row00 IRNEC32 2122415745:POWEROFF3,IRNEC32 2122448385:POWEROFF2,:blank,IRNEC32 1587632550:SPEAKER1,IRNEC32 1587665190:SPEAKER2&lt;br /&gt;
 attr Receiver row01 :blank,:blank,:blank&lt;br /&gt;
 attr Receiver row02 IRNEC32 1587632295:VOLUP2,IRNEC32 1587652950:SLEEP,IRNEC32 1587624135:MUTE,:blank,IRNEC32 1587664935:VOLDOWN2&lt;br /&gt;
 ...&lt;br /&gt;
=== notify ===&lt;br /&gt;
Zur Übertragung der Events aus remotecontrol wird ein notify benötigt:  &lt;br /&gt;
 define notify_Receiver notify Receiver set IR_Blaster $EVENT&lt;br /&gt;
&lt;br /&gt;
== Nutzung als Input-Device == &lt;br /&gt;
Auf eingehende Infrarotsignale kann mittels der üblichen Event-Handler (notify, DOIF, watchdog usw.) reagiert werden, am einfachsten nutzt man zur Erstellung den [[Event monitor|Event-Monitor]].&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
Bei der Erkennung von Codes erfolgt uU. ein sehr schneller Wechsel zu Wiederholungscodes. Ggf. sollte man versuchen, die Fernbedienungstasten nur sehr kurz zu drücken, und erkannte Codes durch entsprechende Sendetests direkt zu verifizieren.&lt;br /&gt;
 &lt;br /&gt;
== Links ==&lt;br /&gt;
* Hardwarebeschreibung: [https://github.com/emc2cube/MySWeMosIRShield Platinenlayout, Bauteileliste]&lt;br /&gt;
* firmware: [https://github.com/enc-X/mqtt-ir-transceiver]&lt;br /&gt;
* {{Link2Forum|Topic=75466|Message=672652|LinkText=Darstellung mit Hilfe einer alternativen firmware}}&lt;br /&gt;
* Infos zur Hardware: {{Link2Forum|Topic=72950|LinkText=360 Grad IR WLAN Gateway}} &lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Other Components]]&lt;br /&gt;
[[Kategorie:IP Components]]&lt;br /&gt;
[[Kategorie:Infrarot]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:MQTT]]&lt;/div&gt;</summary>
		<author><name>Motivierte linke Hände</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=IR-MQTT-Gateway&amp;diff=34618</id>
		<title>IR-MQTT-Gateway</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=IR-MQTT-Gateway&amp;diff=34618"/>
		<updated>2021-01-15T15:24:19Z</updated>

		<summary type="html">&lt;p&gt;Motivierte linke Hände: Korrekturen/Anpassungen MQTT2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware|Bild=IR_WLAN_Gateway_Modul.jpg&lt;br /&gt;
|Bildbeschreibung=IR-WLAN-Gateway&lt;br /&gt;
|HWProtocol=MQTT&lt;br /&gt;
|HWType=Sender/Receiver&lt;br /&gt;
|HWCategory=Other&lt;br /&gt;
|HWComm=2,4 GHz&lt;br /&gt;
|HWChannels=1&lt;br /&gt;
|HWVoltage=5V&lt;br /&gt;
|HWPoweredBy=Kleinspannung&lt;br /&gt;
|HWPowerConsumption= ~0,2W(Standby)&lt;br /&gt;
|HWSize=55x20 mm (Durchm. x Höhe)&lt;br /&gt;
|HWDeviceFHEM=MQTT, MQTT_DEVICE und MQTT_BRIDGE&lt;br /&gt;
|HWManufacturer=HomeBrew}}&lt;br /&gt;
&lt;br /&gt;
Hier wird die Einbindung des [[IR-WLAN-Gateway]] über MQTT beschrieben. Details zur Hardware und zu anderen Arten der Einbindung sind im Hauptartikel zum IR-WLAN-Gateway zu finden.&lt;br /&gt;
{{Hinweis|Dieser Artikel entstand vor Einführung der [[MQTT#Installation in FHEM|MQTT2-Module]]. Die Integration mit dem neueren Modul [[MQTT2_DEVICE]] ist ebenfalls möglich, einige Schritte dafür wurden bereits ergänzt. Neben der unten genannten kann insbesondere auch [[MQTT2-Module - Praxisbeispiele#Tasmota|Tasmota]] verwendet werden. Dazu existiert auch ein [[MQTT2-Module - Praxisbeispiele#attrTemplate|attrTemplate]], das für die Analyse der empfangenen IR-Codes hilfreich ist, die dann wieder für die Sendeseite benötigt werden.}}&lt;br /&gt;
&lt;br /&gt;
MQTT2-Module_-_Praxisbeispiele#Tasmota&lt;br /&gt;
&lt;br /&gt;
== Allgemeines ==&lt;br /&gt;
Hier soll die Einbindung der Hardware als transparentes Input- und Output-Device erfolgen, wobei das Hauptziel die Erstellung einer grafischen Fernbedienungsmöglichkeit darstellt. Diese wird mittels [[Remotecontrol]] umgesetzt. &lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
datei:Remote IRMQTT.png|400px|thumb|Umsetzungsbeispiel&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung, firmware ==&lt;br /&gt;
Zunächst muß der ESP8266 mit einer MQTT-fähigen firmware versehen werden. Vorliegend wurde als ESP8266 ein &#039;&#039;Wemos D1 Mini&#039;&#039; verwendet. &lt;br /&gt;
Weiter wird ein vorhandener MQTT-Broker vorausgesetzt.&lt;br /&gt;
&lt;br /&gt;
=== Flashen ===&lt;br /&gt;
Grundsätzlich sollte diese Anleitung mit jeder MQTT-fähigen firmware funktionieren, der Verfasser hat den Quellcode von [https://github.com/enc-X/mqtt-ir-transceiver hier] verwendet und wie folgt angepaßt:  &lt;br /&gt;
&lt;br /&gt;
* (Nur für Nutzung der Arduino IDE zum kompilieren, wird main.cpp zu src.ino umbenannt)&lt;br /&gt;
* in globals.h sind die Zeilen 27ff an die konkret verwendete Hardware anzupassen. Für den sog. IRBlaster also wie folgt:&lt;br /&gt;
 // production device - (also Wemos...)&lt;br /&gt;
 #define RECV_PIN D4    // D3 - GPIO0 - IR detector/demodulator&lt;br /&gt;
 #define TRANS_PIN D1   // RX - GPIO3 - IR LED trasmitter &lt;br /&gt;
 #define TRIGGER_PIN D7 // D4 - GPIO2 - trigger reset (press and hold after boot - 5 seconds)&lt;br /&gt;
 #define LED_PIN D2      // D4 - GPIO2&lt;br /&gt;
 #define BUTTON_ACTIVE_LEVEL LOW&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
Danach kann man die Firmware kompilieren und auf den Wemos flashen. &lt;br /&gt;
 &lt;br /&gt;
=== MQTT-Einstellungen vornehmen ===&lt;br /&gt;
Nach einem Reboot des Wemos kann man sich mit dessen Netzwerk verbinden und dann die Einstellungen für das eigene WLAN und den verwendeten MQTT-Broker vornehmen. Hier wurde &#039;&#039;ir_blaster&#039;&#039; als Basistopic verwendet.&lt;br /&gt;
&lt;br /&gt;
Die Funktionalität des Gateways kann man dann z.B. mit mosquitto_sub prüfen:&lt;br /&gt;
 mosquitto_sub -h &amp;lt;Server-IP&amp;gt; -d -t ir_blaster/receiver/#&lt;br /&gt;
&lt;br /&gt;
Drückt man jetzt Tasten auf einer vorhandenen Infrarot-Fernbedienung, sollte die LED am Wemos blinken und entsprechende Ausgaben von mosquitto_sub erfolgen.&lt;br /&gt;
&lt;br /&gt;
== MQTT_DEVICE ==&lt;br /&gt;
&lt;br /&gt;
=== Empfangsseite ===&lt;br /&gt;
Um Informationen über empfangene Fernbedienungssignale in FHEM zu erhalten, wird zunächst das Gateway als [[MQTT_DEVICE]] angelegt:&lt;br /&gt;
&lt;br /&gt;
 define IR_Blaster MQTT_DEVICE&lt;br /&gt;
&lt;br /&gt;
Je nach Art der Fernbediencodes kann dann mittels &lt;br /&gt;
 attr IR_Blaster autoSubscribeReading ir_blaster/receiver/+/+&lt;br /&gt;
zunächst für verschiedene Fernbedienungstypen und -protokolle die automatisierte Anlage von passenden Subscriptions erfolgen. Hierzu werden dann einfach einzelne Tasten der jeweiligen Fernbedienung gedrückt. Manche Fernbedienungen benötigen einen weiteren Subtopic, hierfür ist das Attribut auf folgende Einstellung zu ändern:&lt;br /&gt;
 attr IR_Blaster autoSubscribeReading ir_blaster/receiver/+/+/+&lt;br /&gt;
&lt;br /&gt;
Die sich daraus ergebenden Attribute sehen z.B. so aus:&lt;br /&gt;
&lt;br /&gt;
 attr IR_Blaster subscribeReading_0 ir_blaster/receiver/NEC/0&lt;br /&gt;
 attr IR_Blaster subscribeReading_1 ir_blaster/receiver/RC6/1&lt;br /&gt;
 attr IR_Blaster subscribeReading_12 ir_blaster/receiver/RC5/12&lt;br /&gt;
 attr IR_Blaster subscribeReading_13 ir_blaster/receiver/UNKNOWN/13&lt;br /&gt;
 attr IR_Blaster subscribeReading_15 ir_blaster/receiver/RC6/15&lt;br /&gt;
 attr IR_Blaster subscribeReading_16388 ir_blaster/receiver/PANASONIC/48/16388&lt;br /&gt;
 attr IR_Blaster subscribeReading_20 ir_blaster/receiver/RC6/20&lt;br /&gt;
 attr IR_Blaster subscribeReading_32 ir_blaster/receiver/NEC/32&lt;br /&gt;
 &lt;br /&gt;
=== Sendeseite ===&lt;br /&gt;
Da die firmware die zu sendenden Codes jeweils aus dem passenden Topic erwartet, ist das publishSet jeweils entsprechend anzupassen, z.B. auf &lt;br /&gt;
 attr IR_Blaster publishSet ir_blaster/sender/NEC/32/&lt;br /&gt;
&lt;br /&gt;
Dann sollten sich die Fernbediencodes bereits senden lassen.&lt;br /&gt;
 set IR_Blaster 1587632295&lt;br /&gt;
&lt;br /&gt;
Da es sehr umständlich ist, bei Wechsel zwischen verschiedenen Fernbedienungsprotokollen jeweils erst das &#039;&#039;publishSet&#039;&#039; zu ändern, nutzen wir die Möglichkeit, entsprechende &amp;lt;code&amp;gt;publishSet_&amp;lt;reading&amp;gt;&amp;lt;/code&amp;gt; anzulegen. Für jede der gewünschten Protokolle ist daher ein entsprechendes Attribut zu setzen. Für obiges Beispiel wäre dies z.B.&lt;br /&gt;
 attr IR_Blaster publishSet_IRNEC32 ir_blaster/sender/NEC/32&lt;br /&gt;
&lt;br /&gt;
Nunmehr sollte der obige Code auch über diesen Befehl erfolgreich an den Wemos übertragen werden können:&lt;br /&gt;
 set IR_Blaster NEC32 1587632295&lt;br /&gt;
&lt;br /&gt;
Wenn dies funktioniert, können die übrigen Attribute gesetzt werden:&lt;br /&gt;
 attr IR_Blaster publishSet_IRPANA ir_blaster/sender/PANASONIC/48/16388&lt;br /&gt;
 attr IR_Blaster publishSet_IRRC512 ir_blaster/sender/RC5/12&lt;br /&gt;
 attr IR_Blaster publishSet_IRRC61 ir_blaster/sender/RC6/1&lt;br /&gt;
 attr IR_Blaster publishSet_IRRC615 ir_blaster/sender/RC6/15&lt;br /&gt;
 attr IR_Blaster publishSet_IRRC620 ir_blaster/sender/RC6/20&lt;br /&gt;
 attr IR_Blaster publishSet_IRRaw ir_blaster/sender/sendStoredRaw&lt;br /&gt;
 attr IR_Blaster publishSet_UNKNOWN13 ir_blaster/sender/UNKNOWN/13&lt;br /&gt;
 attr IR_Blaster publishSet_rawMode ir_blaster/sender/rawMode&lt;br /&gt;
 attr IR_Blaster publishSet_sendGC ir_blaster/sender/sendGC&lt;br /&gt;
 attr IR_Blaster publishSet_sendRAW ir_blaster/sender/sendRAW&lt;br /&gt;
&lt;br /&gt;
== MQTT2_DEVICE ==&lt;br /&gt;
Wenn man Mosquitto wie in [[MQTT2 DEVICE]] beschrieben mit einem Broker eingerichtet hat, sollte das IR-WLAN-Gateway automatisch gefunden und angelegt werden. Auf dieses neue Device muss dann noch das passende Template angewendet werden, z.B. bei einem auf Tasmota geflashten IR-Blaster:&lt;br /&gt;
 set IR_Blaster attrTemplate tasmota_ir&lt;br /&gt;
Beim Anwenden des Templates wird man nach 4 Befehlen gefragt. Diese werden später mittels des setList-Attributs für die Befehle &amp;quot;power&amp;quot;, &amp;quot;volumeup&amp;quot; und &amp;quot;11&amp;quot; verwendet. Das sind aber ohnehin nur Beispiele, die im setList-Attribut später geändert werden können. Für den Anfang reicht es, dort irgendwelche IR-Befehle einzutragen. &lt;br /&gt;
&lt;br /&gt;
Zu verwendende IR-Befehle kann man der Tasmota-Konsole entnehmen: Wenn man die vorhandene Fernbedienung auf den IR-Blaster richtet und Tasten drückt, zeigt die Konsole den empfangenen Befehl an. Z.B. zeigt Tasmota:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;13:23:52 MQT: tele/tasmota-ir/RESULT = {&amp;quot;IrReceived&amp;quot;:{&amp;quot;Protocol&amp;quot;:&amp;quot;NEC&amp;quot;,&amp;quot;Bits&amp;quot;:32,&amp;quot;Data&amp;quot;:&amp;quot;0x1D00B946&amp;quot;,&amp;quot;DataLSB&amp;quot;:&amp;quot;0xB8009D62&amp;quot;,&amp;quot;Repeat&amp;quot;:0}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Der entsprechende IR-Befehl ist dann:&lt;br /&gt;
 {&amp;quot;Protocol&amp;quot;:&amp;quot;NEC&amp;quot;,&amp;quot;Bits&amp;quot;:32,&amp;quot;Data&amp;quot;:&amp;quot;0x1D00B946&amp;quot;,&amp;quot;DataLSB&amp;quot;:&amp;quot;0xB8009D62&amp;quot;,&amp;quot;Repeat&amp;quot;:0}&lt;br /&gt;
Ggf. ändert man &amp;quot;Repeat&amp;quot; auf eine andere Zahl als &amp;quot;0&amp;quot;, um Sende- bzw. Empfangsproblemen zur ein mehrfaches Versenden des IR-Befehls vorzubeugen.&lt;br /&gt;
 {&amp;quot;Protocol&amp;quot;:&amp;quot;NEC&amp;quot;,&amp;quot;Bits&amp;quot;:32,&amp;quot;Data&amp;quot;:&amp;quot;0x1D00B946&amp;quot;,&amp;quot;DataLSB&amp;quot;:&amp;quot;0xB8009D62&amp;quot;,&amp;quot;Repeat&amp;quot;:2}&lt;br /&gt;
Über setList kann man dann definieren, dass IR-Befehle über den IR-Blaster gesendet werden. Z.B. kann man über&lt;br /&gt;
 setList IR_Blaster power:noArg cmnd/tasmota-ir/IRsend {&amp;quot;Protocol&amp;quot;:&amp;quot;NEC&amp;quot;,&amp;quot;Bits&amp;quot;:32,&amp;quot;Data&amp;quot;:&amp;quot;0x1D00B946&amp;quot;,&amp;quot;DataLSB&amp;quot;:&amp;quot;0xB8009D62&amp;quot;,&amp;quot;Repeat&amp;quot;:2}&lt;br /&gt;
erreichen, dass der IR-Befehl versendet wird, wenn man in FHEM&lt;br /&gt;
 set IR_Blaster power&lt;br /&gt;
ausführt. So können in setList alle benötigten Befehle gespeichert werden.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich zu solchen spezifischen Befehlen wird in setList der generische Befehl&lt;br /&gt;
 set IR_Blaster irsend&lt;br /&gt;
abgelegt. Dieser kann verwendet werden, um beliebige IR-Befehle über den IR-Blaster zu versenden. Z.B. versendet&lt;br /&gt;
 set IR_Blaster irsend NEC 32 0x1D00B946&lt;br /&gt;
den oben als Beispiel verwendeten IR-Befehl.&lt;br /&gt;
&lt;br /&gt;
== Grafische Darstellung in FHEM == &lt;br /&gt;
Diese erfolgt über remotecontrol. Das Modul ist [[Remotecontrol|hier]] näher beschrieben, an dieser Stelle daher nur die sich ergebenden auszugsweisen Definitionen des notify und des remotecontrol-Devices:&lt;br /&gt;
&lt;br /&gt;
=== remotecontrol ===&lt;br /&gt;
 define Receiver remotecontrol&lt;br /&gt;
 attr Receiver rc_iconpath icons/remotecontrol&lt;br /&gt;
 attr Receiver rc_iconprefix black_btn_&lt;br /&gt;
 attr Receiver row00 IRNEC32 2122415745:POWEROFF3,IRNEC32 2122448385:POWEROFF2,:blank,IRNEC32 1587632550:SPEAKER1,IRNEC32 1587665190:SPEAKER2&lt;br /&gt;
 attr Receiver row01 :blank,:blank,:blank&lt;br /&gt;
 attr Receiver row02 IRNEC32 1587632295:VOLUP2,IRNEC32 1587652950:SLEEP,IRNEC32 1587624135:MUTE,:blank,IRNEC32 1587664935:VOLDOWN2&lt;br /&gt;
 ...&lt;br /&gt;
=== notify ===&lt;br /&gt;
Zur Übertragung der Events aus remotecontrol wird ein notify benötigt:  &lt;br /&gt;
 define notify_Receiver notify Receiver set IR_Blaster $EVENT&lt;br /&gt;
&lt;br /&gt;
== Nutzung als Input-Device == &lt;br /&gt;
Auf eingehende Infrarotsignale kann mittels der üblichen Event-Handler (notify, DOIF, watchdog usw.) reagiert werden, am einfachsten nutzt man zur Erstellung den [[Event monitor|Event-Monitor]].&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
Bei der Erkennung von Codes erfolgt uU. ein sehr schneller Wechsel zu Wiederholungscodes. Ggf. sollte man versuchen, die Fernbedienungstasten nur sehr kurz zu drücken, und erkannte Codes durch entsprechende Sendetests direkt zu verifizieren.&lt;br /&gt;
 &lt;br /&gt;
== Links ==&lt;br /&gt;
* Hardwarebeschreibung: [https://github.com/emc2cube/MySWeMosIRShield Platinenlayout, Bauteileliste]&lt;br /&gt;
* firmware: [https://github.com/enc-X/mqtt-ir-transceiver]&lt;br /&gt;
* {{Link2Forum|Topic=75466|Message=672652|LinkText=Darstellung mit Hilfe einer alternativen firmware}}&lt;br /&gt;
* Infos zur Hardware: {{Link2Forum|Topic=72950|LinkText=360 Grad IR WLAN Gateway}} &lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Other Components]]&lt;br /&gt;
[[Kategorie:IP Components]]&lt;br /&gt;
[[Kategorie:Infrarot]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:MQTT]]&lt;/div&gt;</summary>
		<author><name>Motivierte linke Hände</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=IR-MQTT-Gateway&amp;diff=34617</id>
		<title>IR-MQTT-Gateway</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=IR-MQTT-Gateway&amp;diff=34617"/>
		<updated>2021-01-15T14:36:38Z</updated>

		<summary type="html">&lt;p&gt;Motivierte linke Hände: Anfänge für einen MQTT2-Teil ergänzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware|Bild=IR_WLAN_Gateway_Modul.jpg&lt;br /&gt;
|Bildbeschreibung=IR-WLAN-Gateway&lt;br /&gt;
|HWProtocol=MQTT&lt;br /&gt;
|HWType=Sender/Receiver&lt;br /&gt;
|HWCategory=Other&lt;br /&gt;
|HWComm=2,4 GHz&lt;br /&gt;
|HWChannels=1&lt;br /&gt;
|HWVoltage=5V&lt;br /&gt;
|HWPoweredBy=Kleinspannung&lt;br /&gt;
|HWPowerConsumption= ~0,2W(Standby)&lt;br /&gt;
|HWSize=55x20 mm (Durchm. x Höhe)&lt;br /&gt;
|HWDeviceFHEM=MQTT, MQTT_DEVICE und MQTT_BRIDGE&lt;br /&gt;
|HWManufacturer=HomeBrew}}&lt;br /&gt;
&lt;br /&gt;
Hier wird die Einbindung des [[IR-WLAN-Gateway]] über MQTT beschrieben. Details zur Hardware und zu anderen Arten der Einbindung sind im Hauptartikel zum IR-WLAN-Gateway zu finden.&lt;br /&gt;
{{Hinweis|Dieser Artikel entstand vor Einführung der [[MQTT#Installation in FHEM|MQTT2-Module]]. Die Integration mit dem neueren Modul [[MQTT2_DEVICE]] ist ebenfalls möglich, einige Schritte dafür wurden bereits ergänzt. Neben der unten genannten kann insbesondere auch [[MQTT2-Module - Praxisbeispiele#Tasmota|Tasmota]] verwendet werden. Dazu existiert auch ein [[MQTT2-Module - Praxisbeispiele#attrTemplate|attrTemplate]], das für die Analyse der empfangenen IR-Codes hilfreich ist, die dann wieder für die Sendeseite benötigt werden.}}&lt;br /&gt;
&lt;br /&gt;
MQTT2-Module_-_Praxisbeispiele#Tasmota&lt;br /&gt;
&lt;br /&gt;
== Allgemeines ==&lt;br /&gt;
Hier soll die Einbindung der Hardware als transparentes Input- und Output-Device erfolgen, wobei das Hauptziel die Erstellung einer grafischen Fernbedienungsmöglichkeit darstellt. Diese wird mittels [[Remotecontrol]] umgesetzt. &lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
datei:Remote IRMQTT.png|400px|thumb|Umsetzungsbeispiel&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung, firmware ==&lt;br /&gt;
Zunächst muß der ESP8266 mit einer MQTT-fähigen firmware versehen werden. Vorliegend wurde als ESP8266 ein &#039;&#039;Wemos D1 Mini&#039;&#039; verwendet. &lt;br /&gt;
Weiter wird ein vorhandener MQTT-Broker vorausgesetzt.&lt;br /&gt;
&lt;br /&gt;
=== Flashen ===&lt;br /&gt;
Grundsätzlich sollte diese Anleitung mit jeder MQTT-fähigen firmware funktionieren, der Verfasser hat den Quellcode von [https://github.com/enc-X/mqtt-ir-transceiver hier] verwendet und wie folgt angepaßt:  &lt;br /&gt;
&lt;br /&gt;
* (Nur für Nutzung der Arduino IDE zum kompilieren, wird main.cpp zu src.ino umbenannt)&lt;br /&gt;
* in globals.h sind die Zeilen 27ff an die konkret verwendete Hardware anzupassen. Für den sog. IRBlaster also wie folgt:&lt;br /&gt;
 // production device - (also Wemos...)&lt;br /&gt;
 #define RECV_PIN D4    // D3 - GPIO0 - IR detector/demodulator&lt;br /&gt;
 #define TRANS_PIN D1   // RX - GPIO3 - IR LED trasmitter &lt;br /&gt;
 #define TRIGGER_PIN D7 // D4 - GPIO2 - trigger reset (press and hold after boot - 5 seconds)&lt;br /&gt;
 #define LED_PIN D2      // D4 - GPIO2&lt;br /&gt;
 #define BUTTON_ACTIVE_LEVEL LOW&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
Danach kann man die Firmware kompilieren und auf den Wemos flashen. &lt;br /&gt;
 &lt;br /&gt;
=== MQTT-Einstellungen vornehmen ===&lt;br /&gt;
Nach einem Reboot des Wemos kann man sich mit dessen Netzwerk verbinden und dann die Einstellungen für das eigene WLAN und den verwendeten MQTT-Broker vornehmen. Hier wurde &#039;&#039;ir_blaster&#039;&#039; als Basistopic verwendet.&lt;br /&gt;
&lt;br /&gt;
Die Funktionalität des Gateways kann man dann z.B. mit mosquitto_sub prüfen:&lt;br /&gt;
 mosquitto_sub -h &amp;lt;Server-IP&amp;gt; -d -t ir_blaster/receiver/#&lt;br /&gt;
&lt;br /&gt;
Drückt man jetzt Tasten auf einer vorhandenen Infrarot-Fernbedienung, sollte die LED am Wemos blinken und entsprechende Ausgaben von mosquitto_sub erfolgen.&lt;br /&gt;
&lt;br /&gt;
== MQTT_DEVICE ==&lt;br /&gt;
&lt;br /&gt;
=== Empfangsseite ===&lt;br /&gt;
Um Informationen über empfangene Fernbedienungssignale in FHEM zu erhalten, wird zunächst das Gateway als [[MQTT_DEVICE]] angelegt:&lt;br /&gt;
&lt;br /&gt;
 define IR_Blaster MQTT_DEVICE&lt;br /&gt;
&lt;br /&gt;
Je nach Art der Fernbediencodes kann dann mittels &lt;br /&gt;
 attr IR_Blaster autoSubscribeReading ir_blaster/receiver/+/+&lt;br /&gt;
zunächst für verschiedene Fernbedienungstypen und -protokolle die automatisierte Anlage von passenden Subscriptions erfolgen. Hierzu werden dann einfach einzelne Tasten der jeweiligen Fernbedienung gedrückt. Manche Fernbedienungen benötigen einen weiteren Subtopic, hierfür ist das Attribut auf folgende Einstellung zu ändern:&lt;br /&gt;
 attr IR_Blaster autoSubscribeReading ir_blaster/receiver/+/+/+&lt;br /&gt;
&lt;br /&gt;
Die sich daraus ergebenden Attribute sehen z.B. so aus:&lt;br /&gt;
&lt;br /&gt;
 attr IR_Blaster subscribeReading_0 ir_blaster/receiver/NEC/0&lt;br /&gt;
 attr IR_Blaster subscribeReading_1 ir_blaster/receiver/RC6/1&lt;br /&gt;
 attr IR_Blaster subscribeReading_12 ir_blaster/receiver/RC5/12&lt;br /&gt;
 attr IR_Blaster subscribeReading_13 ir_blaster/receiver/UNKNOWN/13&lt;br /&gt;
 attr IR_Blaster subscribeReading_15 ir_blaster/receiver/RC6/15&lt;br /&gt;
 attr IR_Blaster subscribeReading_16388 ir_blaster/receiver/PANASONIC/48/16388&lt;br /&gt;
 attr IR_Blaster subscribeReading_20 ir_blaster/receiver/RC6/20&lt;br /&gt;
 attr IR_Blaster subscribeReading_32 ir_blaster/receiver/NEC/32&lt;br /&gt;
 &lt;br /&gt;
=== Sendeseite ===&lt;br /&gt;
Da die firmware die zu sendenden Codes jeweils aus dem passenden Topic erwartet, ist das publishSet jeweils entsprechend anzupassen, z.B. auf &lt;br /&gt;
 attr IR_Blaster publishSet ir_blaster/sender/NEC/32/&lt;br /&gt;
&lt;br /&gt;
Dann sollten sich die Fernbediencodes bereits senden lassen.&lt;br /&gt;
 set IR_Blaster 1587632295&lt;br /&gt;
&lt;br /&gt;
Da es sehr umständlich ist, bei Wechsel zwischen verschiedenen Fernbedienungsprotokollen jeweils erst das &#039;&#039;publishSet&#039;&#039; zu ändern, nutzen wir die Möglichkeit, entsprechende &amp;lt;code&amp;gt;publishSet_&amp;lt;reading&amp;gt;&amp;lt;/code&amp;gt; anzulegen. Für jede der gewünschten Protokolle ist daher ein entsprechendes Attribut zu setzen. Für obiges Beispiel wäre dies z.B.&lt;br /&gt;
 attr IR_Blaster publishSet_IRNEC32 ir_blaster/sender/NEC/32&lt;br /&gt;
&lt;br /&gt;
Nunmehr sollte der obige Code auch über diesen Befehl erfolgreich an den Wemos übertragen werden können:&lt;br /&gt;
 set IR_Blaster NEC32 1587632295&lt;br /&gt;
&lt;br /&gt;
Wenn dies funktioniert, können die übrigen Attribute gesetzt werden:&lt;br /&gt;
 attr IR_Blaster publishSet_IRPANA ir_blaster/sender/PANASONIC/48/16388&lt;br /&gt;
 attr IR_Blaster publishSet_IRRC512 ir_blaster/sender/RC5/12&lt;br /&gt;
 attr IR_Blaster publishSet_IRRC61 ir_blaster/sender/RC6/1&lt;br /&gt;
 attr IR_Blaster publishSet_IRRC615 ir_blaster/sender/RC6/15&lt;br /&gt;
 attr IR_Blaster publishSet_IRRC620 ir_blaster/sender/RC6/20&lt;br /&gt;
 attr IR_Blaster publishSet_IRRaw ir_blaster/sender/sendStoredRaw&lt;br /&gt;
 attr IR_Blaster publishSet_UNKNOWN13 ir_blaster/sender/UNKNOWN/13&lt;br /&gt;
 attr IR_Blaster publishSet_rawMode ir_blaster/sender/rawMode&lt;br /&gt;
 attr IR_Blaster publishSet_sendGC ir_blaster/sender/sendGC&lt;br /&gt;
 attr IR_Blaster publishSet_sendRAW ir_blaster/sender/sendRAW&lt;br /&gt;
&lt;br /&gt;
== MQTT2_DEVICE ==&lt;br /&gt;
Wenn man Mosquitto wie in [[MQTT2 DEVICE]] beschrieben mit einem Broker eingerichtet hat, sollte das IR-WLAN-Gateway automatisch gefunden und angelegt werden. Auf dieses neue Device muss dann noch das passende Template angewendet werden, z.B. bei einem auf Tasmota geflashten IR-Empfänger:&lt;br /&gt;
 set IR_Blaster attrTemplate tasmota_ir&lt;br /&gt;
Beim Anwenden des Templates wird man nach 4 Befehlen gefragt. Diese werden später mittels des setList-Attributs für die Befehle &amp;quot;power&amp;quot;, &amp;quot;volumeup&amp;quot; und &amp;quot;11&amp;quot; verwendet. Das sind aber ohnehin nur Beispiele, die im setList-Attribut später geändert werden können. Für den Anfang reicht es, dort irgendwelche IR-Befehle einzutragen. (Die Befehle kann man der Tasmota-Konsole entnehmen: Wenn man die vorhandene Fernbedienung auf den IR-Blaster richtet und Tasten drückt, zeigt die Konsole den empfangenen Befehl an. Z.B:&lt;br /&gt;
 13:23:52 MQT: tele/tasmota-ir/RESULT = {&amp;quot;IrReceived&amp;quot;:{&amp;quot;Protocol&amp;quot;:&amp;quot;NEC&amp;quot;,&amp;quot;Bits&amp;quot;:32,&amp;quot;Data&amp;quot;:&amp;quot;0x1D00B946&amp;quot;,&amp;quot;DataLSB&amp;quot;:&amp;quot;0xB8009D62&amp;quot;,&amp;quot;Repeat&amp;quot;:0}}&lt;br /&gt;
Der entsprechende Befehl ist dann:&lt;br /&gt;
 {&amp;quot;Protocol&amp;quot;:&amp;quot;NEC&amp;quot;,&amp;quot;Bits&amp;quot;:32,&amp;quot;Data&amp;quot;:&amp;quot;0x1D00B946&amp;quot;,&amp;quot;DataLSB&amp;quot;:&amp;quot;0xB8009D62&amp;quot;,&amp;quot;Repeat&amp;quot;:0}&lt;br /&gt;
Ggf. ändert man &amp;quot;Repeat&amp;quot; noch auf eine andere Zahl als &amp;quot;0&amp;quot;, um Sende- bzw. Empfangsproblemen vorzubeugen.&lt;br /&gt;
 {&amp;quot;Protocol&amp;quot;:&amp;quot;NEC&amp;quot;,&amp;quot;Bits&amp;quot;:32,&amp;quot;Data&amp;quot;:&amp;quot;0x1D00B946&amp;quot;,&amp;quot;DataLSB&amp;quot;:&amp;quot;0xB8009D62&amp;quot;,&amp;quot;Repeat&amp;quot;:2}&lt;br /&gt;
&lt;br /&gt;
== Grafische Darstellung in FHEM == &lt;br /&gt;
Diese erfolgt über remotecontrol. Das Modul ist [[Remotecontrol|hier]] näher beschrieben, an dieser Stelle daher nur die sich ergebenden auszugsweisen Definitionen des notify und des remotecontrol-Devices:&lt;br /&gt;
&lt;br /&gt;
=== remotecontrol ===&lt;br /&gt;
 define Receiver remotecontrol&lt;br /&gt;
 attr Receiver rc_iconpath icons/remotecontrol&lt;br /&gt;
 attr Receiver rc_iconprefix black_btn_&lt;br /&gt;
 attr Receiver row00 IRNEC32 2122415745:POWEROFF3,IRNEC32 2122448385:POWEROFF2,:blank,IRNEC32 1587632550:SPEAKER1,IRNEC32 1587665190:SPEAKER2&lt;br /&gt;
 attr Receiver row01 :blank,:blank,:blank&lt;br /&gt;
 attr Receiver row02 IRNEC32 1587632295:VOLUP2,IRNEC32 1587652950:SLEEP,IRNEC32 1587624135:MUTE,:blank,IRNEC32 1587664935:VOLDOWN2&lt;br /&gt;
 ...&lt;br /&gt;
=== notify ===&lt;br /&gt;
Zur Übertragung der Events aus remotecontrol wird ein notify benötigt:  &lt;br /&gt;
 define notify_Receiver notify Receiver set IR_Blaster $EVENT&lt;br /&gt;
&lt;br /&gt;
== Nutzung als Input-Device == &lt;br /&gt;
Auf eingehende Infrarotsignale kann mittels der üblichen Event-Handler (notify, DOIF, watchdog usw.) reagiert werden, am einfachsten nutzt man zur Erstellung den [[Event monitor|Event-Monitor]].&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
Bei der Erkennung von Codes erfolgt uU. ein sehr schneller Wechsel zu Wiederholungscodes. Ggf. sollte man versuchen, die Fernbedienungstasten nur sehr kurz zu drücken, und erkannte Codes durch entsprechende Sendetests direkt zu verifizieren.&lt;br /&gt;
 &lt;br /&gt;
== Links ==&lt;br /&gt;
* Hardwarebeschreibung: [https://github.com/emc2cube/MySWeMosIRShield Platinenlayout, Bauteileliste]&lt;br /&gt;
* firmware: [https://github.com/enc-X/mqtt-ir-transceiver]&lt;br /&gt;
* {{Link2Forum|Topic=75466|Message=672652|LinkText=Darstellung mit Hilfe einer alternativen firmware}}&lt;br /&gt;
* Infos zur Hardware: {{Link2Forum|Topic=72950|LinkText=360 Grad IR WLAN Gateway}} &lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Other Components]]&lt;br /&gt;
[[Kategorie:IP Components]]&lt;br /&gt;
[[Kategorie:Infrarot]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:MQTT]]&lt;/div&gt;</summary>
		<author><name>Motivierte linke Hände</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=IPCAM&amp;diff=32486</id>
		<title>IPCAM</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=IPCAM&amp;diff=32486"/>
		<updated>2020-01-19T13:54:56Z</updated>

		<summary type="html">&lt;p&gt;Motivierte linke Hände: Mobotix-Daten hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Einbindung von Netzwerkkameras&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Sonstiges&lt;br /&gt;
|ModTechName=49_IPCAM.pm&lt;br /&gt;
|ModOwner=mfr69bs ({{Link2FU|6|Martin Fischer}})}}&lt;br /&gt;
&lt;br /&gt;
[[IPCAM]] ermöglicht die ereignis- oder zeitgesteuerte Erzeugung von Mitschnitten bei Netzwerkkameras. Außerdem ist es möglich, die Kamera im PTZ-Modus oder über eigene Befehle zu steuern.&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
Die Kamera(bilder) müssen über eine URL erreichbar sein.&lt;br /&gt;
&lt;br /&gt;
== Definition ==&lt;br /&gt;
Das IPCAM Objekt wird angelegt mit&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;define &amp;lt;name&amp;gt; IPCAM &amp;lt;ip[:port]&amp;gt; &amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusätzlich zum obigen Define muss zwingend noch das &#039;&#039;path&#039;&#039; Attribut gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
== Attribute ==&lt;br /&gt;
Die wichtigsten Attribute von &#039;&#039;IPCAM&#039;&#039; werden im Folgenden aufgeführt, die komplette Liste findet sich in der {{Link2CmdRef|Anker=IPCAMattr}}.&lt;br /&gt;
&lt;br /&gt;
=== Authentifizierung ===&lt;br /&gt;
;basicauth&lt;br /&gt;
:Hinterlegung von Benutzernamen und Passwort &lt;br /&gt;
&lt;br /&gt;
=== Eigene Befehle ===&lt;br /&gt;
;cmd01, cmd02, ... cmd15&lt;br /&gt;
:Festlegung von Befehlen, die nicht zu den vordefinierten gehören, z.B. &amp;lt;code&amp;gt;attr ipcam cmd01 led_mode=0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vordefinierte Befehle ===&lt;br /&gt;
;cmdPanLeft, cmdPanRight, cmdTiltUp, cmdTiltDown, cmdStep &lt;br /&gt;
:Diesen Befehlen können die Kameraspezifischen Werte zugeordnet werden, z.B. &amp;lt;code&amp;gt;attr ipcam cmdTiltUp command=0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pfade ===&lt;br /&gt;
;path&lt;br /&gt;
:...&lt;br /&gt;
&lt;br /&gt;
== Unterstützte Netzwerkkameras ==&lt;br /&gt;
{{Randnotiz|RNText=Die Aufzählungen der unterstützten und der problematischen Netzwerkkameras sollten ergänzt werden, sobald neue Erkenntnisse vorliegen; beide Listen sind nicht vollständig.}}&lt;br /&gt;
Bei den folgenden Netzwerkkameras ist gesichert, dass sie durch das &#039;&#039;IPCAM&#039;&#039; Modul unterstützt sind:&lt;br /&gt;
* {{Link2Forum|Topic=33347|Message=257115|LinkText=Foscam 9805W}}&lt;br /&gt;
* Foscam FI9831P&lt;br /&gt;
* {{Link2Forum|Topic=13826|LinkText=Instar 2905}}&lt;br /&gt;
* {{Link2Forum|Topic=100493|LinkText=IN-8015 Full HD}}&lt;br /&gt;
* {{Link2Forum|Topic=36201|LinkText=IN-6001HD}}&lt;br /&gt;
* {{Link2Forum|Topic=11664|LinkText=Instar 6011, 6012, 2905}}&lt;br /&gt;
* {{Link2Forum|Topic=58676|LinkText=Instar IN-5905HD, IN-5907HD, IN-6014HD, IN-6012HD-PoE}}&lt;br /&gt;
* {{Link2Forum|Topic=15217|LinkText=WansView (Modell nicht näher spezifiziert)}}&lt;br /&gt;
* {{Link2Forum|Topic=11664|Message=158052|LinkText=Wansview 620, 625, 6012}}&lt;br /&gt;
* Axis 205&lt;br /&gt;
* D-Link DCS-933&lt;br /&gt;
* Mobotix (jedenfalls S26 und Q25)&lt;br /&gt;
*  Xiaomi Dafang (nur mit alternativer Firmware)&lt;br /&gt;
&lt;br /&gt;
Nicht gesichert, ob die Kamera unterstützt wird bzw. ob alle Funktionen nutzbar sind:&lt;br /&gt;
* {{Link2Forum|Topic=33347|LinkText=Foscam FI9831W}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Pfad-Parameter für Axis 205 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr Cam1 path /jpg/image.jpg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pfad-Parameter für D-Link DCS-933 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;attr Cam1 path image.jpg&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Parameter für Hikvision DS-2CD2032-I ===&lt;br /&gt;
Mit folgenden Parameter wurde (lt. diesem {{Link2Forum|Topic=39932|Message=322269|LinkText=Forenbeitrag}}) die Hikvision DS-2CD2032-I erfolgreich betrieben:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Cam1 IPCAM 192.168.xxx.xxx&lt;br /&gt;
attr Cam1 basicauth &amp;lt;username&amp;gt;:&amp;lt;passwort&amp;gt;&lt;br /&gt;
attr Cam1 delay 0&lt;br /&gt;
attr Cam1 group Kamera&lt;br /&gt;
attr Cam1 icon it_camera&lt;br /&gt;
attr Cam1 path Streaming/channels/1/picture?snapShotImageType=JPEG&lt;br /&gt;
attr Cam1 snapshots 1&lt;br /&gt;
attr Cam1 storage /opt/fhem/www/snapshots/cam1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pfad-Parameter für Foscam FI9831P ===&lt;br /&gt;
Die Version ist ohne basicauth und hat Nutzer und Passwort direkt in der URL. Kann natürlich geändert werden.&lt;br /&gt;
Sämtliche Befehle für die Foscam HD Kameras findet man [https://www.manualslib.com/manual/728928/Foscam-Ip-Camera.html hier]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define IPKamera IPCAM &amp;lt;ip&amp;gt;:&amp;lt;port&amp;gt;&lt;br /&gt;
attr IPKamera cmd01 cmd=ptzStopRun&amp;amp;usr=xxx&amp;amp;pwd=xxx&lt;br /&gt;
attr IPKamera cmdPanLeft cmd=ptzMoveLeft&amp;amp;usr=xxx&amp;amp;pwd=xxx&lt;br /&gt;
attr IPKamera cmdPanRight cmd=ptzMoveRight&amp;amp;usr=xxx&amp;amp;pwd=xxx&lt;br /&gt;
attr IPKamera cmdPos01 cmd=ptzGotoPresetPoint&amp;amp;name=&amp;lt;Nameposition&amp;gt;&amp;amp;usr=xxx&amp;amp;pwd=xxx&lt;br /&gt;
attr IPKamera cmdTiltDown cmd=ptzMoveDown&amp;amp;usr=xxx&amp;amp;pwd=xxx&lt;br /&gt;
attr IPKamera cmdTiltUp cmd=ptzMoveUp&amp;amp;usr=xxx&amp;amp;pwd=xxx&lt;br /&gt;
attr IPKamera path cgi-bin/CGIProxy.fcgi?usr=xxx&amp;amp;pwd=xxx&amp;amp;cmd=snapPicture2&lt;br /&gt;
attr IPKamera pathCmd cgi-bin/CGIProxy.fcgi&lt;br /&gt;
attr IPKamera pathPanTilt cgi-bin/CGIProxy.fcgi?usr=xxx&amp;amp;pwd=xxx&lt;br /&gt;
attr IPKamera storage ./www/images/webcam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pfad-Parameter für Mobotix ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr IPKamera path /record/current.jpg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Einstellungen für Foscam C2 und Foscam R2 ===&lt;br /&gt;
Eine ausführliche Beschreibung zur Benutzung der IP Kameras Foscam C2 und Foscam R2 findet sich in {{Link2Forum|Topic=84677|LinkText=diesem Forenthread}}.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Parameter für Xiaomi Dafang ===&lt;br /&gt;
Diese Parameter gelten bei installierter alternativer Firmware von [https://github.com/EliasKotlyar/Xiaomi-Dafang-Hacks hier]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Attributes:&lt;br /&gt;
attr IPKamera  cmdPanLeft cmd=motor_left&lt;br /&gt;
attr IPKamera  cmdPanRight cmd=motor_right&lt;br /&gt;
attr IPKamera  cmdTiltDown cmd=motor_down&lt;br /&gt;
attr IPKamera  cmdTiltUp  cmd=motor_up&lt;br /&gt;
attr IPKamera  delay      10&lt;br /&gt;
attr IPKamera  event-on-update-reading snapshots&lt;br /&gt;
attr IPKamera  icon       it_camera&lt;br /&gt;
attr IPKamera  path       cgi-bin/currentpic.cgi&lt;br /&gt;
attr IPKamera  pathPanTilt cgi-bin/action.cgi?&lt;br /&gt;
attr IPKamera  snapshots  5&lt;br /&gt;
attr IPKamera  storage    /opt/fhem/www/ipcamera/dafang_1/shot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Parameter für INSTAR Full HD ===&lt;br /&gt;
Die vollständige Schnittstelle und weitere Beispiele können direkt im [https://wiki.instar.de/Erweitert/ INSTAR-Wiki] eingesehen werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Zur Integration einer INSTAR Full HD CAM können zum Beispiel folgende Attribute verwendet werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr INSTAR_8015 basicauth {USERNAME}:{PASSWORD}&lt;br /&gt;
attr INSTAR_8015 cmd01 cmd=setinfrared&amp;amp;-infraredstat=auto&lt;br /&gt;
attr INSTAR_8015 cmd02 cmd=setinfrared&amp;amp;-infraredstat=close&lt;br /&gt;
attr INSTAR_8015 cmd03 cmd=setinfrared&amp;amp;-infraredstat=open&lt;br /&gt;
attr INSTAR_8015 cmd04 cmd=setmdalarm&amp;amp;-aname=ftprec&amp;amp;-switch=on&lt;br /&gt;
attr INSTAR_8015 cmd05 cmd=setmdalarm&amp;amp;-aname=ftprec&amp;amp;-switch=off&lt;br /&gt;
attr INSTAR_8015 cmd06 cmd=setplanrecattr&amp;amp;-planrec_enable=0&lt;br /&gt;
attr INSTAR_8015 cmd07 cmd=setplanrecattr&amp;amp;-planrec_enable=1&lt;br /&gt;
attr INSTAR_8015 cmd08 cmd=setplanrecattr&amp;amp;-planrec_chn=11&lt;br /&gt;
attr INSTAR_8015 cmd09 cmd=setplanrecattr&amp;amp;-planrec_chn=12&lt;br /&gt;
attr INSTAR_8015 cmd10 cmd=manualrec&amp;amp;-act=on&lt;br /&gt;
attr INSTAR_8015 cmd11 cmd=manualrec&amp;amp;-act=off&lt;br /&gt;
attr INSTAR_8015 cmd12 cmd=sdfrmt&lt;br /&gt;
attr INSTAR_8015 cmd13 cmd=preset&amp;amp;-act=goto&amp;amp;-number=0&lt;br /&gt;
attr INSTAR_8015 cmd14 cmd=preset&amp;amp;-act=goto&amp;amp;-number=1&lt;br /&gt;
attr INSTAR_8015 cmd15 cmd=preset&amp;amp;-act=goto&amp;amp;-number=2&lt;br /&gt;
attr INSTAR_8015 cmdPanLeft -act=left&lt;br /&gt;
attr INSTAR_8015 cmdPanRight -act=right&lt;br /&gt;
attr INSTAR_8015 cmdPos15 -act=stop&lt;br /&gt;
attr INSTAR_8015 cmdTiltDown -act=down&lt;br /&gt;
attr INSTAR_8015 cmdTiltUp -act=up&lt;br /&gt;
attr INSTAR_8015 credentials /&amp;lt;ipcam-conf-path&amp;gt;/ipcam.conf&lt;br /&gt;
attr INSTAR_8015 eventMap /pos 15:MOVE-STOP/pan left:MOVE-LEFT/pan right:MOVE-RIGHT/tilt up:MOVE-UP/tilt down:MOVE-DOWN/cmd 1:IR-LED-auto/cmd 2:IR-LED-off/cmd 3:IR-LED-on/cmd 4:FTP-rec-on/cmd 5:FTP-rec-off/cmd 6:REC-SD-DISABLE/cmd 7:REC-SD-ENABLE/cmd 8:REC-SD-QUAL-HIGH/cmd 9:REC-SD-QUAL-MID/cmd 10:MAN-REC-Start/cmd 11:MAN-REC-Stop/cmd 12:FORMAT-SD-CARD/cmd 13:POS-WZ/cmd 14:POS-Flur/cmd 15:POS-Park/&lt;br /&gt;
attr INSTAR_8015 icon it_camera&lt;br /&gt;
attr INSTAR_8015 path tmpfs/snap.jpg&lt;br /&gt;
attr INSTAR_8015 pathCmd param.cgi&lt;br /&gt;
attr INSTAR_8015 pathPanTilt ptzctrl.cgi?-step=&lt;br /&gt;
attr INSTAR_8015 scheme https&lt;br /&gt;
attr INSTAR_8015 storage /&amp;lt;ipcam-snapshot-path&amp;gt;/snapshots&lt;br /&gt;
attr INSTAR_8015 webCmd POS-WZ:POS-Flur:POS-Park&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Nicht unterstützte Netzwerkkameras ==&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Die hier aufgeführten Netzwerkkameras sind definitiv nicht unterstützt oder es gibt gravierende, hier beschriebene Einschränkungen.}}&lt;br /&gt;
;TRENDnet TV-IP320PI &lt;br /&gt;
:Aufruf der Funktion &amp;lt;code&amp;gt;get &#039;&#039;myCam&#039;&#039; image&amp;lt;/code&amp;gt; führt zur Fehlermeldung &#039;&#039;...invalid Format&#039;&#039;; auf Kamerabild oder Stream kann jedoch über die URL camHostnameOrIP/Streaming/channels/1/Picture (Bild) bzw. camHostnameOrIP/Streaming/channels/1/httpPreview (Stream) zugegriffen werden.&lt;br /&gt;
&lt;br /&gt;
== Generierte Ereignisse ==&lt;br /&gt;
Das Modul &#039;&#039;IPCAM&#039;&#039; generiert die Ereignisse &lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;last: &amp;lt;name_of_device&amp;gt;_snapshot.&amp;lt;image_extension&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;snapshots: &amp;lt;total_number_of_taken_snapshots_at_end&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
Derzeit (08/2015) ist das Logging aus dem Modul zumindest lückenhaft und verbesserungsfähig. So sollten z.B. einige weitere Meldungen zur Fehlereingrenzung bei der Einrichtung eines IPCAM Objekts eingefügt werden:&lt;br /&gt;
* Ausgabe des kompletten Pfads / der URL, die bei der Erzeugung eines Snapshots aus einzelnen Bestandteilen zusammengesetzt wird&lt;br /&gt;
* Die Zuordnung von Meldungen zu &#039;&#039;verbose&#039;&#039;-Leveln sollte kontrolliert und ggf. umgestellt werden&lt;br /&gt;
* siehe auch diesen {{Link2Forum|Topic=39932|LinkText=Forenthread}}, der Beschreibung von Problemen, eine Hikvision IPCam in Betrieb zu nehmen&lt;br /&gt;
&lt;br /&gt;
Außerdem müsste das Modul dringend auf die aktuelle Form des Logging, [[verbose|verbose/Log3]], umgestellt werden.&lt;br /&gt;
&lt;br /&gt;
Eine mögliche Lösung für das Problem &amp;quot;Wrong or not supported image format: unknown&amp;quot; habe ich hier beschrieben: {{Link2Forum|Topic=10772|Message=425265|LinkText=Forenbeitrag}}&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Forenthread zur {{Link2Forum|Topic=10772|LinkText=Erweiterung des IPCAM Moduls}}&lt;br /&gt;
* Forenthread zum Thema {{Link2Forum|Topic=21005|LinkText=Bewegungserkennung}}&lt;br /&gt;
* Forenthread zum Thema {{Link2Forum|Topic=30723|LinkText=Bewegungsmelder der Kamera &amp;quot;anzapfen&amp;quot;}}&lt;br /&gt;
* Webseite des Modulautors zum Thema [http://www.fischer-net.de/hausautomation/videoueberwachung.html Videoüberwachung]&lt;/div&gt;</summary>
		<author><name>Motivierte linke Hände</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Global&amp;diff=32249</id>
		<title>Global</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Global&amp;diff=32249"/>
		<updated>2019-12-31T18:11:35Z</updated>

		<summary type="html">&lt;p&gt;Motivierte linke Hände: Hinweis auf autosave = 0 bei Problemen beim Start ergänzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:global}}  &amp;lt;!-- da richtige Schreibweise kleinen Anfangsbuchstaben hat --&amp;gt;&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Gerät zur Definition von globalen Attributen&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=global&lt;br /&gt;
|ModForumArea=Automatisierung&lt;br /&gt;
|ModTechName=fhem.pl (&amp;quot;Built-in&amp;quot;)&lt;br /&gt;
|ModOwner=rudolfkoenig ({{Link2FU|8|Forum}} / [[Benutzer Diskussion:Rudolfkoenig|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Das &#039;&#039;&#039;Device global&#039;&#039;&#039; dient dazu, diverse allgemein für das gesamte FHEM gültige Eigenschaften und Verhaltensvorgaben zu definieren. Diese werden in [[Attribut|Attributen]] des devices verwaltet, indem deren Werten gemäß der {{Link2CmdRef|Lang=de|Anker=global|Label=dokumentierten}} Bedeutung gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
Das Pseudogerät &#039;&#039;&#039;global&#039;&#039;&#039; wird automatisch erstellt, kann weder gelöscht noch [[rename|umbenannt]] werden und hat auch keine &#039;&#039;set&#039;&#039; oder &#039;&#039;get&#039;&#039; Parameter.&lt;br /&gt;
{{Todo|Ergänzen}}&lt;br /&gt;
&lt;br /&gt;
== Definition ==&lt;br /&gt;
Nicht erforderlich; wird automatisch angelegt.&lt;br /&gt;
== Attribute ==&lt;br /&gt;
=== altitude ===&lt;br /&gt;
Höhe in Metern über dem Meeresspiegel, Voreinstellung ist 0. &lt;br /&gt;
=== latitude ===&lt;br /&gt;
Geographische Breite in Dezimalgrad, Voreinstellung ist 50.112, Frankfurt am Main. &lt;br /&gt;
=== longitude ===&lt;br /&gt;
Geographische Länge in Dezimalgrad, Voreinstellung ist 8.686, Frankfurt am Main. &lt;br /&gt;
=== archivedir, archivecmd, nrarchive ===&lt;br /&gt;
Diese Attribute können grundsätzlich in allen Devices gesetzt werden und beziehen sich dann auf deren Logging. Im Device global wirken sie ausschließlich auf das FHEM [[#logfile|logfile]].&lt;br /&gt;
&lt;br /&gt;
Wenn eine neue FileLog-Datei geöffnet wird, wird der FileLog archiver aufgerufen. Das geschieht aber nur, wenn der Name der Datei sich geändert hat (abhängig von den zeitspezifischen Wildcards, die in FileLog (define) beschrieben werden) und gleichzeitig ein neuer Datensatz in diese Datei geschrieben werden muss. &lt;br /&gt;
&lt;br /&gt;
Wenn das Attribut archivecmd benutzt wird, startet es als shell-Kommando (eine Einbettung in &amp;quot; ist nicht notwendig), und jedes % in diesem Befehl wird durch den Namen des alten Logfiles ersetzt.&lt;br /&gt;
&lt;br /&gt;
Wenn dieses Attribut nicht gesetzt wird, aber dafür nrarchive, werden nrarchive viele Logfiles im aktuellen Verzeichnis gelassen, und ältere Dateien in das Archivverzeichnis (archivedir) verschoben (oder gelöscht, falls kein archivedir gesetzt wurde).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung&#039;&#039;&#039;: &amp;quot;ältere Dateien&amp;quot; sind die, die in der alphabetisch sortierten Liste oben sind.&lt;br /&gt;
=== archivesort ===&lt;br /&gt;
archivesort kann auf dem (voreingestellten) Wert &#039;&#039;alphanum&#039;&#039; oder auf &#039;&#039;timestamp&#039;&#039; gesetzt werden, und bestimmt die Methode für die Reihenfolgenberechnung der Dateien für nrarchive.&lt;br /&gt;
=== autoload_undefined_devices ===&lt;br /&gt;
Wenn dieses Attribut gesetzt ist, werden die zu einer neu empfangenen Nachricht zugehörigen Module automatisch geladen.  Dies erfolgt vom  autocreate Gerät, um so automatisch ein FHEM-Gerät bei erreichen einer entsprechenden Nachricht zu erstellen. &lt;br /&gt;
{{Todo|Ergänzen: gesetzt mit welchem Wert?}}&lt;br /&gt;
=== backupcmd ===&lt;br /&gt;
Wenn dieses Attribut gesetzt ist, startet es als ein SHELL-Befehl und erstellt eine durch Leerzeichen getrennte Liste von Dateien/Verzeichnissen als ein Argument zum Befehl, z.B.: &lt;br /&gt;
 &amp;quot;/etc/fhem.cfg /var/log/fhem/fhem.save /usr/share/fhem/contrib /usr/share/fhem/FHEM /usr/share/fhem/foo /usr/share/fhem/foobar /usr/share/fhem/www&amp;quot; &lt;br /&gt;
&#039;&#039;&#039;Bemerkung&#039;&#039;&#039;: Ihr Befehl/Skript muss die Zeichenkette &amp;quot;backup done&amp;quot; zurückgeben oder eine entsprechende Zeichenkette um Fehlermeldungen auszugeben, damit die Zusammenarbeit mit update funktioniert!&lt;br /&gt;
&lt;br /&gt;
{{Todo|Ergänzen: Was denn nun: &#039;backup done&#039; oder die oben beschriebene Zeichenkette?}}&lt;br /&gt;
Dieses Attribut wird vom backup Befehl benutzt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel&#039;&#039;&#039;:&lt;br /&gt;
 attr global backupcmd /usr/local/bin/myBackupScript.sh &lt;br /&gt;
=== backupdir ===&lt;br /&gt;
Ein Verzeichnis, in dem die komprimierten Sicherheitsdateien zu speichern sind. Dieses Attribut wird vom backup Befehl benutzt.&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 attr global backupdir /Volumes/BigHD &lt;br /&gt;
&lt;br /&gt;
=== backupsymlink ===&lt;br /&gt;
Wird dieses Attribut auf etwas anderes als &#039;&#039;no&#039;&#039; gesetzt, dann unterstützt der Archivierungsbefehl &amp;quot;tar&amp;quot; symbolische Links in Ihrem Backup. Andererseits, anderenfalls (Wert &#039;&#039;no&#039;&#039;) werden symbolische Links vom Befehl &amp;quot;tar&amp;quot; ignoriert. Dieses Attribut wird vom backup Befehl benutzt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 attr global backupsymlink yes &lt;br /&gt;
=== blockingCallMax ===&lt;br /&gt;
Begrenzt die Anzahl der parallel laufenden Prozesse, die von der FHEM Hilfsroutine &#039;&#039;BlockingCall&#039;&#039; gestartet wurden. Sinnvoll auf weniger leistungsfähigeren Hardware. &lt;br /&gt;
=== configfile ===&lt;br /&gt;
Enthält den Namen der FHEM Konfigurationsdatei. Wenn save ohne Argumente aufgerufen wird dann wird die Ausgabedatei unter diesem Dateinamen gespeichert. &lt;br /&gt;
=== commandref ===&lt;br /&gt;
Falls der Wert &#039;&#039;full&#039;&#039; (die Voreinstellung) ist, wird nach jedem update ein komplettes commandref.html generiert. Falls der Wert &#039;&#039;modular&#039;&#039; ist, wird die Moduldokumentation erst nach Bedarf während der Laufzeit per JavaScript geladen. &lt;br /&gt;
=== dnsHostsFile ===&lt;br /&gt;
Falls dnsServer gesetzt ist, wird die angegebene Datei nach dem Hostnamen durchsucht. Um die vom System verwendete Datei zu benutzen, ist es unter Linux/Unix/OSX auf &#039;&#039;/etc/hosts&#039;&#039; und unter Windows auf &#039;&#039;C:\windows\system32\drivers\etc\hosts&#039;&#039; zu setzen. Achtung: es wird nur IPv4 unterstützt. &lt;br /&gt;
=== dnsServer ===&lt;br /&gt;
Enthält die IP Adresse des DNS Servers. Die von bestimmten Modulen (oder eigenen Code) aufgerufene HttpUtils_NonblockingGet wird auch bei der DNS Auflösung nicht mehr blockieren, falls dieses Attribut gesetzt ist, da es in diesem Fall FHEM eigene Routinen aufgerufen werden. Sonst werden die Betriebssystem eigenen, blockierenden Routinen inet_aton bzw gethostbyname aufgerufen. &lt;br /&gt;
=== featurelevel ===&lt;br /&gt;
Der Wert dieses Attributes de-/aktiviert einzelne Fähigkeiten (Features) bzw. Verhaltensweisen, die im Laufe der Versionsgeschichte dazugekommen sind, entfernt oder geändert wurden basierend auf der angegebenen  FHEM Version. &lt;br /&gt;
&lt;br /&gt;
Bei einer Neuinstallation oder einem Update wird der Featurelevel automatisch auf die aktuelle Version gesetzt. Ein manuelles&lt;br /&gt;
 attr global featurelevel x.y&lt;br /&gt;
mit den Werten für x und y aus den gewünschten Haupt- und Unterversionsnummern setzt temporär oder - bei Speicherung in der fhem.cfg dauerhaft - eine gewünschte Version als Basis. Dieses Vorgehen kann z.B. bei Upgrades mit unerwarteten Nebenwirkungen eine erste Maßnahme und Workaround sein.&lt;br /&gt;
=== holiday2we ===&lt;br /&gt;
Ist dieses Attribut gesetzt, wird die Variable &#039;&#039;$we&#039;&#039; als &amp;quot;true&amp;quot; betrachtet, wenn der Wert der Variable &#039;&#039;holiday&#039;&#039; zu diesem Attribut nicht &amp;quot;none&amp;quot; ist.&lt;br /&gt;
&lt;br /&gt;
Falls der Wert des Attributes eine Komma getrennte Liste ist, dann ist &#039;&#039;$we&#039;&#039; wahr, falls eine der referenzierten Instanzen nicht &amp;quot;none&amp;quot; ist.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 attr global holiday2we hessen &lt;br /&gt;
{{Todo|Verwirrung auflösen...}}&lt;br /&gt;
=== httpcompress ===&lt;br /&gt;
Einige Module von FHEM verwenden das Modul &#039;&#039;HttpUtils&#039;&#039; mit aktivierter Komprimierung (Voreinstellung). Falls man httpcompress auf 0 setzt, wird die Komprimierung deaktiviert. &lt;br /&gt;
{{Todo|Wozu sollte das gut sein?}}&lt;br /&gt;
=== keyFileName ===&lt;br /&gt;
FHEM Module speichern Passwörter und IDs in der Datei FHEM/FhemUtils/uniqueID. Um mehrere FHEM-Instanzen im gleichen Verzeichnis starten zu können, kann man dieses Attribut setzen, dessen Wert an FHEM/FhemUtils/ angehängt wird. &lt;br /&gt;
=== logdir ===&lt;br /&gt;
Falls gesetzt, wird %L in dem Attribut &#039;&#039;[[#logfile|logfile]]&#039;&#039; (oder in der Dateinamen Spezifikation des [[FileLog]] Moduls) durch den Wert des Attributes ersetzt. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung&#039;&#039;&#039; Wird der Wert des Attributes geändert, bewirkt dies &#039;&#039;&#039;nicht&#039;&#039;&#039; das Verschieben bereits erstellter Dateien, und kann daher potentiell zu diversen Problemen führen.&lt;br /&gt;
=== logfile ===&lt;br /&gt;
Gibt das Logfile an, in welches gespeichert werden soll. Mit dem Wert &#039;&#039;&amp;quot;-&amp;quot;&#039;&#039; erfolgt die Ausgabe des Logs in das stdout-Gerät. In diesem Fall stellt sich der Server nicht selbst in den Hintergrund.&lt;br /&gt;
&lt;br /&gt;
Der Name der Logdatei kann auch &amp;quot;wildcards&amp;quot; enthalten, um eine einfachere Abfolge für die Dateien zu erreichen. Weiteres zu den Dateinamen beim Modul [[FileLog]]. &lt;br /&gt;
&lt;br /&gt;
Die Attribute [[#archivedir, archivecmd, nrarchive|archivedir, archivecmd, nrarchive]] können ggf. passend gesetzt werden.&lt;br /&gt;
                 &lt;br /&gt;
Sie können den Namen der Logdatei mit  {$currlogfile} festlegen. &lt;br /&gt;
{{Todo|Der Gehalt des letzten Satzes erschließt sich nicht.}}&lt;br /&gt;
=== maxShutdownDelay ===&lt;br /&gt;
Einige Module benötigen Zeit zum Aufräumen beim shutdown, aber FHEM begrenzt diese Zeit auf 10 Sekunden. Mit diesem Attribut kann man sie anpassen. &lt;br /&gt;
=== modpath ===&lt;br /&gt;
Mit modpath geben Sie den Pfad zu dem Verzeichnis der FHEM Module an. Der Pfad enthält nicht das Verzeichnis FHEM. Das festgelegte Verzeichnis wird nach Dateinamen in der Form NN_&amp;lt;NAME&amp;gt;.pm durchsucht. Die gefundenen Dateien dienen als Quelle die Definition von Geräten unter dem Namen &amp;lt;NAME&amp;gt;. Wenn das erste Gerät des Typs &amp;lt;NAME&amp;gt; definiert wird, werden die entsprechenden Module geladen und in dem Modul die entsprechende Funktion mit dem Namen &amp;lt;NAME&amp;gt;_Initialize aufgerufen. Eine Ausnahme bilden Module die mit der Nummer 99 im Dateinamen beginnen. Diese enthalten PERL-Hilfsfunktionen und werden zur Startzeit geladen. &lt;br /&gt;
=== motd ===&lt;br /&gt;
&#039;&#039;Message Of The Day&#039;&#039; (Nachricht des Tages). Der hier hinterlegte Text wird im Begrüßungsbildschirm von FHEM angezeigt, oder direkt beim Start einer &amp;quot;telnet&amp;quot; Sitzung, bevor der Prompt (&#039;&#039;fhem&amp;gt;&#039;&#039;)erscheint. Der SecurityCheck setzt motd wenn es bisher nicht gesetzt ist. Um das zu verhindern, können sie den Wert von motd auf &#039;&#039;none&#039;&#039; setzen. motd wird auch verwendet, um Fehlermeldungen während des FHEM-Starts zu sammeln und anzuzeigen. &lt;br /&gt;
=== mseclog ===&lt;br /&gt;
Wenn dieses Attribut (z. B. auf den Wert 1) gesetzt ist, enthalten Datums/Zeiteinträge (timestamp) in der Logdatei einen Millisekunden-Eintrag.&lt;br /&gt;
&lt;br /&gt;
=== nofork ===&lt;br /&gt;
Wenn dieses Attribut oder das Attribut [[#logfile|logfile]] auf &amp;quot;&#039;&#039;-&#039;&#039;&amp;quot; gesetzt ist, wird FHEM nicht im Hintergrund abgearbeitet. Dieses Attribut ist bei einigen FHEM Installationen auf FRITZ!-Boxen notwendig, und wird fuer Windows automatisch gesetzt. &lt;br /&gt;
{{Todo|Ist das so formuliert tatsächlich korrekt?}}&lt;br /&gt;
=== pidfilename ===&lt;br /&gt;
In die angegebene Datei wird die Prozess-ID des FHEM(-Perl)-Prozesses geschrieben. Der Server läuft als Hintergrundprozess (daemon). Einige Distributionen wollen anhand der PID testen, ob der FHEM Prozess läuft. Die Datei wird bei Ausführung des &amp;quot;shutdown&amp;quot;-Kommandos gelöscht. &lt;br /&gt;
=== proxy ===&lt;br /&gt;
Der Wert wird in der Form &#039;&#039;IP:PORT&#039;&#039; gesetzt, wenn HttpUtils einen HTTP-Proxy verwenden soll. &lt;br /&gt;
=== proxyAuth ===&lt;br /&gt;
Base64 kodiertes Benutzername:Passwort für den HTTP-Proxy (vgl. [[#proxy|Attribut proxy]].&lt;br /&gt;
=== proxyExclude ===&lt;br /&gt;
Regulärer Ausdruck für die Namen aller Hosts, die &#039;&#039;&#039;nicht&#039;&#039;&#039; via Proxy anzusprechen sind. &lt;br /&gt;
=== restoreDirs ===&lt;br /&gt;
&#039;&#039;Update&#039;&#039; sichert (kopiert) jede Datei, bevor sie durch die neue Version ersetzt wird. Zu diesen Zweck wird zuerst ein restoreDir/Update-Verzeichnis angelegt (vgl. Attribut [[#modpath|modpath]]) und danach ein Unterverzeichnis mit dem aktuellen Datum. In dieses Verzeichnis werden die alten Versionen der Dateien vor dem Überschreiben gerettet. Die Voreinstellung ist 3, d.h. die letzten 3 Datums-Verzeichnisse werden aufgehoben, und die älteren entfernt. &lt;br /&gt;
&lt;br /&gt;
Auch fhem.cfg und fhem.state wird auf diese Weise vor dem Ausführen von save gesichert, diesmal in das restoreDir/save Verzeichnis. Zum Restaurieren der alten Dateien kann man das restore Befehl verwenden.&lt;br /&gt;
&lt;br /&gt;
Falls man den Wert auf 0 setzt, ist dieses Feature deaktiviert. &lt;br /&gt;
=== sendStatistics ===&lt;br /&gt;
Der Wert dieses Attributes steuert das Verhalten des Moduls [[Fheminfo]]:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;onUpdate&#039;&#039;: Übertragung von INFO-Daten bei jedem Update (empfohlene Einstellung).&lt;br /&gt;
* &#039;&#039;manually&#039;&#039;: Manuelle Übertragung der INFO-Daten mit dem FHEM-Befehl [[fheminfo|fheminfo send]]. &lt;br /&gt;
* &#039;&#039;never&#039;&#039;: Die Übertragung von INFO-Daten wird komplett verhindert.&lt;br /&gt;
&lt;br /&gt;
=== statefile ===&lt;br /&gt;
Der Wert dieses Attributes legt den Namen der Datei fest, in die Statusinformationen aller Geräte gespeichert werden, bevor der Server heruntergefahren wird. Falls diese Datei nicht angegeben wird, werden keinerlei Informationen gesichert.&lt;br /&gt;
=== title ===&lt;br /&gt;
Setzt im Browser den Fenstertitel der FHEM-Session. Ist der Wert in {} eingeschlossen, wird er als Perl-Ausdruck ausgewertet.&lt;br /&gt;
=== useInet6 ===&lt;br /&gt;
Die HttpUtils Routinen verwenden IPv6 für die Kommunikation, falls der Server eine IPv6 Adresse hat. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung&#039;&#039;&#039;: das Perl-Modul IO::Socket::INET6 wird benötigt.&lt;br /&gt;
{{Todo|Welcher Wert ist für das Attribut zu setzen?}}&lt;br /&gt;
=== userattr ===&lt;br /&gt;
Enthält eine durch Leerzeichen getrennte Liste, in der die Namen zusätzlicher Attribute aufgeführt sind, die in allen Devices verfügbar werden. Diese müssen zuerst in dieser Liste definiert werden, bevor sie (individuell bei allen Geräten) angewendet werden können.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;userattr&#039;&#039; kann auch als Attribut in einzelnen Gerätekonfigurationen spezifiziert werden, um weitere Attribute &#039;&#039;&#039;für diese Geräte&#039;&#039;&#039; zu definieren.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung&#039;&#039;&#039;: Bei der Festlegung global verfügbarer, zusätzlicher Attributnamen ist dringend darauf zu achten, dass keine Kollisionen mit Geräte spezifischen Attributen erzeugt werden.&lt;br /&gt;
=== dupTimeout ===&lt;br /&gt;
Definert die Wartezeit, nach der 2 identische Ereignisse zweier Empfänger als Duplikat angesehen werden. Voreingestellt sind 0,5 Sekunden.  &lt;br /&gt;
=== showInternalValues ===&lt;br /&gt;
Attribute, Geräte, Readings die mit Punkt (.) anfangen werden nicht angezeigt, es sei denn das globale Attribut &#039;&#039;showInternalValues&#039;&#039; ist gesetzt. Diese Variable wird bei den Befehlen &#039;&#039;[[list]]&#039;&#039; und &#039;&#039;[[xmllist]]&#039;&#039; und bei der FHEMWEB Raumansicht geprüft. &lt;br /&gt;
{{Todo|... gesetzt auf welchen Wert?}}&lt;br /&gt;
=== sslVersion ===&lt;br /&gt;
Setzt die akzeptierten Crypto-Algorithmen im Hilfsmodul [[TcpServices]]. Die Voreinstellung &#039;&#039;TLSv12:!SSLv3&#039;&#039; wird als sicherer erachtet als die vorherige &#039;&#039;SSLv23:!SSLv3:!SSLv2&#039;&#039;, aber sie kann Probleme mit nicht ausreichend aktualisierten Netzwerk-Diensten verursachen. &lt;br /&gt;
=== stacktrace ===&lt;br /&gt;
Falls auf &#039;&#039;1&#039;&#039; gesetzt, schreibt FHEM zusätzlich zu jedem &amp;quot;PERL WARNING&amp;quot; den stacktrace ins Log. &lt;br /&gt;
=== restartDelay ===&lt;br /&gt;
Setzt die Verzögerung beim Neustart mit &#039;&#039;shutdown restart&#039;&#039;, die Voreinstellung ist 2 (Sekunden).&lt;br /&gt;
=== autosave ===&lt;br /&gt;
Erlaubt manchen Modulen, nach einer automatischen Änderung der Konfiguration &#039;&#039;save&#039;&#039; auszuführen, z. B. nachdem ein Gerät angelegt wurde. Die Voreinstellung ist &#039;&#039;1&#039;&#039; (wahr), man kann es ausschalten, indem man den Wert auf &#039;&#039;0&#039;&#039; setzt. &lt;br /&gt;
&lt;br /&gt;
Auch wenn man autosave auf &#039;&#039;1&#039;&#039; setzt, wird es automatisch beim Starten wieder auf &#039;&#039;0&#039;&#039; gesetzt, falls beim Starten was schiefgegangen ist, damit ein automatisches Save (wie auch manche Module das ungefragt machen) nicht zum Verlust von Teilen der Konfiguration führt.&lt;br /&gt;
== weitere Informationen  ==&lt;br /&gt;
Siehe {{Link2CmdRef|Lang=de|Label=commandref|Anker=global}}.&lt;/div&gt;</summary>
		<author><name>Motivierte linke Hände</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=GDS&amp;diff=25165</id>
		<title>GDS</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=GDS&amp;diff=25165"/>
		<updated>2018-02-09T07:25:18Z</updated>

		<summary type="html">&lt;p&gt;Motivierte linke Hände: Fehlende Funktion des Kartendownloads dokumentiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Herunterladen und Auswerten von Daten des Deutschen Wetterdienstes&lt;br /&gt;
|ModType=contrib&lt;br /&gt;
|ModForumArea=Unterstützende Dienste/Wettermodule&lt;br /&gt;
|ModFTopic=14106&lt;br /&gt;
|ModTechName=55_GDS.pm&lt;br /&gt;
|ModOwner=betateilchen&lt;br /&gt;
}}&lt;br /&gt;
[[GDS]] ist ein Modul, mit dessen Hilfe man sich die Daten des Deutschen Wetterdienstes herunterladen kann und dann Wetterlage, diverse Wetterkarten und/oder Unwettermeldungen anzeigen/auswerten kann.&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
=== Anmeldung beim DWD ===&lt;br /&gt;
Als erstes muss man sich beim Deutschen Wetterdienst zur [http://www.dwd.de/grundversorgung Grundversorgung] kostenlos [http://kunden.dwd.de/gdsRegistration/gdsRegistrationStart.do anmelden].&lt;br /&gt;
&lt;br /&gt;
=== Installation der benötigten Perl-Module ===&lt;br /&gt;
GDS benötigt die Perl-Module Net::FTP, List::MoreUtils, XML::Simple, Text::CSV. &lt;br /&gt;
&lt;br /&gt;
Für Ubuntu und Raspi sollte funktionieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;apt-get install libnet-lite-ftp-perl liblist-moreutils-perl libxml-simple-perl libtext-csv-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das ftp-Modul verursacht manchmal Probleme bei der Installation. Teilweise ist es wohl auch schon in der Grundinstallation vorhanden, ansonsten kann man versuchen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;apt-get install libnet-ftp-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;apt-get install libwww-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Abhängig von der Perl-Version muss ggf. auch noch Archive::Zip installiert werden.&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
{{Randnotiz|RNTyp=Fehl|RNText=Dieser Modul ist &#039;&#039;&#039;NICHT&#039;&#039;&#039; in der {{Link2CmdRef}} dokumentiert!}}&lt;br /&gt;
&lt;br /&gt;
=== Define ===&lt;br /&gt;
&amp;lt;code&amp;gt;define [gdsName] GDS [gdsUsername] [gdsPasswort]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[gdsUsername] und [gdsPasswort] gibt es nach Anmeldung vom DWD.&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
Die vollständige Liste der Attribute ist in der {{Link2CmdRef|Anker=GDS}}.&lt;br /&gt;
&lt;br /&gt;
Hilfreich kann u.a. sein, wenn man hinter eine Firewall sitzt und der Datenabruf nicht funktioniert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr [gdsName] gdsPassiveFtp 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
=== Liste der verfügbaren Zellen für Warnungen abrufen ===&lt;br /&gt;
&amp;lt;code&amp;gt;get [gdsName] list capstations&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Manuelle Aktualisierung der Daten ===&lt;br /&gt;
&lt;br /&gt;
==== Aktuelle Daten vom Server abrufen ====&lt;br /&gt;
&amp;lt;code&amp;gt;get [gdsName] rereadcfg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Readings aus abgerufenen Daten aktualisieren ====&lt;br /&gt;
&amp;lt;code&amp;gt;set [gdsName] update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Station setzen für automatischen, periodischen Abruf ===&lt;br /&gt;
Station setzen, für die beim fhem-Start und dann alle 20 Minuten die Vorhersagedaten eingelesen werden sollen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;set [gdsName] forecasts [Station]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Automatisch abgerufen (alle 20 Minuten) werden nur die mit fc_ beginnenden Readings (forecast, d.h. die Vorhersage). Die a_ Readings (Warnungen, etc.) müssen manuell aktualisiert werden.&lt;br /&gt;
&lt;br /&gt;
=== Unwetterwarnungen nach Region aus gelesenen Daten raussuchen ===&lt;br /&gt;
&amp;lt;code&amp;gt;set [gdsName] warnings [Region]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
z.B.: &amp;lt;code&amp;gt;set gds warn Nordrhein-Westfalen&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Region kann ausgeschrieben oder mit den [http://www.bmelv-statistik.de/de/daten-tabellen-suche/abkuerzungen-der-bundeslaender/ offiziellen Abkürzungen] bezeichnet werden.&lt;br /&gt;
&lt;br /&gt;
=== Unwetterwarnungen granularer nach Kreis aus gelesenenen Daten raussuchen ===&lt;br /&gt;
&amp;lt;code&amp;gt;set [gdsName] alerts [Warncell-ID]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die passende Warncell-ID kann man sich über &amp;lt;code&amp;gt;get [gdsName] list capstations&amp;lt;/code&amp;gt; heraussuchen.&lt;br /&gt;
&lt;br /&gt;
Ob es passende Warnmeldungen gibt, kann dann über das Reading &amp;lt;code&amp;gt;a_valid&amp;lt;/code&amp;gt; abgefragt werden. Wenn &amp;lt;code&amp;gt;a_valid&amp;lt;/code&amp;gt; 1 ist, gibt &amp;lt;code&amp;gt;a_count&amp;lt;/code&amp;gt; die Anzahl der vorhandenen Warnmeldungen an. Die Warnungen stehen dann in den Readings &amp;lt;code&amp;gt;a_X_...&amp;lt;/code&amp;gt;, wobei X ab 0 hochzählt. D.h. wenn &amp;lt;code&amp;gt;a_count&amp;lt;/code&amp;gt; 2 ist, gibt es a_0_... und a_1_... Ein praktisches Reading ist z.B. &amp;lt;code&amp;gt;a_X_headline&amp;lt;/code&amp;gt;, das die Zusammenfassung der jeweiligen Warnung als kurze Textzusammenfassung enthält.&lt;br /&gt;
&lt;br /&gt;
Alle eingelesenen Warnmeldungen kann man sich über die Funktion &amp;lt;code&amp;gt;gdsHeadlines()&amp;lt;/code&amp;gt; ausgeben lassen. Z.B. einfach in der Befehlszeile von fhem eingeben:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;{gdsHeadlines([gdsName])}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer möchte, kann auch das Trennzeichen bei mehreren Meldungen konfigurieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;{gdsHeadlines([gdsName],&#039;[Trennzeichen]&#039;)}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Z.B. also&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;{gdsHeadlines(gds, &#039;***&#039;)}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Standard für das Trennzeichen ist der senkrechte Strich.&lt;br /&gt;
&lt;br /&gt;
Jedenfalls nach &amp;lt;code&amp;gt;attr [gdsName] gdsLong 1&amp;lt;/code&amp;gt; werden in a_X_description die Langmeldungen zu den Warnungen ausgegeben.&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
&lt;br /&gt;
Für GDS sollten die Daten regelmäßig aktualisiert werden. Dafür richtet man am besten &#039;&#039;&#039;zwei&#039;&#039;&#039; zeitlich &#039;&#039;&#039;nacheinander&#039;&#039;&#039; laufende ats ein:&lt;br /&gt;
&lt;br /&gt;
Einen zum Holen aktualisierter Daten vom Server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define readGDS at +*00:10:00 get [gdsName] rereadcfg &lt;br /&gt;
attr readGDS alignTime 22:30:05 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Einen zweiten, der danach läuft, der aus den aktualisierten Serverdaten dann die Readings aktualisiert; z.B. für die Alerts:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define checkGDS at +*00:10:00 get [gdsName] alerts [Region] &lt;br /&gt;
attr checkGDS alignTime 22:35:05&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig ist, dass beide at zeitlich auseinander liegen, im vorstehenden Beispiel durch die unterschiedlichen &amp;quot;alignTime&amp;quot; Attribute um 5 Minuten.&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
Nach Änderungen im Angebot des DWD kann das GDS-Modul keine Karten mehr herunterladen. Die Karten können direkt vom DWD eingebunden werden. Hinweise dazu gibt es im [https://forum.fhem.de/index.php/topic,53157.0.html Supportthread im Forum].&lt;br /&gt;
&lt;br /&gt;
Das GDS-Modul wurde mittlerweile auf &amp;quot;non-blocking&amp;quot; umgeschrieben, führt aber dennoch hin und wieder zu Meldungen einzelner Nutzer, dass FHEM &amp;quot;einfriert&amp;quot; (nichts macht), während auf die Rückmeldung von, z. B., einem FTP-Transfer (&amp;quot;get [gdsName] conditionsmap&amp;quot; etc.) gewartet wird. Das kann bei Timing-kritischen Bestandteilen zu Problemen führen, weil Events nicht mitbekommen werden, die Ansteuerung von Geräten nicht funktioniert, etc.&lt;br /&gt;
&lt;br /&gt;
Einige dieser FHEM blockierenden Aktivitäten lassen sich mittels cron recht einfach auslagern (z. B. der ftp Transfer), für andere müsste das GDS-Modul umgeschrieben werden. Details dazu gibt es z. B. in {{Link2Forum|Topic=38106|LinkText=diesem schon etwas älteren Thread}} im Forum.&lt;br /&gt;
&lt;br /&gt;
Nachfolgend noch eine Möglichkeit, das regelmäßige Laden der Karten vom Server in einen - dann FHEM nicht mehr blockierenden - cron-Job auszulagern:&lt;br /&gt;
&lt;br /&gt;
Was Ihr wissen müsst:&lt;br /&gt;
*Wo legt das GDS-Modul die Karten ab? Z. B. im Temporär-Verzeichnis, /tmp. Wenn Ihr eine radarmap gespeichert habt, findet Ihr den Speicherort recht einfach, indem Ihr unter Linux &amp;lt;code&amp;gt;cd / &amp;amp;&amp;amp; find . | grep gds_radarmap.jpg&amp;lt;/code&amp;gt; ausführt.&lt;br /&gt;
*Wo liegen die Karten auf dem DWD-ftp-Server? Die Adresse des Servers ist [ftp://ftp-outgoing2.dwd.de ftp://ftp-outgoing2.dwd.de] und die Karten findet Ihr unterhalb von [ftp://ftp-outgoing2.dwd.de/gds/specials/ ftp://ftp-outgoing2.dwd.de/gds/specials/], z. B. die conditions maps unter [ftp://ftp-outgoing2.dwd.de/gds/specials/observations/maps/germany/ ftp://ftp-outgoing2.dwd.de/gds/specials/observations/maps/germany/], radarmaps unter [ftp://ftp-outgoing2.dwd.de/gds/specials/radar/ ftp://ftp-outgoing2.dwd.de/gds/specials/radar/] und dann dem passenden Unterverzeichnis für Eure Region, etc.&lt;br /&gt;
*Eure Login-Daten für den DWD ftp-server (habt Ihr vom DWD zugeschickt bekommen und in die Definition des GDS-Moduls eingetragen).&lt;br /&gt;
&lt;br /&gt;
Anbei ein Beispielscript, das jeweils die neueste conditions- und Radarmap für Südwest-Deutschland holt und im /tmp-Verzeichnis ablegt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
if [ ! -d &amp;quot;/tmp/gds&amp;quot; ]; then&lt;br /&gt;
  mkdir /tmp/gds&lt;br /&gt;
fi&lt;br /&gt;
# ftp-Server als Verzeichnis mounten:&lt;br /&gt;
curlftpfs ftp-outgoing2.dwd.de /tmp/gds -o user=user:pass&lt;br /&gt;
cd /tmp/gds/gds/specials/radar/southwest&lt;br /&gt;
NEUESTE_DATEI=$(ls -t | head -n 1)&lt;br /&gt;
echo Downloading ${NEUESTE_DATEI}...&lt;br /&gt;
cp &amp;quot;${NEUESTE_DATEI}&amp;quot; &amp;quot;/tmp/gds_radarmap.jpg&amp;quot;&lt;br /&gt;
echo ok.&lt;br /&gt;
chown fhem:dialout /tmp/gds_radarmap.jpg&lt;br /&gt;
cd /tmp/gds/gds/specials/observations/maps/germany&lt;br /&gt;
NEUESTE_DATEI=$(ls -t Suedwest* | head -n 1)&lt;br /&gt;
echo Downloading ${NEUESTE_DATEI}...&lt;br /&gt;
cp &amp;quot;${NEUESTE_DATEI}&amp;quot; &amp;quot;/tmp/gds_conditionsmap.jpg&amp;quot;&lt;br /&gt;
echo ok.&lt;br /&gt;
chown fhem:dialout /tmp/gds_conditionsmap.jpg&lt;br /&gt;
# unmount&lt;br /&gt;
fusermount -u /tmp/gds&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hinweise:&lt;br /&gt;
*user:pass durch Eure Login-Daten für den Server ersetzen.&lt;br /&gt;
*/tmp ggf. anpassen, wenn bei Euch die GDS-Karten in einem anderen Verzeichnis liegen.&lt;br /&gt;
*&amp;quot;Suedwest&amp;quot; durch Eure Region ersetzen. Dateinamen können auf dem ftp-Server eingesehen werden.&lt;br /&gt;
*Die Angabe von user:pass im Klartext im Script ist unsicher. Sicherer wäre die Angabe einer versteckten und in den Rechten beschränkten Konfigurationsdatei.&lt;br /&gt;
*fhem:dialout sind die Rechte unter Debian. Mit einem &amp;lt;code&amp;gt;li -l&amp;lt;/code&amp;gt; im Verzeichnis, in dem GDS die Karten ablegt, könnt Ihr Euch - vor dem Ausführen des Scripts - den Benutzer und die Rechte ansehen, wie das GDS-Modul bei Euch die Karten ablegt.&lt;br /&gt;
*Das Script braucht curlftpfs, das sich i.d.R. problemlos mittels &amp;lt;code&amp;gt;apt-get install curlftpfs&amp;lt;/code&amp;gt; (Debian) o.ä. installieren lassen sollte.&lt;br /&gt;
&lt;br /&gt;
Dann das Script noch regelmäßig über cron ausführen lassen, und schon blockiert Euer FHEM an einer Stelle weniger.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [[Wetter und Wettervorhersagen]]&lt;/div&gt;</summary>
		<author><name>Motivierte linke Hände</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Homebridge_einrichten&amp;diff=23879</id>
		<title>Homebridge einrichten</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Homebridge_einrichten&amp;diff=23879"/>
		<updated>2017-12-29T08:53:10Z</updated>

		<summary type="html">&lt;p&gt;Motivierte linke Hände: Link auf systemd-Skript im Homebridge-Wiki eingefügt.&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 Raspian 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 Konfiguration 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;
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;
= 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;javascript&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 weg gelassen 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 ein mal 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 des von hombridge-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 dann auch keine Befehle mehr mit Siri möglich). Damit Siri auch Befehle ohne ständig offenes Terminal bearbeiten kann, bitten 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 zu erst 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 in verschiedene Räume 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;
== Zusätzliche Plugins ==&lt;br /&gt;
Für manche der über FHEM steuerbaren Geräte wie z.b. MiiLight, Harmony Hub, Phillips 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;
&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 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;javascript&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>Motivierte linke Hände</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Homebridge_Start_und_Status_in_FHEM&amp;diff=23310</id>
		<title>Homebridge Start und Status in FHEM</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Homebridge_Start_und_Status_in_FHEM&amp;diff=23310"/>
		<updated>2017-11-16T06:39:20Z</updated>

		<summary type="html">&lt;p&gt;Motivierte linke Hände: Startskript angepasst, set $fhemdefine on/off für Status angepasst, damit der Status des Dummys stimmt, wenn start oder stop fehlgeschlagen ist. Spacing vereinheitlicht.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Um nicht bei jeder Änderung, welche die Homebridge betrifft, diese über die Console manuell neustarten zu müssen zeigt diese Lösung wie dies bequem aus FHEMWEB erfolgen kann. In den nachfolgenden Abschnitten sind die einzelnen Schritte dazu erläutert.&lt;br /&gt;
&lt;br /&gt;
== Vorwort ==&lt;br /&gt;
Die im weitern genutzten Bezeichnungen von Dummys, Scriptdateinamen o.ä. können geändert werden. Die Änderungen müssen jedoch auch an allen entsprechenden Stellen vorgenommen werden.&lt;br /&gt;
Genannte IP Adressen, Benutzernamen und Passwörter sind auf die eigenen Gegebenheiten anzupassen. Die Berechtigungen des Benutzers müssen zur Ausführung der Scripte geprüft und ggf. angepasst werden. Entprechende Linux Kentnisse sollten vorhanden sein. Dieser Artikel berücksichtigt das FHEM und Homebridge nicht zwingend auf dem selben System laufen. Die hier gezeigte Lösung kann für beide Varianten genutzt werden, FHEM und Homebridge auf dem gleichen System oder auf getrennten Systemen.&lt;br /&gt;
&lt;br /&gt;
== Umsetzung ==&lt;br /&gt;
&lt;br /&gt;
=== Status- und Kontroll-Dummy ===&lt;br /&gt;
[[Datei:HomebridgeDummy.PNG|mini|550px|Status- bzw. Kontroll-Dummy]]&lt;br /&gt;
&lt;br /&gt;
Es wird ein Dummy benötigt, welcher den Status des Homebridge-Dienstes anzeigt und über den dieser Dienst gesteuert werden kann. Das nötige Script um die Homebridge als Dienst zu starten wird weiter unten in diesem Artikel erstellt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:100%;&amp;quot;&amp;gt;&lt;br /&gt;
define SYS_Homebridge dummy&lt;br /&gt;
attr SYS_Homebridge devStateIcon .*on:general_an .*off:general_aus .*:audio_rec&lt;br /&gt;
attr SYS_Homebridge eventMap status:status start:start stop:stop restart:restart&lt;br /&gt;
attr SYS_Homebridge icon it_router&lt;br /&gt;
attr SYS_Homebridge room System&lt;br /&gt;
attr SYS_Homebridge userReadings OnStateChange:(start|stop|restart|status) {  system (&amp;quot;sudo service homebridge &amp;quot;.ReadingsVal($NAME,&amp;quot;state&amp;quot;,&amp;quot;restart&amp;quot;).&amp;quot; &amp;amp;&amp;quot; );;  }&lt;br /&gt;
attr SYS_Homebridge webCmd status:start:stop:restart&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Dummy wird durch setzen von &amp;quot;start&amp;quot;, &amp;quot;stop&amp;quot;, &amp;quot;restart&amp;quot; oder &amp;quot;status&amp;quot; jeweils das userReading ausführen und somit letztendlich den homebridge Dienst steuert.&lt;br /&gt;
&lt;br /&gt;
=== Start Script anlegen ===&lt;br /&gt;
Nun ist das Startscript für die Homebridge anzulegen. Mittels dem folgenden Befehl wird (wenn noch nicht vorhanden) das homebridge Script angelegt und im Editor geöffnet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:100%;&amp;quot;&amp;gt;&lt;br /&gt;
sudo nano /etc/init.d/homebridge&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wenn die Homebridge nicht auf dem selben System läuft wie FHEM muss dieser Schritt auf dem Homebridge System ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Das nun folgende Script kann in die homebridge Datei, die im Nano Editor geöffnet, ist rein kopiert werden. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung&#039;&#039;&#039;: die Variabeln &#039;&#039;homeBridgeUser&#039;&#039;, &#039;&#039;fhemHost&#039;&#039; und &#039;&#039;fhemHostTelnetPort&#039;&#039; sind ggf. auf die eigenen Gegebenheiten anzupassen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:100%;&amp;quot;&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;
&lt;br /&gt;
PID=`pidof homebridge`&lt;br /&gt;
homeBridgeUser=&amp;quot;fhem&amp;quot;&lt;br /&gt;
fhemHost=127.0.0.1          #FHEM Server (Masterinstanz)&lt;br /&gt;
fhemHostTelnetPort=7072     #TelnetPort der FHEM Instanz&lt;br /&gt;
fhemDefine=&amp;quot;SYS_Homebridge&amp;quot;&lt;br /&gt;
&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;
        perl /opt/fhem/fhem.pl $fhemHost:$fhemHostTelnetPort &amp;quot;setreading $fhemDefine info Homebridge is already running&amp;quot;			&lt;br /&gt;
else&lt;br /&gt;
        su - $homeBridgeUser -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;
        perl /opt/fhem/fhem.pl $fhemHost:$fhemHostTelnetPort &amp;quot;setreading $fhemDefine info Homebridge starting&amp;quot;	&lt;br /&gt;
        perl /opt/fhem/fhem.pl $fhemHost:$fhemHostTelnetPort &amp;quot;set $fhemDefine on&amp;quot;&lt;br /&gt;
        sleep 2&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;
        perl /opt/fhem/fhem.pl $fhemHost:$fhemHostTelnetPort &amp;quot;setreading $fhemDefine info Homebridge is not running&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
        kill $PID&lt;br /&gt;
        echo &amp;quot;Homebridge stopping&amp;quot;&lt;br /&gt;
        perl /opt/fhem/fhem.pl $fhemHost:$fhemHostTelnetPort &amp;quot;setreading $fhemDefine info Homebridge stopping&amp;quot;&lt;br /&gt;
        perl /opt/fhem/fhem.pl $fhemHost:$fhemHostTelnetPort &amp;quot;set $fhemDefine off&amp;quot;&lt;br /&gt;
        sleep 2&lt;br /&gt;
        $0 status		&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;
        perl /opt/fhem/fhem.pl $fhemHost:$fhemHostTelnetPort &amp;quot;setreading $fhemDefine info Homebridge running as PID $PID&amp;quot;&lt;br /&gt;
        perl /opt/fhem/fhem.pl $fhemHost:$fhemHostTelnetPort &amp;quot;set $fhemDefine on&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
        echo &amp;quot;Homebridge is not running&amp;quot;&lt;br /&gt;
        perl /opt/fhem/fhem.pl $fhemHost:$fhemHostTelnetPort &amp;quot;setreading $fhemDefine info Homebridge is not running&amp;quot;&lt;br /&gt;
        perl /opt/fhem/fhem.pl $fhemHost:$fhemHostTelnetPort &amp;quot;set $fhemDefine off&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;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Script setzt in dem bereits angelegten Dummy ein Reading &#039;&#039;info&#039;&#039; in dem der Ausführungsstatus des Scripts wieder gegeben wird. Das Reading &#039;&#039;state&#039;&#039; wir auf on oder off gesetzt. &#039;&#039;On&#039;&#039; bedeutet das Homebridge gestartet ist, &#039;&#039;off&#039;&#039; das die Homebridge nicht ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Damit die Homebridge auch mit Start des Systems gestartet wird sind die folgenden zwei Schritte notwendig&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:100%;&amp;quot;&amp;gt;&lt;br /&gt;
sudo chmod 755 /etc/init.d/homebridge&lt;br /&gt;
sudo update-rc.d homebridge defaults&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zum testen kann der Dienst nun mit dem Befehl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:100%;&amp;quot;&amp;gt;&lt;br /&gt;
sudo service homebridge start&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:100%;&amp;quot;&amp;gt;&lt;br /&gt;
sudo /etc/init.d/homebridge start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gestartet werden. In dem angelegten Dummy werden zwei Readings erzeugt mit den entsprechenden Rückmeldungen aus dem Script. Die Readings werden erst angezeigt wenn die bereits geöffnete Detailseite des Dummys neu geladen wird.&lt;br /&gt;
&lt;br /&gt;
=== Testlauf / Fertig ===&lt;br /&gt;
Nun können die einzelnen Aktionen über den Dummy ausführt werden. Dabei wird jeweils der eingerichtete Dienst angesteuert und eine (mit kurzer Verzögerung) Rückmeldung gegeben.&lt;br /&gt;
&lt;br /&gt;
== Sonstiges ==&lt;br /&gt;
&lt;br /&gt;
=== FHEM Benutzer Zugriff auf Script gewähren ===&lt;br /&gt;
&lt;br /&gt;
Damit aus FHEM das Script ausgeführt werden kann benötigt dieser Benutzer entsprechende Berechtigungen. Dazu ist in der sudoers ein Eintrag zu ergänzen.&lt;br /&gt;
Dazu wird die sudoers Datei im Nano Editor geöffnet&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:100%;&amp;quot;&amp;gt;&lt;br /&gt;
sudo nano /etc/sudoers&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dort sollte im Abschnitt &#039;&#039;# User privilege specification&#039;&#039; die folgende Zeile ergänzt werden &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:100%;&amp;quot;&amp;gt;&lt;br /&gt;
fhem ALL=(ALL) NOPASSWD:/etc/init.d/homebridge&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bzw. unter Raspbian Jessie (vgl.: [https://forum.fhem.de/index.php/topic,66841.msg581747.html#msg581747 Forenbeitrag]):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:100%;&amp;quot;&amp;gt;&lt;br /&gt;
fhem ALL=(ALL) NOPASSWD:/usr/sbin/service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Achtung!&#039;&#039;&#039; Sollte FHEM nicht unter dem Benuter &#039;&#039;fhem&#039;&#039; laufen ist dies an den entsprechenden Stellen anzupassen. &lt;br /&gt;
&lt;br /&gt;
Beispielinhalt der sudoers:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:100%;&amp;quot;&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# This file MUST be edited with the &#039;visudo&#039; command as root.&lt;br /&gt;
#&lt;br /&gt;
# Please consider adding local content in /etc/sudoers.d/ instead of&lt;br /&gt;
# directly modifying this file.&lt;br /&gt;
#&lt;br /&gt;
# See the man page for details on how to write a sudoers file.&lt;br /&gt;
#&lt;br /&gt;
Defaults	env_reset&lt;br /&gt;
Defaults	mail_badpass&lt;br /&gt;
Defaults	secure_path=&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Host alias specification&lt;br /&gt;
&lt;br /&gt;
# User alias specification&lt;br /&gt;
&lt;br /&gt;
# Cmnd alias specification&lt;br /&gt;
&lt;br /&gt;
# User privilege specification&lt;br /&gt;
root	ALL=(ALL:ALL) ALL&lt;br /&gt;
fhem ALL=(ALL) NOPASSWD:/etc/init.d/homebridge&lt;br /&gt;
&lt;br /&gt;
# Members of the admin group may gain root privileges&lt;br /&gt;
%admin  ALL = (ALL) NOPASSWD: ALL&lt;br /&gt;
&lt;br /&gt;
# Allow members of group sudo to execute any command&lt;br /&gt;
%sudo	ALL=(ALL:ALL) ALL&lt;br /&gt;
&lt;br /&gt;
# See sudoers(5) for more information on &amp;quot;#include&amp;quot; directives:&lt;br /&gt;
&lt;br /&gt;
#includedir /etc/sudoers.d&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
&lt;br /&gt;
=== Anpassung wenn FHEM und Homebridge auf getrennten Systemen laufen ===&lt;br /&gt;
Unter dem Kapitel [[Umsetzung]] wurde bereits alles vorbereitet um mit wenigen Änderungen eine Homebridge zu starten die nicht auf dem selben System läuft wie FHEM. Es sind nur 2 Änderungen notwendig.&lt;br /&gt;
Die erste Änderung betrifft den eingerichteten Dummy. Hier ist das vorhandenen &#039;&#039;userReadings&#039;&#039; wie folgt abzuändern&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:100%;&amp;quot;&amp;gt;&lt;br /&gt;
attr SYS_Homebridge userReadings OnStateChange:(start|stop|restart|status) { system (&amp;quot;sudo /opt/fhem/FHEM/homebridgeserviceremote.sh &amp;quot;.ReadingsVal($NAME,&amp;quot;state&amp;quot;,&amp;quot;restart&amp;quot;).&amp;quot; &amp;amp;&amp;quot; );; } &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dadurch wird, durch die Aktionen des Dummys, ein weiteres Script angesprochen.&lt;br /&gt;
&lt;br /&gt;
Nun wird dieses Script mit hilfe des Nano Editor angelegt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:100%;&amp;quot;&amp;gt;&lt;br /&gt;
sudo nano /opt/fhem/FHEM/homebridgeserviceremote.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
und mit dem folgenden Inhalt befüllt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung&#039;&#039;&#039;: die Variabeln &#039;&#039;remoteUser&#039;&#039;, &#039;&#039;remotePasswort&#039;&#039; und &#039;&#039;remoteHost&#039;&#039; sind ggf. auf die eigenen Gegebenheiten der entfernt laufenden Homebridge anzupassen. Der hier genannte Benutzer muss natürlich berechtigt sein die Homebridge starten zu können. Es sollte auch nicht der root User verwendet werden, sondern ein eigens dafür angelegter und in den Berechtigungen eingeschränkter Benutzer verwendet werden.&lt;br /&gt;
Wer zur Fehleranalyse etwas mehr sehen möchte ändert den Wert von &#039;&#039;debug&#039;&#039; auf 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:100%;&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
debug=0&lt;br /&gt;
remoteUser=&amp;quot;root&amp;quot;&lt;br /&gt;
remotePasswort=&amp;quot;root&amp;quot;&lt;br /&gt;
remoteHost=&amp;quot;192.168.1.111&amp;quot;&lt;br /&gt;
remoteService=&amp;quot;homebridge&amp;quot;&lt;br /&gt;
fhemHostTelnetPort=7072           #TelnetPort der FHEM Instanz&lt;br /&gt;
&lt;br /&gt;
# Vorraussetzungen prüfen&lt;br /&gt;
if [ $(dpkg-query -W -f=&#039;${Status}&#039; sshpass 2&amp;gt;/dev/null | grep -c &amp;quot;ok installed&amp;quot;) -eq 0 ];&lt;br /&gt;
then&lt;br /&gt;
	if [ &amp;quot;$debug&amp;quot; = &amp;quot;1&amp;quot; ]; then &lt;br /&gt;
		echo &amp;quot;sshpass wird benötigt. Installation beginnt&amp;quot;; &lt;br /&gt;
		perl /opt/fhem/fhem.pl $fhemHostTelnetPort &amp;quot;{Log 1, \&amp;quot;[homebridgeserviceremote.sh] sshpass wird benötigt. Installation beginnt\&amp;quot;}&amp;quot;;&lt;br /&gt;
	fi&lt;br /&gt;
	apt-get install sshpass&lt;br /&gt;
	if [ &amp;quot;$debug&amp;quot; = &amp;quot;1&amp;quot; ]; then &lt;br /&gt;
		echo &amp;quot;sshpass wurde installiert&amp;quot;;&lt;br /&gt;
		perl /opt/fhem/fhem.pl $fhemHostTelnetPort &amp;quot;{Log 1, \&amp;quot;[homebridgeserviceremote.sh] sshpass wurde installiert\&amp;quot;}&amp;quot;;		&lt;br /&gt;
	fi&lt;br /&gt;
fi&lt;br /&gt;
###################################&lt;br /&gt;
&lt;br /&gt;
# Befehl ausführen&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
start)&lt;br /&gt;
	if [ &amp;quot;$debug&amp;quot; = &amp;quot;1&amp;quot; ]; then &lt;br /&gt;
		echo &amp;quot;Ausführen von &#039;sudo service $remoteService start&#039; auf &#039;$remoteHost&#039; als &#039;$remoteUser&#039;&amp;quot;; &lt;br /&gt;
		perl /opt/fhem/fhem.pl $fhemHostTelnetPort &amp;quot;{Log 1, \&amp;quot;[homebridgeserviceremote.sh] Ausführen von &#039;sudo service $remoteService start&#039; auf &#039;$remoteHost&#039; als &#039;$remoteUser&#039;\&amp;quot;}&amp;quot;;&lt;br /&gt;
	fi&lt;br /&gt;
	sshpass -p &amp;quot;$remotePasswort&amp;quot; ssh -o StrictHostKeyChecking=no $remoteUser@$remoteHost &amp;quot;sudo service $remoteService start&amp;quot;&lt;br /&gt;
	if [ &amp;quot;$debug&amp;quot; = &amp;quot;1&amp;quot; ]; then &lt;br /&gt;
		echo &amp;quot;Ausführung beendet&amp;quot;; &lt;br /&gt;
		perl /opt/fhem/fhem.pl $fhemHostTelnetPort &amp;quot;{Log 1, \&amp;quot;[homebridgeserviceremote.sh] Ausführung beendet\&amp;quot;}&amp;quot;;&lt;br /&gt;
	fi&lt;br /&gt;
;;&lt;br /&gt;
stop)&lt;br /&gt;
	if [ &amp;quot;$debug&amp;quot; = &amp;quot;1&amp;quot; ]; then &lt;br /&gt;
		echo &amp;quot;Ausführen von &#039;sudo service $remoteService stop&#039; auf &#039;$remoteHost&#039; als &#039;$remoteUser&#039;&amp;quot;; &lt;br /&gt;
		perl /opt/fhem/fhem.pl $fhemHostTelnetPort &amp;quot;{Log 1, \&amp;quot;[homebridgeserviceremote.sh] Ausführen von &#039;sudo service $remoteService stop&#039; auf &#039;$remoteHost&#039; als &#039;$remoteUser&#039;\&amp;quot;}&amp;quot;;&lt;br /&gt;
	fi&lt;br /&gt;
	sshpass -p &amp;quot;$remotePasswort&amp;quot; ssh -o StrictHostKeyChecking=no $remoteUser@$remoteHost &amp;quot;sudo service $remoteService stop&amp;quot;&lt;br /&gt;
	if [ &amp;quot;$debug&amp;quot; = &amp;quot;1&amp;quot; ]; then &lt;br /&gt;
		echo &amp;quot;Ausführung beendet&amp;quot;; &lt;br /&gt;
		perl /opt/fhem/fhem.pl $fhemHostTelnetPort &amp;quot;{Log 1, \&amp;quot;[homebridgeserviceremote.sh] Ausführung beendet\&amp;quot;}&amp;quot;;&lt;br /&gt;
	fi&lt;br /&gt;
;;&lt;br /&gt;
restart)&lt;br /&gt;
	if [ &amp;quot;$debug&amp;quot; = &amp;quot;1&amp;quot; ]; then &lt;br /&gt;
		echo &amp;quot;Ausführen von &#039;sudo service $remoteService restart&#039; auf &#039;$remoteHost&#039; als &#039;$remoteUser&#039;&amp;quot;; &lt;br /&gt;
		perl /opt/fhem/fhem.pl $fhemHostTelnetPort &amp;quot;{Log 1, \&amp;quot;[homebridgeserviceremote.sh] Ausführen von &#039;sudo service $remoteService restart&#039; auf &#039;$remoteHost&#039; als &#039;$remoteUser&#039;\&amp;quot;}&amp;quot;;&lt;br /&gt;
	fi&lt;br /&gt;
	sshpass -p &amp;quot;$remotePasswort&amp;quot; ssh -o StrictHostKeyChecking=no $remoteUser@$remoteHost &amp;quot;sudo service $remoteService restart&amp;quot;&lt;br /&gt;
	if [ &amp;quot;$debug&amp;quot; = &amp;quot;1&amp;quot; ]; then &lt;br /&gt;
		echo &amp;quot;Ausführung beendet&amp;quot;; &lt;br /&gt;
		perl /opt/fhem/fhem.pl $fhemHostTelnetPort &amp;quot;{Log 1, \&amp;quot;[homebridgeserviceremote.sh] Ausführung beendet\&amp;quot;}&amp;quot;;&lt;br /&gt;
	fi&lt;br /&gt;
&lt;br /&gt;
;;&lt;br /&gt;
status)&lt;br /&gt;
	if [ &amp;quot;$debug&amp;quot; = &amp;quot;1&amp;quot; ]; then &lt;br /&gt;
		echo &amp;quot;Ausführen von &#039;sudo service $remoteService status&#039; auf &#039;$remoteHost&#039; als &#039;$remoteUser&#039;&amp;quot;;&lt;br /&gt;
		perl /opt/fhem/fhem.pl $fhemHostTelnetPort &amp;quot;{Log 1, \&amp;quot;[homebridgeserviceremote.sh] Ausführen von &#039;sudo service $remoteService status&#039; auf &#039;$remoteHost&#039; als &#039;$remoteUser&#039;\&amp;quot;}&amp;quot;;		&lt;br /&gt;
	fi&lt;br /&gt;
	sshpass -p &amp;quot;$remotePasswort&amp;quot; ssh -o StrictHostKeyChecking=no $remoteUser@$remoteHost &amp;quot;sudo service $remoteService status&amp;quot;&lt;br /&gt;
	if [ &amp;quot;$debug&amp;quot; = &amp;quot;1&amp;quot; ]; then &lt;br /&gt;
		echo &amp;quot;Ausführung beendet&amp;quot;; &lt;br /&gt;
		perl /opt/fhem/fhem.pl $fhemHostTelnetPort &amp;quot;{Log 1, \&amp;quot;[homebridgeserviceremote.sh] Ausführung beendet\&amp;quot;}&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;
###################################&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Script macht nicht sehr viel. Es verbindet sich über ssh mit dem entfernten System und startet (stopt, etc.) den Homebridge Dienst. Hinweis: es wird sshpass benötigt, welches das Script bei bedarf versucht zu installieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HINWEIS: Statt wie hier sshpass zu verwenden ist es besser ssh korrekt für zertifikatbasierten Zugriff zu konfigurieren.&lt;br /&gt;
&lt;br /&gt;
== Dankeschön ==&lt;br /&gt;
Ein Dankeschön geht an die Entwicklergemeinde rund um Homebridge und dem FHEM Plugin für die Homebridge.&lt;br /&gt;
&lt;br /&gt;
Ein besonderes Dankeschön an &#039;&#039;No Legend&#039;&#039; der die zugrunde liegende Idee und Lösung in diesem Artikel beschrieben hat.&lt;/div&gt;</summary>
		<author><name>Motivierte linke Hände</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Homebridge_einrichten&amp;diff=23309</id>
		<title>Homebridge einrichten</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Homebridge_einrichten&amp;diff=23309"/>
		<updated>2017-11-16T06:28:26Z</updated>

		<summary type="html">&lt;p&gt;Motivierte linke Hände: verklickt... %-)&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 Raspian 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 Konfiguration 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;
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;
= 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;javascript&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 weg gelassen 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 ein mal 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 des von hombridge-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 dann auch keine Befehle mehr mit Siri möglich). Damit Siri auch Befehle ohne ständig offenes Terminal bearbeiten kann, bitten 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 zu erst 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 ===&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;
== 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 in verschiedene Räume 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;
== Zusätzliche Plugins ==&lt;br /&gt;
Für manche der über FHEM steuerbaren Geräte wie z.b. MiiLight, Harmony Hub, Phillips 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;
&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 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;javascript&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>Motivierte linke Hände</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Homebridge_einrichten&amp;diff=23308</id>
		<title>Homebridge einrichten</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Homebridge_einrichten&amp;diff=23308"/>
		<updated>2017-11-16T06:26:14Z</updated>

		<summary type="html">&lt;p&gt;Motivierte linke Hände: define Kommando für siri eingefügt&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 Raspian 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 Konfiguration 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;
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;
= 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;javascript&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 weg gelassen 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 ein mal 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 des von hombridge-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 dann auch keine Befehle mehr mit Siri möglich). Damit Siri auch Befehle ohne ständig offenes Terminal bearbeiten kann, bitten 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 zu erst 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 ===&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;
== 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 in verschiedene Räume 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;
== Zusätzliche Plugins ==&lt;br /&gt;
Für manche der über FHEM steuerbaren Geräte wie z.b. MiiLight, Harmony Hub, Phillips 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;
&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 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;javascript&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>Motivierte linke Hände</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SSCAM_-_Steuerung_von_Kameras_in_Synology_Surveillance_Station&amp;diff=21249</id>
		<title>SSCAM - Steuerung von Kameras in Synology Surveillance Station</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SSCAM_-_Steuerung_von_Kameras_in_Synology_Surveillance_Station&amp;diff=21249"/>
		<updated>2017-04-10T14:50:34Z</updated>

		<summary type="html">&lt;p&gt;Motivierte linke Hände: Link auf surveillance vs. @surveillance - angepasst&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuerung von Kameras in Synology Surveillance Station&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=SSCam&lt;br /&gt;
|ModForumArea=Sonstiges&lt;br /&gt;
|ModTechName=49_SSCam.pm&lt;br /&gt;
|ModOwner=nasseeder1 (Forum: DS_Starter)}}&lt;br /&gt;
&lt;br /&gt;
== Zweckbeschreibung ==&lt;br /&gt;
&lt;br /&gt;
Mit diesem Modul können Operationen von in der Synology Surveillance Station (SVS) definierten Kameras ausgeführt werden.&lt;br /&gt;
Es basiert auf der SVS API und unterstützt die SVS ab Version 7. &lt;br /&gt;
Zur Zeit werden folgende Funktionen unterstützt: &lt;br /&gt;
&lt;br /&gt;
* Start einer Aufnahme&lt;br /&gt;
* Stop einer Aufnahme (per Befehl bzw. automatisch nach Ablauf der Aufnahmedauer)&lt;br /&gt;
* Aufnehmen eines Schnappschusses und Ablage in der Synology Surveillance Station&lt;br /&gt;
* Deaktivieren einer Kamera in Synology Surveillance Station&lt;br /&gt;
* Aktivieren einer Kamera in Synology Surveillance Station&lt;br /&gt;
* Steuerung der Belichtungsmodi Tag, Nacht bzw. Automatisch&lt;br /&gt;
* Umschaltung der Ereigniserkennung durch Kamera, durch SVS oder deaktiviert&lt;br /&gt;
* Abfrage von Kameraeigenschaften (auch mit Polling) sowie den Eigenschaften des installierten SVS-Paketes&lt;br /&gt;
* Bewegen an eine vordefinierte Preset-Position (bei PTZ-Kameras)&lt;br /&gt;
* Start einer vordefinierten Überwachungstour (bei PTZ-Kameras)&lt;br /&gt;
* Positionieren von PTZ-Kameras zu absoluten X/Y-Koordinaten&lt;br /&gt;
* kontinuierliche Bewegung von PTZ-Kameras&lt;br /&gt;
* auslösen externer Ereignisse 1-10 (Aktionsregel SVS) &lt;br /&gt;
* starten und beenden von Kamera-Livestreams&lt;br /&gt;
* Abruf und Ausgabe der Kamera Streamkeys sowie Stream-Urls (zur Nutzung von Kamera-Livestreams ohne Session Id) &lt;br /&gt;
* abspielen der letzten Aufnahme&lt;br /&gt;
&lt;br /&gt;
Die Aufnahmen stehen in der Synology Surveillance Station (SVS) zur Verfügung und unterliegen, wie jede andere Aufnahme, den in der Synology Surveillance Station eingestellten Regeln.&lt;br /&gt;
So werden zum Beispiel die Aufnahmen entsprechend ihrer Archivierungsfrist gespeichert und dann gelöscht. &lt;br /&gt;
&lt;br /&gt;
Wenn sie über dieses Modul diskutieren oder zur Verbesserung des Moduls beitragen möchten, ist im FHEM-Forum ein Sammelplatz unter:&amp;lt;br&amp;gt;&lt;br /&gt;
{{Link2Forum|Topic=45671.0 |LinkText=49_SSCam: Fragen, Hinweise, Neuigkeiten und mehr rund um dieses Modul}} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung ==&lt;br /&gt;
&lt;br /&gt;
Dieses Modul nutzt das Perl-Modul JSON. Bitte darauf achten dieses Paket zu installieren. (Debian: apt-get install libjson-perl).&lt;br /&gt;
SSCAM verwendet für HTTP-Calls die nichtblockierenden Funktionen von HttpUtils bzw. HttpUtils_NonblockingGet.&lt;br /&gt;
Im DSM bzw. der Synology Surveillance Station muß ein Nutzer für den Zugriff aus FHEM angelegt sein. Die Zugangsdaten für diesen Nutzer werden später über ein Set-Kommando dem angelegten Gerät zugewiesen. &amp;lt;br&amp;gt;&lt;br /&gt;
Nähere Informationen dazu unter [[#Credentials | Credentials]].&lt;br /&gt;
&lt;br /&gt;
Überblick über die Perl-Module welche von SSCam genutzt werden: &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    JSON            &lt;br /&gt;
    Data::Dumper                     &lt;br /&gt;
    MIME::Base64   &lt;br /&gt;
    Time::HiRes    &lt;br /&gt;
    HttpUtils       (FHEM-Modul)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Define ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    define &amp;lt;name&amp;gt; SSCam &amp;lt;Kameraname in SVS&amp;gt; &amp;lt;ServerAddr&amp;gt; [Port]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Definiert eine neue Kamera für SSCam. Zunächst muß diese Kamera in der Synology Surveillance Station 7.0 oder höher eingebunden sein und entsprechend funktionieren.&lt;br /&gt;
&lt;br /&gt;
Das Modul SSCam basiert auf Funktionen der Synology Surveillance Station API.&lt;br /&gt;
Weitere Informationen unter: [http://global.download.synology.com/download/Document/DeveloperGuide/Surveillance_Station_Web_API_v2.0.pdf Web API Guide].&lt;br /&gt;
&lt;br /&gt;
Momentan wird nur das HTTP-Protokoll unterstützt um die Web-Services der Synology DS aufzurufen.&lt;br /&gt;
&lt;br /&gt;
Die Parameter beschreiben im Einzelnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    name :	    der Name des neuen Gerätes in FHEM&lt;br /&gt;
    Kameraname :    Kameraname wie er in der Synology Surveillance Station angegeben ist. Leerzeichen im Namen sind nicht erlaubt !&lt;br /&gt;
    ServerAddr :    die IP-Addresse des Synology Surveillance Station Host. &lt;br /&gt;
                    Achtung: Es sollte kein Servername verwendet werden weil DNS-Aufrufe in FHEM blockierend sind&lt;br /&gt;
    Port :	    optional - der Port des Synology Surveillance Station Host. &lt;br /&gt;
                    Wenn nicht angegeben, wird der Standardport 5000 gesetzt(nur HTTP)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
          define CamCP SSCAM Carport 192.168.2.20 [5000]&lt;br /&gt;
&lt;br /&gt;
Wird eine neue Kamera definiert, wird diesem Device zunächst eine Standardaufnahmdauer von 15 zugewiesen. &lt;br /&gt;
Über das Attribut &amp;quot;rectime&amp;quot; kann die Aufnahmedauer für jede Kamera individuell angepasst werden. Der Wert &amp;quot;0&amp;quot; für &amp;quot;rectime&amp;quot; führt zu einer Endlosaufnahme die durch &#039;&#039;&#039;&amp;quot;set &amp;lt;name&amp;gt; off&amp;quot;&#039;&#039;&#039; gestoppt werden muß. Ein Logeintrag mit einem entsprechenden Hinweis auf diesen Umstand wird geschrieben. &lt;br /&gt;
&lt;br /&gt;
Wird das Attribut &amp;quot;rectime&amp;quot; gelöscht, greift wieder der Default-Wert (15s) für die Aufnahmedauer.&lt;br /&gt;
&lt;br /&gt;
Mit dem Befehl &#039;&#039;&#039;&amp;quot;set &amp;lt;name&amp;gt; on [rectime]&amp;quot;&#039;&#039;&#039; wird die Aufnahmedauer temporär festgelegt und überschreibt einmalig sowohl den Defaultwert als auch den Wert des gesetzten Attributs &amp;quot;rectime&amp;quot;. Auch in diesem Fall führt &amp;quot;set &amp;lt;name&amp;gt; on 0&amp;quot; zu einer Daueraufnahme.&lt;br /&gt;
&lt;br /&gt;
Eine eventuell in der SVS eingestellte Dauer der Voraufzeichnung wird weiterhin berücksichtigt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Credentials ===&lt;br /&gt;
&lt;br /&gt;
Nach dem Definieren des Gerätes müssen zuerst die Zugangsparameter gespeichert werden. Das geschieht mit dem Befehl:&lt;br /&gt;
 &lt;br /&gt;
     set &amp;lt;name&amp;gt; credentials &amp;lt;username&amp;gt; &amp;lt;password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Anwender kann in Abhängigkeit der beabsichtigten einzusetzenden Funktionen einen Nutzer im DSM bzw. in der Surveillance Station einrichten.&lt;br /&gt;
Ist der DSM-Nutzer der Gruppe Administratoren zugeordnet, hat er auf alle Funktionen Zugriff. Ohne diese Gruppenzugehörigkeit können nur Funktionen mit niedrigeren Rechtebedarf ausgeführt werden. Die benötigten Mindestrechte der Funktionen sind in der Tabelle weiter unten aufgeführt.&lt;br /&gt;
Alternativ zum DSM-Nutzer kann ein in der SVS angelegter Nutzer verwendet werden. Auch in diesem Fall hat ein Nutzer vom Typ Manager das Recht alle Funktionen auszuführen, wobei der Zugriff auf bestimmte Kameras/ im Privilegienprofil beschränkt werden kann (siehe Hilfefunktion in SVS).&lt;br /&gt;
Als Best Practice wird vorgeschlagen jeweils einen User im DSM und einen in der SVS anzulegen.&lt;br /&gt;
&lt;br /&gt;
* DSM-User als Mitglied der Admin-Gruppe: uneingeschränkter Test aller Modulfunktionen -&amp;gt; session:DSM&lt;br /&gt;
* SVS-User als Manager oder Betrachter: angepasstes Privilegienprofil -&amp;gt; session: SurveillanceStation &lt;br /&gt;
&lt;br /&gt;
Über das Attribut &amp;quot;session&amp;quot; kann ausgewählt werden, ob die Session mit dem DSM oder der SVS augebaut werden soll.&lt;br /&gt;
Erfolgt der Session-Aufbau mit dem DSM, stehen neben der SVS Web-API auch darüber hinaus gehende API Zugriffe zur Verfügung die unter Umständen zur Verarbeitung benötigt werden.&lt;br /&gt;
&lt;br /&gt;
Nach der Gerätedefinition ist die Grundeinstellung &amp;quot;Login in das DSM&amp;quot;, d.h. es können Credentials mit Admin-Berechtigungen genutzt werden um zunächst alle Funktionen der Kameras testen zu können. Danach können die Credentials z.B. in Abhängigkeit der benötigten Funktionen auf eine SVS-Session mit entsprechend beschränkten Privilegienprofil umgestellt werden.&lt;br /&gt;
&lt;br /&gt;
Die nachfolgende Aufstellung zeigt die Mindestanforderungen der jeweiligen Modulfunktionen an die Nutzerrechte. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
* set ... on	       session: ServeillanceStation - Betrachter mit erweiterten Privileg &amp;quot;manuelle Aufnahme&amp;quot;&lt;br /&gt;
* set ... off	       session: ServeillanceStation - Betrachter mit erweiterten Privileg &amp;quot;manuelle Aufnahme&amp;quot;&lt;br /&gt;
* set ... snap	       session: ServeillanceStation - Betrachter&lt;br /&gt;
* set ... disable      session: ServeillanceStation - Manager&lt;br /&gt;
* set ... enable       session: ServeillanceStation - Manager&lt;br /&gt;
* set ... expmode      session: ServeillanceStation - Manager &lt;br /&gt;
* set ... motdetsc     session: ServeillanceStation - Manager &lt;br /&gt;
* set ... goPreset     session: ServeillanceStation - Betrachter mit Privileg Objektivsteuerung der Kamera&lt;br /&gt;
* set ... runPatrol    session: ServeillanceStation - Betrachter mit Privileg Objektivsteuerung der Kamera&lt;br /&gt;
* set ... goAbsPTZ     session: ServeillanceStation - Betrachter mit Privileg Objektivsteuerung der Kamera&lt;br /&gt;
* set ... move         session: ServeillanceStation - Betrachter mit Privileg Objektivsteuerung der Kamera&lt;br /&gt;
* set ... runView      session: ServeillanceStation - Betrachter mit Privileg Liveansicht für Kamera&lt;br /&gt;
* set ... stopView     -&lt;br /&gt;
* set ... credentials  -&lt;br /&gt;
* set ... extevent     session: DSM - Nutzer Mitglied von Admin-Gruppe &lt;br /&gt;
* get ... caminfoall   session: ServeillanceStation - Betrachter &lt;br /&gt;
* get ... eventlist    session: ServeillanceStation - Betrachter&lt;br /&gt;
* get ... svsinfo      session: ServeillanceStation - Betrachter&lt;br /&gt;
* get ... svsinfo      session: ServeillanceStation - Betrachter &lt;br /&gt;
* get ... stmUrlPath   session: ServeillanceStation - Betrachter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== HTTP-Timeout setzen ===&lt;br /&gt;
&lt;br /&gt;
Alle Funktionen dieses Moduls verwenden HTTP-Aufrufe gegenüber der SVS Web API. &amp;lt;br&amp;gt;&lt;br /&gt;
Der Standardwert für den HTTP-Timeout beträgt 4 Sekunden. &lt;br /&gt;
Durch Setzen des Attributes &amp;quot;httptimeout&amp;quot; &amp;gt; 0 kann dieser Wert bei Bedarf entsprechend den technischen Gegebenheiten angepasst werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Set ==&lt;br /&gt;
&lt;br /&gt;
Es gibt zur Zeit folgende Optionen für &amp;quot;set &amp;lt;name&amp;gt; ...&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;on [rectime]&amp;quot;:                                startet eine Aufnahme. Die Aufnahme wird automatisch nach Ablauf der Zeit [rectime] &lt;br /&gt;
                                                   gestoppt.&lt;br /&gt;
                                                   mit rectime = 0 wird eine Daueraufnahme gestartet die durch &amp;quot;set &amp;lt;name&amp;gt; off&amp;quot; &lt;br /&gt;
                                                   wieder gestoppt werden muß.&lt;br /&gt;
    &amp;quot;off&amp;quot; :                                        stoppt eine laufende Aufnahme manuell oder durch die Nutzung anderer Events &lt;br /&gt;
                                                   (z.B. über at, notify)&lt;br /&gt;
    &amp;quot;snap&amp;quot;:                                        löst einen Schnappschuß der entsprechenden Kamera aus und speichert ihn in der SVS&lt;br /&gt;
    &amp;quot;disable&amp;quot;:                                     deaktiviert eine Kamera in der Surveillance Station&lt;br /&gt;
    &amp;quot;enable&amp;quot;:                                      aktiviert eine Kamera in der Surveillance Station&lt;br /&gt;
    &amp;quot;credentials &amp;lt;username&amp;gt; &amp;lt;password&amp;gt;&amp;quot;:           speichert die Zugangsinformationen&lt;br /&gt;
    &amp;quot;expmode [ day | night | auto ]&amp;quot;:              aktiviert den Belichtungsmodus Tag, Nacht oder Automatisch&lt;br /&gt;
    &amp;quot;extevent [ 1-10 ]&amp;quot;: 	                   löst das externe Ereignis 1-10 aus (Aktionsregeleditor in SVS) &lt;br /&gt;
    &amp;quot;motdetsc [ by_camera | by_SVS | disable ]&amp;quot;:   schaltet die Bewegungserkennung in den gewünschten Modus &lt;br /&gt;
                                                   (durch Kamera, SVS, oder deaktiviert) &lt;br /&gt;
    &amp;quot;goPreset &amp;lt;Presetname&amp;gt;&amp;quot;:                       fährt eine PTZ-Kamera zu einer vordefinierten Preset-Position&lt;br /&gt;
    &amp;quot;runPatrol &amp;lt;Patrolname&amp;gt;&amp;quot;:                      startet eine vordefinierte Überwachungstour einer PTZ-Kamera&lt;br /&gt;
    &amp;quot;goAbsPTZ [ X Y | up | down | left | right ]&amp;quot;: positioniert eine PTZ-Kamera zu einer X/Y-Koordinate oder in Richtung up/down/left/right&lt;br /&gt;
    &amp;quot;move [ up | down | left | right | dir_X ]&amp;quot;:   startet kontinuerliche Bewegung einer PTZ-Kamera in Richtung up/down/left/right bzw. dir_X&lt;br /&gt;
    &amp;quot;runView [image | lastrec | lastrec_open | &lt;br /&gt;
     link | link_open &amp;lt;room&amp;gt;]&amp;quot;:                    startet einen Livestream bzw. die letzte Aufnahme als eingbettetes Image, als Link &lt;br /&gt;
                                                   oder öffnet diesen Medienstream sofort &lt;br /&gt;
    &amp;quot;stopView&amp;quot;:                                    Gegenteil von &amp;quot;runView&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &lt;br /&gt;
=== set &amp;lt;name&amp;gt; [on [rectime] | off] === &lt;br /&gt;
&lt;br /&gt;
Der Befehl &amp;quot;set &amp;lt;name&amp;gt; on&amp;quot; startet eine Aufnahme. Die Standardaufnahmedauer beträgt 15 Sekunden. Sie kann mit dem Attribut &amp;quot;rectime&amp;quot; individuell festgelegt werden. Die im Attribut (bzw. im Standard) hinterlegte Aufnahmedauer kann einmalig mit &amp;quot;set &amp;lt;name&amp;gt; on [rectime]&amp;quot; überschrieben werden.&lt;br /&gt;
Die Aufnahme stoppt automatisch nach Ablauf der Zeit &amp;quot;rectime&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Ein Sonderfall ist der Start einer Daueraufnahme mit &amp;quot;set &amp;lt;name&amp;gt; on 0&amp;quot; bzw. dem Attributwert &amp;quot;rectime = 0&amp;quot;. In diesem Fall wird eine Daueraufnahme gestartet die explizit wieder mit dem Befehl &amp;quot;&amp;quot;set &amp;lt;name&amp;gt; off&amp;quot; gestoppt werden muß.&lt;br /&gt;
&lt;br /&gt;
Das Aufnahmeverhalten kann weiterhin mit dem Attribut &amp;quot;recextend&amp;quot; wie folgt beeinflusst werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Attribut &amp;quot;recextend = 0&amp;quot; bzw. nicht gesetzt (Standard):&#039;&#039;&#039;&lt;br /&gt;
* wird eine Aufnahme mit z.B. rectime=22 gestartet, wird kein weiterer Startbefehl für eine Aufnahme akzeptiert bis diese gestartete Aufnahme nach 22 Sekunden beendet ist. Ein Hinweis wird bei verbose=3 im Logfile protokolliert.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Attribut &amp;quot;recextend = 1&amp;quot; gesetzt:&#039;&#039;&#039;&lt;br /&gt;
* eine zuvor gestartete Aufnahme wird bei einem erneuten &amp;quot;set &amp;lt;name&amp;gt; on&amp;quot;-Befehl mit der Aufnahmezeit &amp;quot;rectime&amp;quot; neu parametrisiert. Das bedeutet, dass der Timer für den automatischen Stop auf den Wert &amp;quot;rectime&amp;quot; neu gesetzt wird. Dieser Vorgang wiederholt sich mit jedem Start-Befehl. Dadurch verlängert sich eine laufende Aufnahme bis kein Start-Inpuls mehr registriert wird.&lt;br /&gt;
&lt;br /&gt;
* eine zuvor gestartete Endlos-Aufnahme wird mit einem erneuten &amp;quot;set &amp;lt;name&amp;gt; on&amp;quot;-Befehl nach der Aufnahmezeit &amp;quot;rectime&amp;quot; gestoppt (Timerneustart). Ist dies nicht gewünscht, ist darauf zu achten dass bei der Verwendung einer Endlos-Aufnahme das Attribut &amp;quot;recextend&amp;quot; nicht verwendet wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Beispiele für einfache Operationen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   set &amp;lt;name&amp;gt; on [rectime] :   startet die Aufnahme der Kamera &amp;lt;name&amp;gt;. &lt;br /&gt;
   set &amp;lt;name&amp;gt; off :            stoppt die Aufnahme der Kamera &amp;lt;name&amp;gt;&lt;br /&gt;
   set &amp;lt;name&amp;gt; disable :        deaktiviert die Kamera &amp;lt;name&amp;gt; in der Surveillance Station&lt;br /&gt;
   set &amp;lt;name&amp;gt; enable :         aktiviert die Kamera &amp;lt;name&amp;gt; in der Surveillance Station&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In der SVS kann unter Aufnahmeeinstellungen der Kamera eine Vor-Aufnahmezeit eingestellt werden. Die Einstellung wird von der SVS bezüglich der Gesamtaufnahmezeit automatisch mit berücksichtigt. &lt;br /&gt;
&lt;br /&gt;
Eine eingestellte Vor-Aufnahmezeit von z.B. 10s und eine rectime von 20s führt zu einer Gesamtaufnahmezeit von 30s (zzgl. Prozesszeit zur Befehlsabarbeitung).&lt;br /&gt;
&lt;br /&gt;
=== set &amp;lt;name&amp;gt; snap === &lt;br /&gt;
&lt;br /&gt;
Ein Schnappschuß kann ausgelöst werden durch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  set &amp;lt;name&amp;gt; snap&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Soll eine Reihe Schnappschüsse ausgelöst werden wenn eine Aufnahme startet, kann das durch folgendes notify geschehen.&lt;br /&gt;
Wird der Start der Kamera CamHE1 ausgelöst (vorher Attribut event-on-change-reading -&amp;gt; &amp;quot;Record&amp;quot; setzen), werden 3 Snapshots im Abstand von 2 Sekunden getriggert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define he1_snap_3 notify CamHE1:Record.*on define h3 at +*{3}00:00:02 set CamHE1 snap&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Triggern von 2 Schnappschüssen der Kamera &amp;quot;CamHE1&amp;quot; im Abstand von 6 Sekunden nachdem der Bewegungsmelder &amp;quot;MelderHE1&amp;quot; einen Event gesendet hat, kann z.B. mit folgendem notify geschehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define he1_snap_2 notify MelderHE1:on.* define h2 at +*{2}00:00:06 set CamHE1 snap&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es wird die ID des letzten Snapshots als Wert der Variable &amp;quot;LastSnapId&amp;quot; in den Readings der Kamera ausgegeben.&lt;br /&gt;
&lt;br /&gt;
=== set &amp;lt;name&amp;gt; [enable] [disable] === &lt;br /&gt;
&lt;br /&gt;
Um eine Liste von Kameras oder alle Kameras (mit Regex) zum Beispiel um 21:46 zu deaktivieren / zu aktivieren zwei Beispiele mit at:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define a13 at 21:46 set CamCP1,CamFL,CamHE1,CamTER disable (enable)&lt;br /&gt;
 define a14 at 21:46 set Cam.* disable (enable)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Etwas komfortabler gelingt das Schalten aller Kameras über einen Dummy.&lt;br /&gt;
Zunächst wird der Dummy angelegt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define allcams dummy&lt;br /&gt;
 attr allcams eventMap on:enable off:disable&lt;br /&gt;
 attr allcams room Cams&lt;br /&gt;
 attr allcams webCmd enable:disable&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durch Verknüpfung mit zwei angelegten notify, jeweils ein notify für &amp;quot;enable&amp;quot; und &amp;quot;disable&amp;quot;, kann man durch Schalten des Dummys auf &amp;quot;enable&amp;quot; bzw. &amp;quot;disable&amp;quot; alle Kameras auf einmal aktivieren bzw. deaktivieren.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define all_cams_disable notify allcams:.*off set CamCP1,CamFL,CamHE1,CamTER disable&lt;br /&gt;
 attr all_cams_disable room Cams&lt;br /&gt;
 &lt;br /&gt;
 define all_cams_enable notify allcams:on set CamCP1,CamFL,CamHE1,CamTER enable&lt;br /&gt;
 attr all_cams_enable room Cams&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== set &amp;lt;name&amp;gt; expmode [day] [night] [auto] === &lt;br /&gt;
&lt;br /&gt;
Mit diesem Befehl kann der Belichtungsmodus der Kameras gesetzt werden. Dadurch wird z.B. das Verhalten der Kamera-LED&#039;s entsprechend gesteuert. Die erfolgreiche Umschaltung wird durch das Reading CamExposureMode (&amp;quot;get ... caminfoall&amp;quot;) reportet.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Die erfolgreiche Ausführung dieser Funktion ist davon abhängig ob die SVS diese Funktionalität der Kamera unterstützt. Ist in SVS -&amp;gt; IP-Kamera -&amp;gt; Optimierung -&amp;gt; Belichtungsmodus das Feld für den Tag/Nachtmodus grau hinterlegt, ist nicht von einer lauffähigen Unterstützung dieser Funktion auszugehen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== set &amp;lt;name&amp;gt; motdetsc [camera] [SVS] [disable] (geändert ab Rev 11284) ===&lt;br /&gt;
&lt;br /&gt;
Der Befehl &amp;quot;motdetsc&amp;quot; (steht für &amp;quot;motion detection source&amp;quot;) schaltet die Bewegungserkennung in den gewünschten Modus.&lt;br /&gt;
Wird die Bewegungserkennung durch die Kamera / SVS ohne weitere Optionen eingestellt, werden die momentan gültigen Bewegungserkennungsparameter der Kamera / SVS beibehalten. &lt;br /&gt;
Die erfolgreiche Ausführung der Operation lässt sich u.a. anhand des Status von SVS -&amp;gt; IP-Kamera -&amp;gt; Ereigniserkennung -&amp;gt; Bewegung nachvollziehen.&lt;br /&gt;
&lt;br /&gt;
Für die Bewegungserkennung durch SVS bzw. durch Kamera können weitere Optionen angegeben werden. Die verfügbaren Optionen bezüglich der Bewegungserkennung durch SVS sind &amp;quot;Empfindlichkeit&amp;quot; und &amp;quot;Schwellwert&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 set &amp;lt;name&amp;gt; motdetsc SVS [Empfindlichkeit] [Schwellwert]     # Befehlsmuster&lt;br /&gt;
 set &amp;lt;name&amp;gt; motdetsc SVS 91 30                               # setzt die Empfindlichkeit auf 91 und den Schwellwert auf 30&lt;br /&gt;
 set &amp;lt;name&amp;gt; motdetsc SVS 0 40                                # behält gesetzten Wert für Empfindlichkeit bei, setzt Schwellwert auf 40&lt;br /&gt;
 set &amp;lt;name&amp;gt; motdetsc SVS 15                                  # setzt die Empfindlichkeit auf 15, Schwellwert bleibt unverändert &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wird die Bewegungserkennung durch die Kamera genutzt, stehen die Optionen &amp;quot;Empfindlichkeit&amp;quot;, &amp;quot;Objektgröße&amp;quot; und &amp;quot;Prozentsatz für Auslösung&amp;quot; zur Verfügung. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 set &amp;lt;name&amp;gt; motdetsc camera [Empfindlichkeit] [Schwellwert] [Prozentsatz]    # Befehlsmuster&lt;br /&gt;
 set &amp;lt;name&amp;gt; motdetsc camera 89 0 20                                          # setzt die Empfindlichkeit auf 89, Prozentsatz auf 20&lt;br /&gt;
 set &amp;lt;name&amp;gt; motdetsc camera 90 40 10                                         # setzt Empfindlichkeit auf 90, Schwellwert auf 40, &lt;br /&gt;
                                                                               Prozentsatz auf 10&lt;br /&gt;
 set &amp;lt;name&amp;gt; motdetsc camera 30                                               # setzt die Empfindlichkeit auf 30, andere Werte bleiben &lt;br /&gt;
                                                                               unverändert &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es ist immer die Reihenfolge der Optionswerte zu beachten. Nicht gewünschte Optionen sind mit &amp;quot;0&amp;quot; zu besetzen sofern danach Optionen folgen deren Werte verändert werden sollen (siehe Beispiele oben). Der Zahlenwert der Optionen beträgt 1 - 99 (außer Sonderfall &amp;quot;0&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Die jeweils verfügbaren Optionen unterliegen der Funktion der Kamera und der Unterstützung durch die SVS. Es können jeweils nur die Optionen genutzt werden die in SVS -&amp;gt; Kamera bearbeiten -&amp;gt; Ereigniserkennung zur Verfügung stehen. Weitere Infos sind der Online-Hilfe zur SVS zu entnehmen.&lt;br /&gt;
&lt;br /&gt;
Über den Befehl &amp;quot;get ... caminfoall&amp;quot; wird auch das Reading &amp;quot;CamMotDetSc&amp;quot; aktualisiert welches die gegenwärtige Einstellung der Bewegungserkennung dokumentiert. Es werden nur die Parameter und Parameterwerte angezeigt, welche die SVS aktiv unterstützt. Die Kamera selbst kann weiterführende Einstellmöglichkeiten besitzen.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CamMotDetSc    SVS, sensitivity: 76, threshold: 55&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== set &amp;lt;name&amp;gt; goPreset &amp;lt;Preset&amp;gt; === &lt;br /&gt;
  &lt;br /&gt;
Mit diesem Kommando können PTZ-Kameras in eine vordefininierte Position bewegt werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Die Preset-Positionen müssen dazu zunächst in der Synology Surveillance Station angelegt worden sein. Das geschieht in der PTZ-Steuerung im IP-Kamera Setup.&lt;br /&gt;
Die Presets werden über das Kommando &amp;quot;set &amp;amp;lt;name&amp;amp;gt; getinfo&amp;quot; eingelesen (geschieht bei restart von FHEM automatisch). Der Einlesevorgang kann durch ein Kamerapolling&lt;br /&gt;
regelmäßig wiederholt werden. Ein langes Pollingintervall ist in diesem Fall empfehlenswert da die Presetpositionen sich nur im Fall der Neuanlage bzw. Änderung verändern werden. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
Hier ein Beispiel einer PTZ-Steuerung in Abhängigkeit eines IR-Melder Events:&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
    define CamFL.Preset.Wandschrank notify MelderTER:on.* set CamFL goPreset Wandschrank, ;; define CamFL.Preset.record &lt;br /&gt;
    at +00:00:10 set CamFL on 5 ;;;; define s3 at +*{3}00:00:05 set CamFL snap ;; define CamFL.Preset.back at +00:00:30 set CamFL goPreset Home&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
Funktionsweise: &amp;lt;br&amp;gt;&lt;br /&gt;
Der IR-Melder &amp;quot;MelderTER&amp;quot; registriert eine Bewegung. Daraufhin wird die Kamera CamFL in die Preset-Position &amp;quot;Wandschrank&amp;quot; gebracht. Eine Aufnahme mit Dauer von 5 Sekunden startet 10 Sekunden&lt;br /&gt;
später. Da die Voraufnahmezeit der Kamera 10s beträgt (vgl. Reading &amp;quot;CamPreRecTime&amp;quot;), startet die effektive Aufnahme wenn der Kameraschwenk beginnt. &amp;lt;br&amp;gt;&lt;br /&gt;
Mit dem Start der Aufnahme werden drei Schnappschüsse im Abstand von 5 Sekunden angefertigt. &amp;lt;br&amp;gt;&lt;br /&gt;
Nach einer Zeit von 30 Sekunden fährt die Kamera wieder zurück in die &amp;quot;Home&amp;quot;-Position. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
Ein Auszug aus dem Log verdeutlicht den Ablauf:&lt;br /&gt;
  &lt;br /&gt;
&amp;lt;pre&amp;gt;  &lt;br /&gt;
   2016.02.04 15:02:14 2: CamFL - Camera Flur_Vorderhaus has moved to position &amp;quot;Wandschrank&amp;quot;&lt;br /&gt;
   2016.02.04 15:02:24 2: CamFL - Camera Flur_Vorderhaus Recording with Recordtime 5s started&lt;br /&gt;
   2016.02.04 15:02:29 2: CamFL - Snapshot of Camera Flur_Vorderhaus has been done successfully&lt;br /&gt;
   2016.02.04 15:02:30 2: CamFL - Camera Flur_Vorderhaus Recording stopped&lt;br /&gt;
   2016.02.04 15:02:34 2: CamFL - Snapshot of Camera Flur_Vorderhaus has been done successfully&lt;br /&gt;
   2016.02.04 15:02:39 2: CamFL - Snapshot of Camera Flur_Vorderhaus has been done successfully&lt;br /&gt;
   2016.02.04 15:02:44 2: CamFL - Camera Flur_Vorderhaus has moved to position &amp;quot;Home&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== set &amp;lt;name&amp;gt; runPatrol &amp;lt;Patrolname&amp;gt; === &lt;br /&gt;
&lt;br /&gt;
Dieses Kommando startet die vordefinierterte Überwachungstour einer PTZ-Kamera. &amp;lt;br&amp;gt;&lt;br /&gt;
Die Überwachungstouren müssen dazu zunächst in der Synology Surveillance Station angelegt worden sein. Das geschieht in der PTZ-Steuerung im IP-Kamera Setup -&amp;gt; PTZ-Steuerung -&amp;gt; Überwachung.&lt;br /&gt;
&lt;br /&gt;
Die Überwachungstouren (Patrols) werden über das Kommando &amp;quot;get &amp;lt;name&amp;gt; caminfoall&amp;quot; eingelesen, welches beim Restart von FHEM automatisch abgearbeitet wird. Der Einlesevorgang kann durch ein Kamerapolling regelmäßig wiederholt werden. Ein langes Pollingintervall ist in diesem Fall empfehlenswert, da sich die Überwachungstouren nur im Fall der Neuanlage bzw. Änderung verändern werden.&lt;br /&gt;
&lt;br /&gt;
Nähere Informationen zur Anlage von Überwachungstouren sind in der Hilfe zur Surveillance Station enthalten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== set &amp;lt;name&amp;gt; goAbsPTZ [ X Y | up | down | left | right ] === &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mit diesem Kommando wird eine PTZ-Kamera in Richtung einer wählbaren absoluten X/Y-Koordinate bewegt, oder zur maximalen Absolutposition in Richtung up/down/left/right.&lt;br /&gt;
Die Option ist nur für Kameras verfügbar die das Reading &amp;quot;CapPTZAbs=true&amp;quot; (die Fähigkeit für PTZAbs-Aktionen) besitzen. Die Eigenschaften der Kamera kann mit &amp;quot;get &amp;lt;name&amp;gt; caminfoall&amp;quot; abgefragt werden.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel für Ansteuerung absoluter X/Y-Koordinaten: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 set &amp;lt;name&amp;gt; goAbsPTZ 120 450&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Dieses Beispiel bewegt die Kameralinse in die Position X=120 und Y=450. &amp;lt;br&amp;gt;&lt;br /&gt;
Der Wertebereich ist dabei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 X = 0 - 640      (0 - 319 bewegt nach links, 321 - 640 bewegt nach rechts, 320 bewegt die Linse nicht)&lt;br /&gt;
 Y = 0 - 480      (0 - 239 bewegt nach unten, 241 - 480 bewegt nach oben, 240 bewegt die Linse nicht) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Linse kann damit in kleinsten bis sehr großen Schritten in die gewünschte Richtung bewegt werden. Dieser Vorgang muß ggf. mehrfach wiederholt werden um die Kameralinse in die gewünschte Position zu bringen. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Soll die Bewegung mit der maximalen Schrittweite erfolgen, kann zur Vereinfachung der Befehl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 set &amp;lt;name&amp;gt; goAbsPTZ up [down ] [left] [right]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
verwendet werden. Die Optik wird in diesem Fall mit der größt möglichen Schrittweite zur Absolutposition in der angegebenen Richtung bewegt. Auch in diesem Fall muß der Vorgang ggf. mehrfach wiederholt werden um die Kameralinse in die gewünschte Position zu bringen. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== set &amp;lt;name&amp;gt; move [ up | down | left | right | dir_X ] [Sekunden] === &lt;br /&gt;
&lt;br /&gt;
Mit diesem Kommando wird eine kontinuierliche Bewegung der PTZ-Kamera gestartet. Neben den vier Grundrichtungen up/down/left/right stehen auch Zwischenwinkelmaße &amp;quot;dir_X&amp;quot; zur Verfügung. Die Feinheit dieser Graduierung ist von der Kamera abhängig und kann dem Reading &amp;quot;CapPTZDirections&amp;quot; entnommen werden.&lt;br /&gt;
&lt;br /&gt;
Das Bogenmaß von 360 Grad teilt sich durch den Wert von &amp;quot;CapPTZDirections&amp;quot; und beschreibt die Bewegungsrichtungen beginnend mit &amp;quot;0=rechts&amp;quot; entgegen dem Uhrzeigersinn. D.h. bei einer Kamera mit &amp;quot;CapPTZDirections = 8&amp;quot; bedeutet dir_0 = rechts, dir_2 = oben, dir_4 = links, dir_6 = unten bzw. dir_1, dir_3, dir_5 und dir_7 die entsprechenden Zwischenrichtungen. Die möglichen Bewegungsrichtungen bei Kameras mit &amp;quot;CapPTZDirections = 32&amp;quot; sind dementsprechend kleinteliger.&lt;br /&gt;
&lt;br /&gt;
Im Gegensatz zum &amp;quot;set &amp;lt;name&amp;gt; goAbsPTZ&amp;quot;-Befehl startet der Befehl &amp;quot;set &amp;lt;name&amp;gt; move&amp;quot; eine kontinuierliche Bewegung bis ein Stop-Kommando empfangen wird. Das Stop-Kommando wird nach Ablauf der optional anzugebenden Zeit [Sekunden] ausgelöst. Wird diese Laufzeit nicht angegeben, wird implizit Sekunde = 1 gesetzt.&lt;br /&gt;
&lt;br /&gt;
Beispiele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 set &amp;lt;name&amp;gt; move up 0.5          : bewegt die Linse 0,5 Sekunden (zzgl. Prozesszeit) nach oben (zzgl. Prozesszeit)&lt;br /&gt;
 set &amp;lt;name&amp;gt; move dir_1 1.5       : bewegt die Linse 1,5 Sekunden (zzgl. Prozesszeit) nach rechts-oben &lt;br /&gt;
 set &amp;lt;name&amp;gt; move dir_20 0.7      : bewegt die Linse 1,5 Sekunden (zzgl. Prozesszeit) nach links-unten bei &amp;quot;CapPTZDirections = 32&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== set &amp;lt;name&amp;gt; runView [ image | lastrec | lastrec_open | link | link_open &amp;lt;room&amp;gt;] === &lt;br /&gt;
&lt;br /&gt;
Mit &amp;quot;image, link, link_open&amp;quot; Es wird ein Livestream (mjpeg-Stream) der Kamera, entweder als eingebettetes Image oder als generierter Link, gestartet.&lt;br /&gt;
Der Zugriff auf die letzte Aufnahme einer Kamera kann über die Zusätze &amp;quot;lastrec&amp;quot; bzw. &amp;quot;lastrec_open&amp;quot; erfolgen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  attr &amp;lt;name&amp;gt; htmlattr target=_blank width=&amp;quot;500&amp;quot; height=&amp;quot;375&amp;quot;&lt;br /&gt;
  attr &amp;lt;name&amp;gt; htmlattr target=_blank width=500,height=375&lt;br /&gt;
  attr &amp;lt;name&amp;gt; htmlattr width=700,height=525,top=200,left=300&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Verhalten des Livestreams im FHEMWEB kann durch Angaben im Attribut &amp;quot;htmlattr&amp;quot; beeinflusst werden.&lt;br /&gt;
Mit diesen Attributwerten öffnet der Link als weiteres Fenster/Browsertab. Wird der Stream als Image gestartet, ändert sich die Größe entsprechend der Angaben von Width und Height.&lt;br /&gt;
Das Kommando &amp;lt;b&amp;gt;&amp;quot;set &amp;lt;name&amp;gt; runView link_open&amp;quot;&amp;lt;/b&amp;gt; startet den Livestreamlink sofort in einem neuen Browsertab (longpoll=1 muß für WEB gesetzt sein).&lt;br /&gt;
Dabei wird für jede aktive FHEM-Session eine Fensteröffnung initiiert. Soll dieses Verhalten geändert werden, kann &amp;lt;b&amp;gt;&amp;quot;set &amp;lt;name&amp;gt; runView link_open &amp;lt;room&amp;gt;&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
verwendet werden um das Öffnen des Browserwindows in einem beliebigen, in einer FHEM-Session angezeigten Raum &amp;lt;room&amp;gt;, zu initiieren.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das gesetzte Attribut &amp;quot;livestreamprefix&amp;quot; überschreibt im Reading &amp;quot;LiveStreamUrl&amp;quot; die Angaben für Protokoll, Servername und Port. Damit kann z.B. die LiveStreamUrl für den Versand und externen Zugriff auf die SVS modifiziert werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 attr &amp;lt;name&amp;gt; livestreamprefix https://&amp;lt;Servername&amp;gt;:&amp;lt;Port&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Livestream wird über das Kommando &amp;quot;set &amp;lt;name&amp;gt; stopView&amp;quot; wieder beendet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== set &amp;lt;name&amp;gt; extevent [ 1-10 ]  === &lt;br /&gt;
&lt;br /&gt;
Dieses Kommando triggert ein externes Ereignis (1-10) in der SVS. Die Aktionen, die dieses Ereignis auslöst, sind zuvor in dem Aktionsregeleditor der SVS einzustellen. Es stehen die Ereignisse 1-10 zur Verfügung. In der Banchrichtigungs-App der SVS können auch Email, SMS oder Mobil (DS-Cam) Nachrichten ausgegeben werden wenn ein externes Ereignis ausgelöst wurde. Nähere Informationen dazu sind in der Hilfe zum Aktionsregeleditor zu finden. Der verwendete User benötigt Admin-Rechte in einer DSM-Session.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Get ==&lt;br /&gt;
&lt;br /&gt;
Mit SSCam können die Eigenschaften der Kameras aus der Surveillance Station abgefragt werden. Dazu steht der Befehl zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 get &amp;lt;name&amp;gt; caminfoall&lt;br /&gt;
 get &amp;lt;name&amp;gt; eventlist&lt;br /&gt;
 get &amp;lt;name&amp;gt; stmUrlPath&lt;br /&gt;
 get &amp;lt;name&amp;gt; svsinfo&lt;br /&gt;
 get &amp;lt;name&amp;gt; snapfileinfo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit dem Befehl &amp;quot;get &amp;lt;name&amp;gt; caminfoall&amp;quot; werden abhängig von der Art der Kamera (z.B. Fix- oder PTZ-Kamera) die verfügbaren Eigenschaften ermittelt und als Readings zur Verfügung gestellt.&lt;br /&gt;
So wird zum Beispiel das Reading &amp;quot;Availability&amp;quot; auf &amp;quot;disconnected&amp;quot; gesetzt falls die Kamera von der Surveillance Station getrennt wird und kann für weitere Verarbeitungen genutzt werden.&lt;br /&gt;
Durch &amp;quot;get &amp;lt;name&amp;gt; eventlist&amp;quot; wird das Reading &amp;quot;CamEventNum&amp;quot; aktualisiert, welches die Gesamtanzahl der registrierten Kameraevents enthält.&lt;br /&gt;
Mit &amp;quot;get &amp;lt;name&amp;gt; snapfileinfo&amp;quot; wird der Filename des letzten Schnapschusses ermittelt. Der Befehl wird implizit mit &amp;quot;get &amp;lt;name&amp;gt; snap&amp;quot; ausgeführt. &lt;br /&gt;
&lt;br /&gt;
Der Befehl &amp;quot;get &amp;lt;name&amp;gt; svsinfo&amp;quot; ist eigentlich nicht von der Kamera abhängig, sondern ermittelt vielmehr allgemeine Informationen zur installierten SVS-Version und andere Eigenschaften.&lt;br /&gt;
Die Funktionen &amp;quot;caminfoall&amp;quot; und &amp;quot;svsinfo&amp;quot; werden einmalig automatisch beim Start von FHEM ausgeführt um steuerungsrelevante Informationen zu sammeln.&lt;br /&gt;
Es ist darauf zu achten dass vorher die Credentials gespeichert wurden !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;get &amp;lt;name&amp;gt; stmUrlPath&#039;&#039;&#039;&lt;br /&gt;
  &lt;br /&gt;
Mit diesem Kommando wird der aktuelle Streamkey der Kamera abgerufen und das Reading mit dem Key-Wert gefüllt. Dieser Streamkey kann verwendet werden um eigene Aufrufe eines Livestreams aufzubauen (siehe Beispiel). Wenn das Attribut &amp;quot;showStmInfoFull&amp;quot; gesetzt ist, werden zusaätzliche Stream-Informationen wie &amp;quot;StmKeyUnicst&amp;quot;, &amp;quot;StmKeymjpegHttp&amp;quot; ausgegeben. Diese Readings enthalten die gültigen Stream-Pfade zu einem Livestream und können z.B. versendet und von einer entsprechenden Anwendung ohne session Id geöffnet werden. Wenn das Attribut &amp;quot;livestreamprefix&amp;quot; (Format: &amp;quot;http(s)://&amp;amp;lt;hostname&amp;amp;gt;&amp;amp;lt;port&amp;amp;gt;) gesetzt ist, wird der Servername und Port überschrieben soweit es sinnvoll ist. Wird Polling der Kameraeigenschaften genutzt, wird die stmUrlPath-Funktion automatisch mit ausgeführt.&lt;br /&gt;
  &lt;br /&gt;
Beispiel für den Aufbau eines Http-Calls zu einem Livestream mit StmKey: &lt;br /&gt;
  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http(s)://&amp;amp;lt;hostname&amp;amp;gt;&amp;amp;lt;port&amp;amp;gt;/webapi/entry.cgi?api=SYNO.SurveillanceStation.VideoStreaming&amp;amp;version=1&amp;amp;method=Stream&amp;amp;format=mjpeg&amp;amp;cameraId=5StmKey=&amp;quot;31fd87279976d89bb98409728cced890&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
cameraId (INTERNAL), StmKey müssen durch gültige Werte ersetzt werden.&lt;br /&gt;
  &lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039;&lt;br /&gt;
  &lt;br /&gt;
Falls der Stream-Aufruf versendet und von extern genutzt wird sowie hostname / port durch gültige Werte ersetzt und die Routerports entsprechend geöffnet werden, ist darauf zu achten dass diese sensiblen Daten nicht durch unauthorisierte Personen für den Zugriff genutzt werden können !   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Polling der Kameraeigenschaften:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Die Abfrage der Kameraeigenschaften erfolgt automatisch, wenn das Attribut &amp;quot;pollcaminfoall&amp;quot; (siehe Attribute) mit einem Wert &amp;gt; 10 gesetzt wird. Per Default ist das Attribut &amp;quot;pollcaminfoall&amp;quot; nicht gesetzt und das automatische Polling nicht aktiv. Der Wert dieses Attributes legt das Intervall der Abfrage in Sekunden fest. Ist das Attribut nicht gesetzt oder &amp;lt; 10 wird kein automatisches Polling gestartet bzw. gestoppt wenn vorher der Wert &amp;gt; 10 gesetzt war.&lt;br /&gt;
&lt;br /&gt;
Das Attribut &amp;quot;pollcaminfoall&amp;quot; wird durch einen Watchdog-Timer überwacht. Änderungen des Attributwertes werden alle 90 Sekunden ausgewertet und entsprechend umgesetzt. Eine Änderung des Pollingstatus / Pollingintervalls wird im FHEM-Logfile protokolliert. Diese Protokollierung kann durch Setzen des Attributes &amp;quot;pollnologging&amp;quot; abgeschaltet werden. Dadurch kann ein unnötiges Anwachsen des Logs vermieden werden. Ab verbose=4 wird allerdings trotz gesetzten &amp;quot;pollnologging&amp;quot;-Attribut ein Log des Pollings zu Analysezwecken aktiviert.&lt;br /&gt;
&lt;br /&gt;
Wird FHEM neu gestartet, wird bei aktivierten Polling der ersten Datenabruf innerhalb 60s nach dem Start ausgeführt.  &lt;br /&gt;
&lt;br /&gt;
Der Status des automatischen Pollings wird durch das Reading &amp;quot;PollState&amp;quot; signalisiert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  PollState = Active     -    automatisches Polling wird mit Intervall entsprechend &amp;lt;pollcaminfoall&amp;gt; ausgeführt&lt;br /&gt;
  PollState = Inactive   -    automatisches Polling wird nicht ausgeführt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Bedeutung der Readingwerte ist unter Readings beschrieben.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweise:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Wird Polling eingesetzt, sollte das Intervall nur so kurz wie benötigt eingestellt werden da die ermittelten Werte überwiegend statisch sind.&lt;br /&gt;
Das eingestellte Intervall sollte nicht kleiner sein als die Summe aller HTTP-Verarbeitungszeiten. Pro Pollingaufruf und Kamera werden ca. 10 - 20 Http-Calls gegen die Surveillance Station abgesetzt.&lt;br /&gt;
&lt;br /&gt;
Bei einem eingestellten HTTP-Timeout (siehe Attribut) &amp;quot;httptimeout&amp;quot;) von 4 Sekunden kann die theoretische Verarbeitungszeit nicht höher als 80 Sekunden betragen.&lt;br /&gt;
In dem Beispiel sollte man das Pollingintervall mit einem Sicherheitszuschlag auf nicht weniger 160 Sekunden setzen.&lt;br /&gt;
Ein praktikabler Richtwert könnte zwischen 600 - 1800 (s) liegen.&lt;br /&gt;
&lt;br /&gt;
Sind mehrere Kameras in SSCam definiert, sollte &amp;quot;pollcaminfoall&amp;quot; nicht bei allen Kameras auf exakt den gleichen Wert gesetzt werden um Verarbeitungsengpässe und dadurch versursachte potentielle Fehlerquellen bei der Abfrage der Synology Surveillance Station zu vermeiden.&lt;br /&gt;
Ein geringfügiger Unterschied zwischen den Pollingintervallen der definierten Kameras von z.B. 1s kann bereits als ausreichend angesehen werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Readings ==&lt;br /&gt;
&lt;br /&gt;
Über den Pollingmechanismus bzw. durch Abfrage mit &amp;quot;Get&amp;quot; werden Readings bereitgestellt, deren Bedeutung in der nachfolgenden Tabelle dargestellt sind. Die übermittelten Readings können in Abhängigkeit des Kameratyps variieren.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;  &lt;br /&gt;
* Availability       - Verfügbarkeit der Kamera (disabled, enabled, disconnected, other)&lt;br /&gt;
* CamEventNum        - liefert die Gesamtanzahl der in SVS registrierten Events der Kamera&lt;br /&gt;
* CamExposureControl - zeigt den aktuell eingestellten Typ der Belichtungssteuerung&lt;br /&gt;
* CamExposureMode    - aktueller Belichtungsmodus (Day, Night, Auto, Schedule, Unknown)&lt;br /&gt;
* CamIP              - IP-Adresse der Kamera&lt;br /&gt;
* CamLiveMode        - Quelle für Live-Ansicht (DS, Camera)&lt;br /&gt;
* CamModel           - Kameramodell&lt;br /&gt;
* CamPort            - IP-Port der Kamera&lt;br /&gt;
* CamPreRecTime      - Dauer der der Voraufzeichnung in Sekunden (Einstellung in SVS)&lt;br /&gt;
* CamRecShare        - gemeinsamer Ordner auf der DS für Aufnahmen&lt;br /&gt;
* CamRecVolume       - Volume auf der DS für Aufnahmen&lt;br /&gt;
* CamVendor          - Kamerahersteller Bezeichnung&lt;br /&gt;
* CamVideoFlip       - Ist das Video gedreht  &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
* CamVideoMirror     - Ist das Video gespiegelt  &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
* CapAudioOut        - Fähigkeit der Kamera zur Audioausgabe über Surveillance Station (false/true)&lt;br /&gt;
* CapChangeSpeed     - Fähigkeit der Kamera verschiedene Bewegungsgeschwindigkeiten auszuführen&lt;br /&gt;
* CapPTZAbs          - Fähigkeit der Kamera für absolute PTZ-Aktionen &lt;br /&gt;
* CapPTZAutoFocus    - Fähigkeit der Kamera für Autofokus Aktionen&lt;br /&gt;
* CapPTZDirections   - die verfügbaren PTZ-Richtungen der Kamera&lt;br /&gt;
* CapPTZFocus        - Art der Kameraunterstützung für Fokussierung&lt;br /&gt;
* CapPTZHome         - Unterstützung der Kamera für Home-Position&lt;br /&gt;
* CapPTZIris         - Unterstützung der Kamera für Iris-Aktion &lt;br /&gt;
* CapPTZPan          - Unterstützung der Kamera für Pan-Aktion&lt;br /&gt;
* CapPTZTilt         - Unterstützung der Kamera für Tilt-Aktion&lt;br /&gt;
* CapPTZZoom         - Unterstützung der Kamera für Zoom-Aktion&lt;br /&gt;
* DeviceType         - Kameratyp (Camera, Video_Server, PTZ, Fisheye)&lt;br /&gt;
* Error              - Meldungstext des letzten Fehlers&lt;br /&gt;
* Errorcode          - Fehlercode des letzten Fehlers&lt;br /&gt;
* LastSnapFilename   - der Filename des letzten Schnapschusses&lt;br /&gt;
* LastSnapId         - die ID des letzten Schnapschusses&lt;br /&gt;
* LastUpdateTime     - Datum / Zeit der letzten Aktualisierung durch &amp;quot;caminfoall&amp;quot;&lt;br /&gt;
* LiveStreamUrl      - die LiveStream-Url wenn der Stream gestartet ist. (Attribut &amp;quot;showStmInfoFull&amp;quot; muss gesetzt sein)&lt;br /&gt;
* Patrols            - in Surveillance Station voreingestellte Überwachungstouren (bei PTZ-Kameras)&lt;br /&gt;
* PollState          - zeigt den Status des automatischen Pollings an&lt;br /&gt;
* Presets            - in Surveillance Station voreingestellte Positionen (bei PTZ-Kameras)&lt;br /&gt;
* Record             - Aufnahme läuft = Start, keine Aufnahme = Stop&lt;br /&gt;
* StmKey             - aktueller StreamKey. Kann zum öffnen eines Livestreams ohne Session Id genutzt werden. &lt;br /&gt;
* StmKeyUnicst       - Uni-cast Stream Pfad der Kamera. ((Attribut &amp;quot;showStmInfoFull&amp;quot; muss gesetzt sein)&lt;br /&gt;
* StmKeymjpegHttp    - Mjpeg Stream Pfad (über http) der Kamera. (Attribut &amp;quot;showStmInfoFull&amp;quot; muss gesetzt sein)&lt;br /&gt;
* SVScustomPortHttp  - benutzerdefinierter Port der Surveillance Station (HTTP) im DSM-Anwendungsportal (get mit &amp;quot;svsinfo&amp;quot;)&lt;br /&gt;
* SVScustomPortHttps - benutzerdefinierter Port der Surveillance Station (HTTPS) im DSM-Anwendungsportal (get mit &amp;quot;svsinfo&amp;quot;)&lt;br /&gt;
* SVSlicenseNumber   - die Anzahl der installierten Kameralizenzen (get mit &amp;quot;svsinfo&amp;quot;)&lt;br /&gt;
* SVSuserPriv        - die effektiven Rechte des verwendeten Users nach dem Login (get mit &amp;quot;svsinfo&amp;quot;)&lt;br /&gt;
* SVSversion         - die Paketversion der installierten Surveillance Station (get mit &amp;quot;svsinfo&amp;quot;)&lt;br /&gt;
* UsedSpaceMB        - durch Aufnahmen der Kamera belegter Plattenplatz auf dem Volume&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Attribute ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;debugactivetoken&#039;&#039;&#039; - wenn gesetzt wird der Status des Active-Tokens gelogged - nur für Debuggung, nicht im normalen Betrieb benutzen&lt;br /&gt;
  &lt;br /&gt;
* &#039;&#039;&#039;httptimeout&#039;&#039;&#039; - Timeout-Wert für HTTP-Aufrufe zur Synology Surveillance Station, Default: 4 Sekunden (wenn httptimeout = &amp;quot;0&amp;quot; oder nicht gesetzt)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;htmlattr&#039;&#039;&#039; - ergänzende Angaben zur Livestream-Url um das Verhalten wie Bildgröße zu beeinflussen&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;livestreamprefix&#039;&#039;&#039; - überschreibt die Angaben zu Protokoll, Servernamen und Port zur Weiterverwendung der Livestreamadresse als z.B. externer Link. Die Angabe muss in der Form &amp;quot;http(s)://&amp;lt;servername&amp;gt;:&amp;lt;port&amp;gt;&amp;quot; erfolgen.&lt;br /&gt;
&lt;br /&gt;
*  &#039;&#039;&#039;noQuotesForSID&#039;&#039;&#039; - dieses Attribut kann in bestimmten Fällen die Fehlermeldung &amp;quot;402 - permission denied&amp;quot; vermeiden und ein login ermöglichen. (normalerweise nicht zu setzen)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;pollcaminfoall&#039;&#039;&#039; - Intervall der automatischen Eigenschaftsabfrage (Polling) einer Kamera (kleiner 10: kein Polling, größer 10: Polling mit Intervall)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;pollnologging&#039;&#039;&#039; - 0 bzw. nicht gesetzt = Logging Gerätepolling aktiv (default), 1 = Logging Gerätepolling inaktiv&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;rectime&#039;&#039;&#039; - festgelegte Aufnahmezeit wenn eine Aufnahme gestartet wird. Mit rectime = 0 wird eine Endlosaufnahme gestartet. Ist &amp;quot;rectime&amp;quot; nicht gesetzt, wird der Defaultwert von 15s verwendet.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;session&#039;&#039;&#039; - Auswahl der Login-Session. Nicht gesetzt oder &amp;quot;DSM&amp;quot; -&amp;gt; session wird mit DSM aufgebaut (Standard). &amp;quot;SurveillanceStation&amp;quot; -&amp;gt; Session-Aufbau erfolgt mit SVS &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;simu_SVSversion&#039;&#039;&#039; - simuliert eine andere SVS-Version. NUR FÜR DEBUGGING, nicht im normalen Betrieb zu nutzen !&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;showStmInfoFull&#039;&#039;&#039; - zusaätzliche Streaminformationen wie LiveStreamUrl, StmKeyUnicst, StmKeymjpegHttp werden ausgegeben&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;verbose&#039;&#039;&#039;&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  Es werden verschiedene Verbose-Level unterstützt.&lt;br /&gt;
  Dies sind im Einzelnen:&lt;br /&gt;
&lt;br /&gt;
        0   -   Start/Stop-Ereignisse werden geloggt&lt;br /&gt;
        1   -   Fehlermeldungen werden geloggt&lt;br /&gt;
        2   -   Meldungen über wichtige Ereignisse oder Alarme &lt;br /&gt;
        3   -   gesendete Kommandos werden geloggt&lt;br /&gt;
        4   -   gesendete und empfangene Daten werden geloggt&lt;br /&gt;
        5   -   alle Ausgaben zur Fehleranalyse werden geloggt. ACHTUNG: unter Umständen werden sehr viele Daten in das Logfile geschrieben!&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
weitere Attribute:&lt;br /&gt;
&lt;br /&gt;
* [http://fhem.de/commandref_DE.html#readingFnAttributes readingFnAttributes]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Das Modul bzw. eine Gerätedefinition deaktivieren ==&lt;br /&gt;
&lt;br /&gt;
Mit dem Attribut &amp;quot;disable&amp;quot; kann das Modul bzw. eine Gerätedefinition deaktiviert werden. Im Gegensatz zum Befehl &amp;quot;set ... disable&amp;quot; wird nicht die Kamera an sich deaktiviert, sondern lediglich das Gerätemodul. In diesem Fall werden keine Funktionen mehr ausgeführt.&lt;br /&gt;
Wird das Modul deaktiviert, werden die folgenden Readings gesetzt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
state:         inactive     &lt;br /&gt;
Availability:  ???&lt;br /&gt;
PollState:     Inactive   &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ist für eine Kamera Polling aktiviert, wird diese Aktivität abgeschaltet. Nach Reaktivierung des Gerätemoduls wird das Polling automatisch wieder fortgesetzt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lösungsbeispiele und Ansätze für verschiedene Aufgabenstellungen ==&lt;br /&gt;
&lt;br /&gt;
=== Eine Übersicht mit Hilfe von readingsGroup ===&lt;br /&gt;
&lt;br /&gt;
Mit den umfangreichen Möglichkeiten des Moduls [[readingsGroup]] kann ein FHEM-Widget nach eigenen Vorstellungen erstellt werden. Hierbei ist es möglich sowohl einen Überblick über die Status der Kameras zu erhalten als auch Steuerungsaktivitäten vorzusehen. Das nachfolgende Beipiel soll als Anregung dafür dienen. Weitere Informationen unter der [http://fhem.de/commandref.html#readingsGroup commandref] zu readingsGroup.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; &lt;br /&gt;
Die folgenden Beispiele enthalten keine Maskierungen oder Verdopplungen für ; und Zeilenende, sondern sind so angegeben, wie sie im Web Interface im Befehls-Eingabefeld, nach Klick auf DEF und im Attribut-Eingabefeld eingegeben werden. Mehrere Leerzeichen innerhalb von &amp;lt; &amp;gt; sind als   &amp;lt;code&amp;gt;&amp;lt;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;gt;&amp;lt;/code&amp;gt; zu kodieren.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | [[Bild:RgSSCam.jpg|thumb|500px|links|Kamerastatus und Steuerung]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:50%&amp;quot; |&amp;lt;code&amp;gt;define Cams_All_States readingsGroup &amp;lt;%it_camera&amp;gt;,&amp;lt;Verfügbar&amp;gt;,&amp;lt; &amp;gt;,&amp;lt;Status&amp;gt;,&amp;lt; &amp;gt;,&amp;lt;Erkennung&amp;gt;,&amp;lt; &amp;gt;,&amp;lt;letzte Aufnahme&amp;gt;,&amp;lt; &amp;gt;,&amp;lt;bel. Platz (MB)&amp;gt;,&amp;lt; &amp;gt;,&amp;lt;letzte Aktualisierung&amp;gt;,&amp;lt; &amp;gt;,&amp;lt;Modul Deaktivierung&amp;gt;,&amp;lt; &amp;gt;,&amp;lt;Image&amp;gt; TYPE=SSCam:Availability,&lt;br /&gt;
&amp;lt;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;gt;,state,&amp;lt;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;gt;,CamMotDetSc,&amp;lt;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;gt;,CamLastRecTime,&amp;lt;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;gt;,UsedSpaceMB,&lt;br /&gt;
&amp;lt;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;gt;,LastUpdateTime,&amp;lt;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;gt;,?!disable,&amp;lt;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;gt;,&amp;lt;%Start&amp;gt;,&amp;lt;%Stop&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| ReadingsGoup anlegen. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Cams_All_States valueIcon {&#039;Availability.enabled&#039; =&amp;gt; &#039;remotecontrol/black_btn_GREEN&#039;,&lt;br /&gt;
&#039;Availability.disabled&#039; =&amp;gt; &#039;remotecontrol/black_btn_RED&#039;,&lt;br /&gt;
&#039;state.inactive&#039; =&amp;gt; &#039;StandBy&#039;,&lt;br /&gt;
&#039;state&#039; =&amp;gt; &#039;%devStateIcon&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| In Abhängigkeit vom Wert der Kameraverfügbarkeit und des state-Readings entsprechende Icons anzeigen. Wird das Modul deaktiviert, wird ein Standby-Icon angezeigt unabhängig davon ob in der Kameradefinition ein devStateIcon hinterlegt wurde.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Cams_All_States valueStyle {if($READING eq &amp;quot;Availability&amp;quot; &amp;amp;&amp;amp; $VALUE eq &amp;quot;enabled&amp;quot;){ &#039; style=&amp;quot;color:green&amp;quot; &#039; }&lt;br /&gt;
elsif( $READING eq &amp;quot;Availability&amp;quot; &amp;amp;&amp;amp; $VALUE eq  &amp;quot;disabled&amp;quot;){ &#039; style=&amp;quot;color:red&amp;quot; &#039; }&lt;br /&gt;
elsif( $READING eq &amp;quot;CamMotDetSc&amp;quot; &amp;amp;&amp;amp; $VALUE =~ /SVS.*/ ){ &#039; style=&amp;quot;color:orange&amp;quot; &#039; }&lt;br /&gt;
elsif( $READING eq &amp;quot;CamMotDetSc&amp;quot; &amp;amp;&amp;amp; $VALUE eq &amp;quot;disabled&amp;quot;){ &#039; style=&amp;quot;color:LimeGreen&amp;quot; &#039; }&lt;br /&gt;
elsif( $READING eq &amp;quot;CamMotDetSc&amp;quot; &amp;amp;&amp;amp; $VALUE =~ /Cam.*/ ){ &#039; style=&amp;quot;color:SandyBrown&amp;quot; &#039; }}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Farbgestaltung der Texte in Anhängigkeit der Werte setzen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Cams_All_States valueFormat {($READING eq &amp;quot;CamMotDetSc&amp;quot; &amp;amp;&amp;amp; $VALUE eq &amp;quot;disabled&amp;quot;) ? &amp;quot;external&amp;quot; : $VALUE}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Wenn die Quelle der Bewegungserkennung auf &amp;quot;disabled&amp;quot; gestellt wurde, soll &amp;quot;external&amp;quot; in der Übersicht angezeigt werden weil die Bewegungserkennung in dem Fall durch IR-Melder durchgeführt wird.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Cams_All_States valueColumns { &#039;Image&#039; =&amp;gt; &#039;colspan=&amp;quot;2&amp;quot;&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Überschrift &amp;quot;Image&amp;quot; soll sich über die letzten zwei Spalten strecken. Es gilt sowohl für &amp;quot;Start&amp;quot; und &amp;quot;Stop&amp;quot; .&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Cams_All_States nameStyle style=&amp;quot;color:black;font-weight:bold&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Überschriften sollen schwarz und fett sein.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Cams_All_States commands { &#039;Availability.enabled&#039; =&amp;gt; &#039;set $DEVICE disable&#039;,&lt;br /&gt;
&#039;Availability.disabled&#039; =&amp;gt; &#039;set $DEVICE enable&#039;,&lt;br /&gt;
&#039;Cams_All_States.Start&#039; =&amp;gt; &#039;set %DEVICE runView image&#039;,&lt;br /&gt;
&#039;Cams_All_States.Stop&#039; =&amp;gt; &#039;set %DEVICE stopView&#039;,&lt;br /&gt;
disable =&amp;gt; &amp;quot;disable:&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Es sollen Kommandos bestimmten Readings / Werten unterlegt werden. Zum Beispiel kann die Kamera mit Klick auf das Availability-Icon disabled werden wenn der Readingswert &amp;quot;enabled&amp;quot; ist. Der Livestream kann mit &amp;quot;Start&amp;quot; in der letzten Spalte gestartet, oder das Modul über eine Auswahl in der Drop-Down-Liste unterhalb von &amp;quot;Modul Deaktivierung&amp;quot; deaktiviert/aktiviert werden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Cams_All_States cellStyle { &amp;quot;c:0&amp;quot; =&amp;gt; &#039;style=&amp;quot;text-align:left;color:green;font-weight:normal&amp;quot;&#039;,&lt;br /&gt;
&amp;quot;c:5&amp;quot; =&amp;gt; &#039;style=&amp;quot;text-align:center;color:green;font-weight:normal&amp;quot;&#039;,&lt;br /&gt;
&amp;quot;c:9&amp;quot; =&amp;gt; &#039;style=&amp;quot;text-align:center;font-weight:normal&amp;quot;&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Formatierung bestimmter Spalten (0,5,9).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Cams_All_States alias Status aller Kameras&amp;lt;/code&amp;gt;&lt;br /&gt;
| Alias setzen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Cams_All_States group Kamerastatus&amp;lt;/code&amp;gt;&lt;br /&gt;
| Gruppenzugehörigkeit setzen. Wird auch für die Anzeige im Dashboard benutzt.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mail mit Snapshot im Anhang und Aufnahmelink versenden (sendemail) ===&lt;br /&gt;
&lt;br /&gt;
Nachfolgendes Beispiel zeigt eine Möglichkeit in Linux mit dem Tool [http://caspian.dotconf.net/menu/Software/SendEmail/ sendemail] eine Mail mit einem Link zu einer Kameraaufnahme und bis zu drei Anhängen zu versenden. Das Tool ist in vielen Repositories erhalten und kann unter Debian (z.B. Ubuntu) installiert werden mittels &amp;lt;code&amp;gt;apt-get install sendemail libio-socket-ssl-perl&amp;lt;/code&amp;gt;.&lt;br /&gt;
Die Mail wird mit einem DOIF Kommando in Abhängigkeit von einer angefertigten Aufnahme angestoßen.&lt;br /&gt;
&lt;br /&gt;
Zunächst die Mailfunktion in der 99_myUtils als Unterroutinen einfügen. Die Funktion ist nicht blockierend (mit Modul Blocking.pm) ausgeführt. Die &amp;quot;\&amp;quot; dienen nachfolgend nur&lt;br /&gt;
zur Kennzeichnung eines Zeilenumbruchs - den Code bitte auf eine Zeile schreiben.&lt;br /&gt;
  &lt;br /&gt;
&amp;lt;source lang=perl&amp;gt;&lt;br /&gt;
# Am Anfang von 99_myUtils hinzufügen&lt;br /&gt;
use Blocking;&lt;br /&gt;
&lt;br /&gt;
##############################################################################&lt;br /&gt;
########        DebianMail  Mail  versenden  nonblocking          ############&lt;br /&gt;
##############################################################################&lt;br /&gt;
&lt;br /&gt;
sub DebianMailnbl {&lt;br /&gt;
&lt;br /&gt;
 my $rcpt = shift;&lt;br /&gt;
 my $subject = shift; &lt;br /&gt;
 my $text = shift;&lt;br /&gt;
 my $attach = shift; &lt;br /&gt;
 my $attach1 = shift; &lt;br /&gt;
 my $attach2 = shift; &lt;br /&gt;
 my $hash-&amp;gt;{NAME_MAIL} = &amp;quot;Debianmail&amp;quot;;&lt;br /&gt;
 my $name = $hash-&amp;gt;{NAME_MAIL};&lt;br /&gt;
&lt;br /&gt;
if ($attach2) {&lt;br /&gt;
    $hash-&amp;gt;{helper}{RUNNING_PID} = BlockingCall(&amp;quot;DebianMailnbl_send&amp;quot;, $name.&amp;quot;|&amp;quot;.$rcpt.&amp;quot;|&amp;quot;.$subject.&amp;quot;|&amp;quot;.$text.&amp;quot;|&amp;quot;.$attach.&amp;quot; \&lt;br /&gt;
    |&amp;quot;.$attach1.&amp;quot;|&amp;quot;.$attach2, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
} elsif ($attach1) {&lt;br /&gt;
    $hash-&amp;gt;{helper}{RUNNING_PID} = BlockingCall(&amp;quot;DebianMailnbl_send&amp;quot;, $name.&amp;quot;|&amp;quot;.$rcpt.&amp;quot;|&amp;quot;.$subject.&amp;quot;|&amp;quot;.$text.&amp;quot;|&amp;quot;.$attach.&amp;quot;|&amp;quot; \&lt;br /&gt;
   .$attach1, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
} else {&lt;br /&gt;
    $hash-&amp;gt;{helper}{RUNNING_PID} = BlockingCall(&amp;quot;DebianMailnbl_send&amp;quot;, $name.&amp;quot;|&amp;quot;.$rcpt.&amp;quot;|&amp;quot;.$subject.&amp;quot;|&amp;quot;.$text.&amp;quot;|&amp;quot;.$attach,&lt;br /&gt;
     &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
######################################################&lt;br /&gt;
########       Mailfunktion nonblocking           &lt;br /&gt;
######################################################&lt;br /&gt;
&lt;br /&gt;
sub DebianMailnbl_send {&lt;br /&gt;
 my ($string) = @_;&lt;br /&gt;
 my ($name, $rcpt, $subject, $text, $attach, $attach1, $attach2) = split(&amp;quot;\\|&amp;quot;, $string);&lt;br /&gt;
 my $ret = &amp;quot;&amp;quot;;&lt;br /&gt;
 my $sender = &amp;quot;&amp;lt;Sendername&amp;gt;\@&amp;lt;Domäne&amp;gt;&amp;quot;; &lt;br /&gt;
 my $konto = &amp;quot;&amp;lt;Mailkonto&amp;quot;;&lt;br /&gt;
 my $passwrd = &amp;quot;&amp;lt;Mailkontopasswort&amp;gt;&amp;quot;;&lt;br /&gt;
 my $provider = &amp;quot;&amp;lt;Mailserver&amp;gt;&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
if ($attach2) {&lt;br /&gt;
    $ret .= qx(sendEmail -f &#039;$sender&#039; -t &#039;$rcpt&#039; -u &#039;$subject&#039; -m &#039;$text&#039; -a &#039;$attach&#039; -a &#039;$attach1&#039; -a &#039;$attach2&#039; -s &#039;$provider&#039; \&lt;br /&gt;
    -xu &#039;$konto&#039; -xp &#039;$passwrd&#039; -o tls=no -o message -charset=utf-8 -o message-content-type=text/plain );&lt;br /&gt;
} elsif ($attach1) {&lt;br /&gt;
    $ret .= qx(sendEmail -f &#039;$sender&#039; -t &#039;$rcpt&#039; -u &#039;$subject&#039; -m &#039;$text&#039; -a &#039;$attach&#039; -a &#039;$attach1&#039; -s &#039;$provider&#039; -xu &#039;$konto&#039; \&lt;br /&gt;
    -xp &#039;$passwrd&#039; -o tls=no -o message-charset=utf-8 -o message-content-type=text/plain );&lt;br /&gt;
} else {&lt;br /&gt;
    $ret .= qx(sendEmail -f &#039;$sender&#039; -t &#039;$rcpt&#039; -u &#039;$subject&#039; -m &#039;$text&#039; -a &#039;$attach&#039; -s &#039;$provider&#039; -xu &#039;$konto&#039; -xp &#039;$passwrd&#039; \&lt;br /&gt;
    -o tls=no -o message-charset=utf-8 -o message-content-type=text/plain );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
 # remove CR from return-string &lt;br /&gt;
 $ret =~ s,[\r\n]*,,g;    &lt;br /&gt;
&lt;br /&gt;
 Log3 $name, 3, &amp;quot;$name - sendEmail returned: $ret&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die TLS Verschlüsselung (ehem. SSL) zu nutzen, dann tls=auto verwenden.&lt;br /&gt;
&lt;br /&gt;
Falls der Body-Text in einem (Android-)Mailer auf dem Handy nicht gezeigt wird, kann evtl. der Parameter &#039;&#039;&#039;-o message-content-type=html&#039;&#039;&#039; helfen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== Versand triggern - Beispiel mit DOIF ====&lt;br /&gt;
Der Mailversand wird in dem Beispiel mit einem DOIF angetriggert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define CamHE1.email DOIF ([CamHE1:&amp;quot;CamLastRec&amp;quot;]) ({DebianMailnbl (&#039;&amp;lt;Empfänger&amp;gt;@&amp;lt;Domäne&amp;gt;&#039;,&#039;Bewegungsalarm CamHE1&#039;,&#039;Eine Bewegung wurde an der Haustür registriert. &lt;br /&gt;
Aufnahmelink: [CamHE1:VideoFolder]/[CamHE1:CamLastRec]&#039;,&#039;/media/sf_surveillance/@Snapshot/[CamHE1:LastSnapFilename]&#039;)})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wird eine Aufnahme der Kamera CamHE1 beendet, wird integriert der Befehl &amp;quot;get .. eventlist&amp;quot; ausgeführt. Dadurch aktualisiert sich das Reading &amp;quot;CamLastRec&amp;quot;.&lt;br /&gt;
Dieser Event wird genutzt um eine Mail mit einem Link zur Aufnahme und einem während der Aufnahme angelegten Schnappschuß zu versenden.&lt;br /&gt;
Will man einen weiteren Anhang versenden, sähe das DOIF folgendermaßen aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define CamHE1.email DOIF ([CamHE1:&amp;quot;CamLastRec&amp;quot;]) ({DebianMailnbl (&#039;&amp;lt;Empfänger&amp;gt;@&amp;lt;Domäne&amp;gt;&#039;,&#039;Bewegungsalarm CamHE1&#039;,&#039;Eine Bewegung wurde an der Haustür registriert. &lt;br /&gt;
Aufnahmelink: [CamHE1:VideoFolder]/[CamHE1:CamLastRec]&#039;,&#039;/media/sf_surveillance/@Snapshot/[CamHE1:LastSnapFilename]&#039;,&#039;&amp;lt;weiteres File&amp;gt;&#039;)})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Dss Reading &amp;quot;VideoFolder&amp;quot; muß, wie in dem Beispiel zu sehen, dem &amp;quot;CamLastRec&amp;quot; vorangestellt werden um den kompletten Pfad zur Aufnahme zu erhalten. Der versendete Link würde somit etwa den folgenden Aufbau haben:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/volume1/surveillance/Carport/20160407PM/Carport20160407-221541-1460060141.mp4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn in einer Mail nach extern versendet wird, ist ein solcher Link wahrscheinlich über eine Anwendung nicht zugreifbar.&lt;br /&gt;
Um den Link dynamisch anzupassen und so den Zugriff von extern über z.B. einen Webserver zu ermöglichen, kann das Attribut &amp;quot;videofolderMap&amp;quot; verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Wird dieses Attribut auf zum Beispiel ...&amp;lt;pre&amp;gt;&amp;quot;http://&amp;lt;Server&amp;gt;:8083/fhem/svs/Carport/&amp;quot;&amp;lt;/pre&amp;gt; ...gesetzt, ergibt sich folgender Link der in der Mail versendet wird:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://&amp;lt;Server&amp;gt;:8083/fhem/svs/Carport/20160407PM/Carport20160407-221541-1460060141.mp4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In dem obigen Beispiel wird ein FHEM-Webserver verwendet, der zuvor über HTTPSRV (siehe Commandref) angelegt wurde,&lt;br /&gt;
WIe der Webserver angelegt werden kann ist [[SSCAM_-_Steuerung_von_Kameras_in_Synology_Surveillance_Station#Einsatz_FHEM_Webserver_zum_Zugriff_auf_Aufnahmen | hier]] beschrieben. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Nach dem Snapshot wird implizit die Funktion &amp;quot;get ... snapfileinfo&amp;quot; aufgerufen. Diese Funktion trägt den neuen/letzten Snapfilename in das Reading &amp;quot;LastSnapFilename&amp;quot; ein.&lt;br /&gt;
Es ist somit sicherzustellen dass dieses Funktion abgeschlossen ist bevor die Aufnahme per Mail versendet werden soll. Das kann zum Beispiel mit einem Notify auf den Event &amp;quot;&amp;lt;Device&amp;gt;:LastSnapFilename.*&amp;quot; geschehen.&lt;br /&gt;
Sollten das Problem auftreten dass alte Snapshots versendet werden, ist aller Wahrscheinlichkeit nach in dem beschriebenen Sachverhalt die Ursache zu finden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Versand triggern - Beispiel mit Notify ====&lt;br /&gt;
&lt;br /&gt;
Mit diesem Notify wird das Snapshotfile angehängt und auch ein Link zu dem Snapshot mit eingefügt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define CamHE1.email NOTIFY CamHE1:LastSnapFilename.* {DebianMailnbl (&#039;&amp;lt;Empfänger&amp;gt;@&amp;lt;Domäne&amp;gt;&#039;,&#039;Bewegungsalarm CamHE1&#039;, &lt;br /&gt;
&#039;Eine Bewegung wurde an der Haustür registriert. Aufnahmelink: http://&amp;lt;Server&amp;gt;:8083/fhem/snap/&#039;.(ReadingsVal(&amp;quot;CamHE1&amp;quot;,&amp;quot;LastSnapFilename&amp;quot;,&amp;quot;&amp;quot;)), &lt;br /&gt;
&#039;/media/sf_surveillance/@Snapshot/&#039;.(ReadingsVal(&amp;quot;CamHE1&amp;quot;,&amp;quot;LastSnapFilename&amp;quot;,&amp;quot;&amp;quot;)))}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Link in dieser Form aufrufen zu können ist erst ein HTTPSRV anzulegen mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define snapweb HTTPSRV snap /media/sf_surveillance/@Snapshot SVS-Snapshots&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Natürlich muß dabei der Pfad &amp;quot;/media/sf_surveillance/&amp;quot; so angepasst werden dass er dem (gemounteten) SVS-Aufnahmeverzeichnis entspricht.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Einsatz eines Webservers zum Zugriff auf Aufnahmen ===&lt;br /&gt;
&lt;br /&gt;
==== Nutzung des FHEM-internen HTTPSRV Plug-In ====&lt;br /&gt;
&lt;br /&gt;
Ziel der nachfolgenden Beschreibung ist es, eine Möglichkeit darzustellen, um den FHEM Webserver für den Zugriff auf die Aufnahmen der Synology Surveillance Station zu nutzen. &lt;br /&gt;
&lt;br /&gt;
Folgende Ausgangslage wird für das Beispiel als gegeben angenommen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* der gemeinsame Ordner der Surveillance Station (normalerweise &amp;quot;surveillance&amp;quot;) in der Diskstation ist am FHEM-Server gemountet. &amp;lt;br&amp;gt;Für das Beipiel ist das gemountete Verzeichnis: /media/sf_surveillance&lt;br /&gt;
* FHEMWEB ist im Einsatz&lt;br /&gt;
* für das Beispiel ist eine Kamera CamHE1 (SVS-Name: Hauseingang) definiert&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HTTPSRV ist ein Plug-in für FHEMWEB und stellt den Webserver für den Zugriff zur Verfügung. Diese Möglichkeit ist sicherlich für jene Fälle interessant bei denen der Zugriff über einen Verzeichnisdienst nicht möglich oder nicht gewünscht ist (zum Bespiel von extern).&lt;br /&gt;
Es steht auch eine Modul-interne Zugriffsmöglichkeit auf die letzte Aufnahme mit dem Befehl &amp;quot;set CamHE1 runView lastrec (oder lastrec_open)&amp;quot; zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Webserver wird definiert mit:&lt;br /&gt;
&lt;br /&gt;
 define svsweb HTTPSRV svs /media/sf_surveillance WebServer SVS-Aufnahmen&lt;br /&gt;
&lt;br /&gt;
Der definierte Webserver sollte nun links im Seitenmenü unter dem Namen &amp;quot;WebServer SVS-Aufnahmen&amp;quot; erscheinen. Ein Klick auf diesen Link sollte nun die Meldung zeigen:&lt;br /&gt;
&lt;br /&gt;
 File not found: /media/sf_surveillance/index.html&lt;br /&gt;
&lt;br /&gt;
Die Datei index.html existiert natürlich normalerweise nicht im surveillance-Verzeichnis. Der Inhalt des Verzeichnisses &amp;quot;/media/sf_surveillance&amp;quot;, also des surveillance-Stammordners, wird nun mit der Basisadresse ... &amp;lt;pre&amp;gt;http://&amp;lt;FHEM-Server&amp;gt;:8083/fhem/svs/&amp;lt;/pre&amp;gt; ...erreicht.&lt;br /&gt;
&lt;br /&gt;
Alle Aufnahmen der Kameras werden in Unterordnern des surveillance-Stammerzeichnisses gespeichert, die den gleichen Namen wie die Kamera in der Surveillance Station haben. Um den Pfad zu dem Aufnahmefile zu spezifizieren, ist die Basisadresse des erstellten Webservers mit dem Unterordner der entsprechenden Kamera zu ergänzen. Mit diesem zusammengesetzten Gesamtpfad ist ebenfalls das Reading &amp;quot;VideoFolder&amp;quot;, welches den physikalischen Pfad von Aufnahmen der entsprechenden Kamera beschreibt, zu überschreiben. &lt;br /&gt;
&lt;br /&gt;
Die wird mit dem Attribut &amp;quot;videofolderMap&amp;quot; erreicht. In dem Beispiel wird es gesetzt auf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr CamHE1 videofolderMap http://&amp;lt;FHEM-Server&amp;gt;:8083/fhem/svs/Hauseingang/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jede Aufnahme der Kamera &amp;quot;Hauseingang&amp;quot; bzw. &amp;quot;CamHE1&amp;quot; wird somit durch die Webadresse ...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://&amp;lt;FHEM-Server&amp;gt;:8083/fhem/svs/Hauseingang/&amp;lt;Inhalt Reading CamLastRec&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
... erreicht.&lt;br /&gt;
&lt;br /&gt;
Wie eine Mail mit diesem Link versendet werden kann ist [[SSCAM_-_Steuerung_von_Kameras_in_Synology_Surveillance_Station#Mail_mit_Snapshot_im_Anhang_und_Aufnahmelink_versenden_.28sendmail.29 | hier]] beschrieben.&lt;br /&gt;
&lt;br /&gt;
Der komplette in der Mail versendete Aufnahmelink sieht folgendermaßen aus: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://&amp;lt;FHEM-Server&amp;gt;:8083/fhem/svs/Hauseingang//20160408PM/Hauseingang20160408-215150-1460145110.mp4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Nutzung der Webstation auf Synology DS zum Zugriff auf Recordings ====&lt;br /&gt;
&lt;br /&gt;
Da die Benutzung des HTTPSRV für diesen Zweck FHEM belastet bzw. blockiert, hat Martin Fischer im Forum unter:&lt;br /&gt;
https://forum.fhem.de/index.php/topic,45671.msg482616.html#msg482616&lt;br /&gt;
&lt;br /&gt;
zwei Möglichkeiten bschrieben wie man den internen Webserver des Synology DS statt dessen verwenden kann (DSM 6).&lt;br /&gt;
&lt;br /&gt;
Darauf aufbauend ist hier folgend die Umsetzung im DSM 5.2 beschrieben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1. schnelle Variante A&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die nachfolgende Beschreibung bezieht sich auf DSM 5.2. Es wird ein virtueller Host (test.myds.me) definiert, der auf Port HTTP 8081 hört. Das Dokument-Root soll in dem Beispiel der Ordner &amp;quot;/volume1/web/fhemsvs&amp;quot; sein.  &lt;br /&gt;
&lt;br /&gt;
* Nach dem Login als root wechselt man in das web-Verzeichnis mit &amp;quot;cd /volume1/web&amp;quot;&lt;br /&gt;
* anlegen des Root-Verzeichnisses für den virtuellen Host und setzen der Berechtigungen:&lt;br /&gt;
  mkdir fhemsvs&lt;br /&gt;
  chown http:http fhemsvs&lt;br /&gt;
  chmod 775 fhemsvs&lt;br /&gt;
&lt;br /&gt;
* Link im Root-Verzeichnis zum SVS-Stammverzeichnis setzen:&lt;br /&gt;
  ln -s /volume1/surveillance/ /volume1/web/fhemsvs&lt;br /&gt;
&lt;br /&gt;
(Hinweis: Wenn es zu Problemen beim Mailversand kommt - &amp;quot;leere&amp;quot; Bilder angehängt -, schaut mal, ob das Verzeichnis richtig ist. Einige (Beta-)Versionen von SVS benutzen @surveillance statt surveillance als Verzeichnis, so dass ein leicht anderer Link gesetzt werden muss: ln -s /volume1/\@surveillance/ /volume1/web/fhemsvs)&lt;br /&gt;
&lt;br /&gt;
* einen virtuellen Host in Systemsteuerung -&amp;gt; Webdienste -&amp;gt; virtueller Host anlegen. Soll der Host von extern erreichbar sein, muß ebenfalls eine Registrierung des Hostnamens z.B. bei dem kostenfreien DNS-Dienst von Synology erfolgen sowie der verwendete Port im Router freigeschaltet werden.&lt;br /&gt;
  &lt;br /&gt;
[[Bild:vHost.PNG|left|thumb|300px|]] Der virtuelle Host ist durch die Angabe des Unterodners (fhemsvs), des Hostnamens (test.myds.me), des Protokolls und des Ports (8081) zu definieren. Die Angaben sind natürlichen den realen Werten anzupassen.&lt;br /&gt;
&lt;br /&gt;
* die Recordings sind nun prinzipiell unter der Adresse erreichbar:&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  http://test.myds.me:8081/surveillance/&amp;lt;Camname&amp;gt;/&amp;lt;Zeitordner&amp;gt;/&amp;lt;Dateiname&amp;gt;&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* in FHEM ist der Zugangspfad zu dem Aufnahmen zusammengesetzt aus den Readings &amp;quot;VideoFolder&amp;quot; (Original z.B. /volume1/surveillance/Carport) und &amp;quot;CamLastRec&amp;quot;. Über das Attribut &amp;quot;videofolderMap&amp;quot; wird &amp;quot;/volume1/surveillance/Carport&amp;quot; nun ersetzt durch &amp;lt;pre&amp;gt;&amp;quot;http://test.myds.me:8081/surveillance/Carport/&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der substituierte Aufnahmelink wird nun zu: (ReadingsVal(&amp;quot;&amp;lt;camname&amp;gt;&amp;quot;,&amp;quot;VideoFolder&amp;quot;,&amp;quot;&amp;quot;)).(ReadingsVal(&amp;quot;&amp;lt;name&amp;gt;&amp;quot;,&amp;quot;CamLastRec&amp;quot;,&amp;quot;&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
* Der Versand des Aufnahmelinks per Mail kann durch ein Notify erfolgen:&lt;br /&gt;
&lt;br /&gt;
  define N.CamCP1.Rec.Email notify CamCP1:CamLastRec:.*  {DebianMailnbl (&#039;&amp;lt;Mailempfänger&amp;gt;&#039;,&#039;Bewegungsaufnahme Carport&#039;, &#039;Aufnahmelink: &#039;.(ReadingsVal(&amp;quot;CamCP1&amp;quot;,&amp;quot;VideoFolder&amp;quot;,&amp;quot;&amp;quot;)).(ReadingsVal(&amp;quot;CamCP1&amp;quot;,&amp;quot;CamLastRec&amp;quot;,&amp;quot;&amp;quot;))) }&lt;br /&gt;
&lt;br /&gt;
Die Funktion DebianMailnbl für den Mailversand ist zuvor in 99_myUtils zu definieren. (siehe [[#Mail_mit_Snapshot_im_Anhang_und_Aufnahmelink_versenden_.28sendmail.29 | Mailversandroutine]] )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Der Versand des Aufnahmelinks per TelegramBot kann durch folgendes Notify erfolgen:&lt;br /&gt;
&lt;br /&gt;
 define N.CamCP1.Rec.TeleBot notify CamCP1:CamLastRec:.* { my $var = (ReadingsVal(&amp;quot;CamCP1&amp;quot;,&amp;quot;VideoFolder&amp;quot;,&amp;quot;&amp;quot;)).(ReadingsVal(&amp;quot;CamCP1&amp;quot;,&amp;quot;CamLastRec&amp;quot;,&amp;quot;&amp;quot;)); fhem (&amp;quot;set teleBot message $var Bewegungsaufnahme beim Carport&amp;quot;); }&lt;br /&gt;
&lt;br /&gt;
Natürlich ist TelegramBot vorab einzurichten. Der Versand erfolgt in dem Beispiel an den defaultPeer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2. Variante B&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
(noch für DSM 5.2 zu beschreiben).&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Workaround bei DSM 2-Stufen Verifizierung  ===&lt;br /&gt;
1. Benutzer in der SVS einrichten, zum Manager machen&amp;lt;br&amp;gt;&lt;br /&gt;
2. Benutzer wird automatisch auch in FHEM eingerichtet, dort zum Admin machen&amp;lt;br&amp;gt;&lt;br /&gt;
3. 2-Stufen Verifizierung ausschalten&amp;lt;br&amp;gt;&lt;br /&gt;
4. Modul / Kamera zum Laufen bringen&amp;lt;br&amp;gt;&lt;br /&gt;
5. Session im Modul auf SVS stellen&amp;lt;br&amp;gt;&lt;br /&gt;
6. Benutzer in der DSM aus der Admin-Gruppe rausnehmen&amp;lt;br&amp;gt;&lt;br /&gt;
7. 2-Stufen Verifizierung einschalten (Option nur für Admins)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hinweise zu Fehlern ==&lt;br /&gt;
=== &amp;quot;Execution failed&amp;quot; in Snap-Funktion nach SVS update auf 8.0.1 ===&lt;br /&gt;
&lt;br /&gt;
Die Rechte auf das Verzeichnis /volume1/surveillance/@Snapshot wurden nicht auf den neuen Benutzer/Gruppe SurveillanceStation/SurveillanceStation umgesetzt.&lt;br /&gt;
&lt;br /&gt;
Mit&lt;br /&gt;
&lt;br /&gt;
  chown -R SurveillanceStation:SurveillanceStation  /volume1/surveillance/@Snapshot&lt;br /&gt;
&lt;br /&gt;
konnte das Problem behoben werden.&lt;br /&gt;
Die Rechte des Verzeichnisses sind jetzt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
drwxrwxrwx   8 root                root                 4096 Mar  4 16:03 .&lt;br /&gt;
drwxr-xr-x  49 root                root                 4096 Mar  4 15:06 ..&lt;br /&gt;
drwxrwxrwx  47 SurveillanceStation SurveillanceStation  4096 Mar  3 21:26 Carport&lt;br /&gt;
drwxrwxrwx+  3 root                root                 4096 Mar  2 01:01 @eaDir&lt;br /&gt;
drwxr-xr-x  24 SurveillanceStation SurveillanceStation  4096 Mar  4 15:07 Hauseingang&lt;br /&gt;
drwxr-xr-x   4 SurveillanceStation SurveillanceStation  4096 Feb 26 19:59 Keller&lt;br /&gt;
drwxr-xr-x   3 SurveillanceStation SurveillanceStation 45056 Mar  4 15:39 @Snapshot&lt;br /&gt;
drwxr-xr-x  20 SurveillanceStation SurveillanceStation  4096 Mar  3 07:17 Terrasse&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Motivierte linke Hände</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Wochenende,_Feiertage_und_Schulferien&amp;diff=20313</id>
		<title>Wochenende, Feiertage und Schulferien</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Wochenende,_Feiertage_und_Schulferien&amp;diff=20313"/>
		<updated>2017-02-26T11:36:28Z</updated>

		<summary type="html">&lt;p&gt;Motivierte linke Hände: schulferien.org durch Ferienwiki.de ersetzt, siehe https://forum.fhem.de/index.php?topic=65155.0&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;FHEM bietet mehrere Möglichkeiten, Komponenten in Abhängigkeit von Wochenenden, Feiertagen oder sogar Schulferien zu steuern.&lt;br /&gt;
&lt;br /&gt;
Eine simple Rollladensteuerung um 7 Uhr morgens sieht beispielsweise wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
 define RolloHoch at *07:00 set Rollo hoch&lt;br /&gt;
&lt;br /&gt;
== Wochenendermittlung mit $we ==&lt;br /&gt;
Um am Wochenende (Samstag und Sonntag) länger schlafen zu können, kann diese Steuerung durch Nutzung der Variable &#039;&#039;$we&#039;&#039; erweitert werden.&lt;br /&gt;
Diese hat am Wochenende den Wert &#039;&#039;1&#039;&#039;, an sonstigen Tagen den Wert &#039;&#039;0&#039;&#039;. In if-Abfragen wird die 0 als &#039;&#039;false/falsch&#039;&#039; interpretiert, andere numerische Werte als &#039;&#039;true/wahr&#039;&#039;. Man kann mittels &#039;&#039;if ($we)&#039;&#039; also ganz einfach prüfen, ob Wochenende ist und entsprechend steuern (oder auch nicht). Das o.a. Beispiel kann entsprechend ergänzt werden, so dass am Wochenende nicht um 7 Uhr das Rollo nach oben gefahren wird:&lt;br /&gt;
&lt;br /&gt;
  define RolloHoch at *07:00 { if (!($we)) { fhem(&amp;amp;quot;set Rollo hoch&amp;amp;quot;);; } }&lt;br /&gt;
&lt;br /&gt;
Das &#039;&#039;!&#039;&#039; in der if-Abfrage negiert den dahinter folgenden Ausdruck in der Klammer, quasi ein &amp;quot;ist nicht Wochenende&amp;quot;. Der Inhalt der äußeren geschweiften Klammern stellt echten Perl-Code dar (der hinter jeder Anweisung gerne ein Semikolon stehen hat, das in FHEM durch ein weiteres Semikolon [http://de.wikipedia.org/wiki/Maskierungszeichen maskiert/escaped] werden muss). Aus dem Perl-Code kann man mittels des Befehls &#039;&#039;fhem()&#039;&#039; wiederum FHEM-Code ausführen (hier der Befehl, um das Rollo nach oben zu fahren). Das (Doppel-)Semikolon ist in diesem Beispiel nicht zwingend notwendig, da es sich nur um eine einzige (und somit letzte) Anweisung handelt - man sollte sich jedoch aneignen, jede Anweisung im Perl-Code mit einem (Doppel-)Semikolon abzuschließen (eine schließende geschweifte Klammer stellt auch das Ende eine Anweisung bzw. eines Anweisungsblocks dar).&lt;br /&gt;
&lt;br /&gt;
== Feiertage mittels holiday-Datei ==&lt;br /&gt;
Samstags und Sonntags bleibt das Rollo nun unten und man kann länger schlafen. Um diesen Komfort auch an Feiertagen zu haben, können in FHEM mittels &#039;&#039;holiday&#039;&#039;-Dateien Feiertage definiert werden. Sinnvollerweise erstellt man sich für sein jeweiliges Bundesland eine eigene Datei, die Definitionen für feste Feiertage (z.B. Weihnachten oder der Tag der Deutschen Einheit) und solche in Abhängigkeit zu Ostern (z.B. Ostermontag oder Pfingsten, im Rheinland auch der Karneval) beinhaltet. Eine gutes Beispiel mit Erklärung findet sich in der [http://fhem.de/Heimautomatisierung-mit-fhem.pdf FHEM-Übersicht für Anfänger].&lt;br /&gt;
Nachdem beispielsweise die &#039;&#039;NRW_Feiertag.holiday&#039;&#039;-Datei im FHEM-Ordner erstellt/abgelegt wurde, kann diese in die Konfiguration eingebunden werden. Mittels &#039;&#039;holiday2we&#039;&#039; können die darin definierten Feiertage mit der Variable &#039;&#039;$we&#039;&#039; &amp;quot;verheiratet&amp;quot; werden. &#039;&#039;if ($we)&#039;&#039; ist danach immer wahr, sobald Wochenende oder ein Feiertag ist:&lt;br /&gt;
&lt;br /&gt;
  attr global holiday2we NRW_Feiertag&lt;br /&gt;
  define NRW_Feiertag holiday&lt;br /&gt;
&lt;br /&gt;
== Feiertage mittels Internet-Kalender ==&lt;br /&gt;
Theoretisch kann man in o.a. Datei auch seine persönlichen Urlaube oder die Schulferien definieren. Hier eignet sich jedoch die &#039;&#039;Calendar&#039;&#039;-Funktion wesentlich besser. V.a. die Schulferien der einzelnen Bundesländer sind im Internet (z.B. unter [http://www.ferienwiki.de ferienwiki.de]) als iCal-Datei verfügbar und können wie folgt in FHEM eingebunden werden:&lt;br /&gt;
&lt;br /&gt;
  define NRW_Ferien Calendar ical url https://www.ferienwiki.de/exports/ferien/2017/de/baden-wuerttemberg 86400&lt;br /&gt;
&lt;br /&gt;
Das Intervall von 86400 Sekunden (entspricht 24 Stunden) für die Aktualisierung der Schulferien sollte im Normalbetrieb mehr als ausreichen. Wenn eigene Kalender (z.B. bei Google) für Urlaubstage genutzt werden, muss man individuell abwägen, wie oft dieser aktualisiert werden soll.&lt;br /&gt;
&lt;br /&gt;
Um nun diesen Kalender nun nutzen zu können, benötigt FHEM einen &#039;&#039;dummy&#039;&#039;, der entsprechend abgefragt werden kann:&lt;br /&gt;
&lt;br /&gt;
  define NRW_Ferientag dummy&lt;br /&gt;
  define NRW_Ferien.notify notify NRW_Ferien { \&lt;br /&gt;
         fhem &amp;amp;quot;set BW_Ferientag &amp;amp;quot; . (ReadingsVal(&amp;amp;quot;BW_Ferien&amp;amp;quot;, &amp;amp;quot;modeStart&amp;amp;quot;, &amp;amp;quot;&amp;amp;quot;) =~ &amp;amp;quot;schulferien&amp;amp;quot;&amp;amp;#160;? 1: 0) }&lt;br /&gt;
&lt;br /&gt;
Der &#039;&#039;BW_Ferientag&#039;&#039; ist in diesem Beispiel der angesprochene &#039;&#039;dummy&#039;&#039; und kann mittels &#039;&#039;Value(&amp;quot;BW_Ferientag&amp;quot;)&#039;&#039; abgefragt werden. Im &#039;&#039;notify&#039;&#039; wird der Wert gesetzt, sobald der Kalender aktualisiert wird: Eine &#039;&#039;1&#039;&#039; für einen Tag, an dem der Text &amp;quot;schulferien&amp;quot; in einem Ereignis vorkommt, das sich im &#039;&#039;modeStart&#039;&#039;Modus (vgl. [http://www.fhem.de/commandref.html#Calendar CommandRef] - &#039;&#039;The start time has passed but the end time of the calendar event is not yet reached.&#039;&#039;) befindet, ansonsten &#039;&#039;0&#039;&#039;. Das Vorkommen des Textes ist in den Ereignissen der oben genutzten Quelle immer der Fall.&lt;br /&gt;
&lt;br /&gt;
Um ein Rollo nun weder am Wochenende, an Feiertagen, noch zu Schulferien morgens hochfahren zu lassen, lautet das Beispiel:&lt;br /&gt;
&lt;br /&gt;
  define RolloHoch at *07:00 { if (&amp;amp;#160;!($we) &amp;amp;amp;&amp;amp;amp;&amp;amp;#160;!(Value(&amp;amp;quot;BW_Ferientag&amp;amp;quot;)) ) { fhem(&amp;amp;quot;set Rollo hoch&amp;amp;quot;);; } }&lt;br /&gt;
&lt;br /&gt;
Ausgehend von diesem Artikel ist unter [[Google-Kalender zur Steuerung von Dummies]] eine Vorgehensweise zur&lt;br /&gt;
Steuerung von FHEM mit dem Google-Kalender veröffentlicht.&lt;br /&gt;
&lt;br /&gt;
Diese Methode unterstützt jedoch nicht die Feiertagserkennung des [http://fhem.de/commandref_DE.html#DOIF DOIF]-Moduls, speziell im Abschnitt [http://fhem.de/commandref_DE.html#DOIF_Wochentagsteuerung Wochentagssteuerung]. Hier wird nur der Status der &#039;&#039;$we&#039;&#039;-Variable abgefragt und die Methode mit dem eigenen Holiday-Kalender empfohlen.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Motivierte linke Hände</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SSCAM_-_Steuerung_von_Kameras_in_Synology_Surveillance_Station&amp;diff=17650</id>
		<title>SSCAM - Steuerung von Kameras in Synology Surveillance Station</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SSCAM_-_Steuerung_von_Kameras_in_Synology_Surveillance_Station&amp;diff=17650"/>
		<updated>2016-12-04T12:52:51Z</updated>

		<summary type="html">&lt;p&gt;Motivierte linke Hände: Ab SVS Version 8 anderes Verzeichnis für Snapshots&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuerung von Kameras in Synology Surveillance Station&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=SSCam&lt;br /&gt;
|ModForumArea=Sonstiges&lt;br /&gt;
|ModTechName=49_SSCam.pm&lt;br /&gt;
|ModOwner=nasseeder1 (Forum: DS_Starter)}}&lt;br /&gt;
&lt;br /&gt;
== Zweckbeschreibung ==&lt;br /&gt;
&lt;br /&gt;
Mit diesem Modul können Operationen von in der Synology Surveillance Station (SVS) definierten Kameras ausgeführt werden.&lt;br /&gt;
Es basiert auf der SVS API und unterstützt die SVS ab Version 7. &lt;br /&gt;
Zur Zeit werden folgende Funktionen unterstützt: &lt;br /&gt;
&lt;br /&gt;
* Start einer Aufnahme&lt;br /&gt;
* Stop einer Aufnahme (per Befehl bzw. automatisch nach Ablauf der Aufnahmedauer)&lt;br /&gt;
* Aufnehmen eines Schnappschusses und Ablage in der Synology Surveillance Station&lt;br /&gt;
* Deaktivieren einer Kamera in Synology Surveillance Station&lt;br /&gt;
* Aktivieren einer Kamera in Synology Surveillance Station&lt;br /&gt;
* Steuerung der Belichtungsmodi Tag, Nacht bzw. Automatisch&lt;br /&gt;
* Umschaltung der Ereigniserkennung durch Kamera, durch SVS oder deaktiviert&lt;br /&gt;
* Abfrage von Kameraeigenschaften (auch mit Polling) sowie den Eigenschaften des installierten SVS-Paketes&lt;br /&gt;
* Bewegen an eine vordefinierte Preset-Position (bei PTZ-Kameras)&lt;br /&gt;
* Start einer vordefinierten Überwachungstour (bei PTZ-Kameras)&lt;br /&gt;
* Positionieren von PTZ-Kameras zu absoluten X/Y-Koordinaten&lt;br /&gt;
* kontinuierliche Bewegung von PTZ-Kameras&lt;br /&gt;
* auslösen externer Ereignisse 1-10 (Aktionsregel SVS) &lt;br /&gt;
* starten und beenden von Kamera-Livestreams&lt;br /&gt;
* Abruf und Ausgabe der Kamera Streamkeys sowie Stream-Urls (zur Nutzung von Kamera-Livestreams ohne Session Id) &lt;br /&gt;
* abspielen der letzten Aufnahme&lt;br /&gt;
&lt;br /&gt;
Die Aufnahmen stehen in der Synology Surveillance Station (SVS) zur Verfügung und unterliegen, wie jede andere Aufnahme, den in der Synology Surveillance Station eingestellten Regeln.&lt;br /&gt;
So werden zum Beispiel die Aufnahmen entsprechend ihrer Archivierungsfrist gespeichert und dann gelöscht. &lt;br /&gt;
&lt;br /&gt;
Wenn sie über dieses Modul diskutieren oder zur Verbesserung des Moduls beitragen möchten, ist im FHEM-Forum ein Sammelplatz unter:&amp;lt;br&amp;gt;&lt;br /&gt;
{{Link2Forum|Topic=45671.0 |LinkText=49_SSCam: Fragen, Hinweise, Neuigkeiten und mehr rund um dieses Modul}} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung ==&lt;br /&gt;
&lt;br /&gt;
Dieses Modul nutzt das Perl-Modul JSON. Bitte darauf achten dieses Paket zu installieren. (Debian: apt-get install libjson-perl).&lt;br /&gt;
SSCAM verwendet für HTTP-Calls die nichtblockierenden Funktionen von HttpUtils bzw. HttpUtils_NonblockingGet.&lt;br /&gt;
Im DSM bzw. der Synology Surveillance Station muß ein Nutzer für den Zugriff aus FHEM angelegt sein. Die Zugangsdaten für diesen Nutzer werden später über ein Set-Kommando dem angelegten Gerät zugewiesen. &amp;lt;br&amp;gt;&lt;br /&gt;
Nähere Informationen dazu unter [[#Credentials | Credentials]].&lt;br /&gt;
&lt;br /&gt;
Überblick über die Perl-Module welche von SSCam genutzt werden: &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    JSON            &lt;br /&gt;
    Data::Dumper                     &lt;br /&gt;
    MIME::Base64   &lt;br /&gt;
    Time::HiRes    &lt;br /&gt;
    HttpUtils       (FHEM-Modul)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Define ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    define &amp;lt;name&amp;gt; SSCam &amp;lt;Kameraname in SVS&amp;gt; &amp;lt;ServerAddr&amp;gt; [Port]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Definiert eine neue Kamera für SSCam. Zunächst muß diese Kamera in der Synology Surveillance Station 7.0 oder höher eingebunden sein und entsprechend funktionieren.&lt;br /&gt;
&lt;br /&gt;
Das Modul SSCam basiert auf Funktionen der Synology Surveillance Station API.&lt;br /&gt;
Weitere Informationen unter: [http://global.download.synology.com/download/Document/DeveloperGuide/Surveillance_Station_Web_API_v2.0.pdf Web API Guide].&lt;br /&gt;
&lt;br /&gt;
Momentan wird nur das HTTP-Protokoll unterstützt um die Web-Services der Synology DS aufzurufen.&lt;br /&gt;
&lt;br /&gt;
Die Parameter beschreiben im Einzelnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    name :	    der Name des neuen Gerätes in FHEM&lt;br /&gt;
    Kameraname :    Kameraname wie er in der Synology Surveillance Station angegeben ist. Leerzeichen im Namen sind nicht erlaubt !&lt;br /&gt;
    ServerAddr :    die IP-Addresse des Synology Surveillance Station Host. &lt;br /&gt;
                    Achtung: Es sollte kein Servername verwendet werden weil DNS-Aufrufe in FHEM blockierend sind&lt;br /&gt;
    Port :	    optional - der Port des Synology Surveillance Station Host. &lt;br /&gt;
                    Wenn nicht angegeben, wird der Standardport 5000 gesetzt(nur HTTP)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
          define CamCP SSCAM Carport 192.168.2.20 [5000]&lt;br /&gt;
&lt;br /&gt;
Wird eine neue Kamera definiert, wird diesem Device zunächst eine Standardaufnahmdauer von 15 zugewiesen. &lt;br /&gt;
Über das Attribut &amp;quot;rectime&amp;quot; kann die Aufnahmedauer für jede Kamera individuell angepasst werden. Der Wert &amp;quot;0&amp;quot; für &amp;quot;rectime&amp;quot; führt zu einer Endlosaufnahme die durch &#039;&#039;&#039;&amp;quot;set &amp;lt;name&amp;gt; off&amp;quot;&#039;&#039;&#039; gestoppt werden muß. Ein Logeintrag mit einem entsprechenden Hinweis auf diesen Umstand wird geschrieben. &lt;br /&gt;
&lt;br /&gt;
Wird das Attribut &amp;quot;rectime&amp;quot; gelöscht, greift wieder der Default-Wert (15s) für die Aufnahmedauer.&lt;br /&gt;
&lt;br /&gt;
Mit dem Befehl &#039;&#039;&#039;&amp;quot;set &amp;lt;name&amp;gt; on [rectime]&amp;quot;&#039;&#039;&#039; wird die Aufnahmedauer temporär festgelegt und überschreibt einmalig sowohl den Defaultwert als auch den Wert des gesetzten Attributs &amp;quot;rectime&amp;quot;. Auch in diesem Fall führt &amp;quot;set &amp;lt;name&amp;gt; on 0&amp;quot; zu einer Daueraufnahme.&lt;br /&gt;
&lt;br /&gt;
Eine eventuell in der SVS eingestellte Dauer der Voraufzeichnung wird weiterhin berücksichtigt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Credentials ===&lt;br /&gt;
&lt;br /&gt;
Nach dem Definieren des Gerätes müssen zuerst die Zugangsparameter gespeichert werden. Das geschieht mit dem Befehl:&lt;br /&gt;
 &lt;br /&gt;
     set &amp;lt;name&amp;gt; credentials &amp;lt;username&amp;gt; &amp;lt;password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Anwender kann in Abhängigkeit der beabsichtigten einzusetzenden Funktionen einen Nutzer im DSM bzw. in der Surveillance Station einrichten.&lt;br /&gt;
Ist der DSM-Nutzer der Gruppe Administratoren zugeordnet, hat er auf alle Funktionen Zugriff. Ohne diese Gruppenzugehörigkeit können nur Funktionen mit niedrigeren Rechtebedarf ausgeführt werden. Die benötigten Mindestrechte der Funktionen sind in der Tabelle weiter unten aufgeführt.&lt;br /&gt;
Alternativ zum DSM-Nutzer kann ein in der SVS angelegter Nutzer verwendet werden. Auch in diesem Fall hat ein Nutzer vom Typ Manager das Recht alle Funktionen auszuführen, wobei der Zugriff auf bestimmte Kameras/ im Privilegienprofil beschränkt werden kann (siehe Hilfefunktion in SVS).&lt;br /&gt;
Als Best Practice wird vorgeschlagen jeweils einen User im DSM und einen in der SVS anzulegen.&lt;br /&gt;
&lt;br /&gt;
* DSM-User als Mitglied der Admin-Gruppe: uneingeschränkter Test aller Modulfunktionen -&amp;gt; session:DSM&lt;br /&gt;
* SVS-User als Manager oder Betrachter: angepasstes Privilegienprofil -&amp;gt; session: SurveillanceStation &lt;br /&gt;
&lt;br /&gt;
Über das Attribut &amp;quot;session&amp;quot; kann ausgewählt werden, ob die Session mit dem DSM oder der SVS augebaut werden soll.&lt;br /&gt;
Erfolgt der Session-Aufbau mit dem DSM, stehen neben der SVS Web-API auch darüber hinaus gehende API Zugriffe zur Verfügung die unter Umständen zur Verarbeitung benötigt werden.&lt;br /&gt;
&lt;br /&gt;
Nach der Gerätedefinition ist die Grundeinstellung &amp;quot;Login in das DSM&amp;quot;, d.h. es können Credentials mit Admin-Berechtigungen genutzt werden um zunächst alle Funktionen der Kameras testen zu können. Danach können die Credentials z.B. in Abhängigkeit der benötigten Funktionen auf eine SVS-Session mit entsprechend beschränkten Privilegienprofil umgestellt werden.&lt;br /&gt;
&lt;br /&gt;
Die nachfolgende Aufstellung zeigt die Mindestanforderungen der jeweiligen Modulfunktionen an die Nutzerrechte. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
* set ... on	       session: ServeillanceStation - Betrachter mit erweiterten Privileg &amp;quot;manuelle Aufnahme&amp;quot;&lt;br /&gt;
* set ... off	       session: ServeillanceStation - Betrachter mit erweiterten Privileg &amp;quot;manuelle Aufnahme&amp;quot;&lt;br /&gt;
* set ... snap	       session: ServeillanceStation - Betrachter&lt;br /&gt;
* set ... disable      session: ServeillanceStation - Manager&lt;br /&gt;
* set ... enable       session: ServeillanceStation - Manager&lt;br /&gt;
* set ... expmode      session: ServeillanceStation - Manager &lt;br /&gt;
* set ... motdetsc     session: ServeillanceStation - Manager &lt;br /&gt;
* set ... goPreset     session: ServeillanceStation - Betrachter mit Privileg Objektivsteuerung der Kamera&lt;br /&gt;
* set ... runPatrol    session: ServeillanceStation - Betrachter mit Privileg Objektivsteuerung der Kamera&lt;br /&gt;
* set ... goAbsPTZ     session: ServeillanceStation - Betrachter mit Privileg Objektivsteuerung der Kamera&lt;br /&gt;
* set ... move         session: ServeillanceStation - Betrachter mit Privileg Objektivsteuerung der Kamera&lt;br /&gt;
* set ... runView      session: ServeillanceStation - Betrachter mit Privileg Liveansicht für Kamera&lt;br /&gt;
* set ... stopView     -&lt;br /&gt;
* set ... credentials  -&lt;br /&gt;
* set ... extevent     session: DSM - Nutzer Mitglied von Admin-Gruppe &lt;br /&gt;
* get ... caminfoall   session: ServeillanceStation - Betrachter &lt;br /&gt;
* get ... eventlist    session: ServeillanceStation - Betrachter&lt;br /&gt;
* get ... svsinfo      session: ServeillanceStation - Betrachter&lt;br /&gt;
* get ... svsinfo      session: ServeillanceStation - Betrachter &lt;br /&gt;
* get ... stmUrlPath   session: ServeillanceStation - Betrachter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== HTTP-Timeout setzen ===&lt;br /&gt;
&lt;br /&gt;
Alle Funktionen dieses Moduls verwenden HTTP-Aufrufe gegenüber der SVS Web API. &amp;lt;br&amp;gt;&lt;br /&gt;
Der Standardwert für den HTTP-Timeout beträgt 4 Sekunden. &lt;br /&gt;
Durch Setzen des Attributes &amp;quot;httptimeout&amp;quot; &amp;gt; 0 kann dieser Wert bei Bedarf entsprechend den technischen Gegebenheiten angepasst werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Set ==&lt;br /&gt;
&lt;br /&gt;
Es gibt zur Zeit folgende Optionen für &amp;quot;set &amp;lt;name&amp;gt; ...&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;on [rectime]&amp;quot;:                                startet eine Aufnahme. Die Aufnahme wird automatisch nach Ablauf der Zeit [rectime] &lt;br /&gt;
                                                   gestoppt.&lt;br /&gt;
                                                   mit rectime = 0 wird eine Daueraufnahme gestartet die durch &amp;quot;set &amp;lt;name&amp;gt; off&amp;quot; &lt;br /&gt;
                                                   wieder gestoppt werden muß.&lt;br /&gt;
    &amp;quot;off&amp;quot; :                                        stoppt eine laufende Aufnahme manuell oder durch die Nutzung anderer Events &lt;br /&gt;
                                                   (z.B. über at, notify)&lt;br /&gt;
    &amp;quot;snap&amp;quot;:                                        löst einen Schnappschuß der entsprechenden Kamera aus und speichert ihn in der SVS&lt;br /&gt;
    &amp;quot;disable&amp;quot;:                                     deaktiviert eine Kamera in der Surveillance Station&lt;br /&gt;
    &amp;quot;enable&amp;quot;:                                      aktiviert eine Kamera in der Surveillance Station&lt;br /&gt;
    &amp;quot;credentials &amp;lt;username&amp;gt; &amp;lt;password&amp;gt;&amp;quot;:           speichert die Zugangsinformationen&lt;br /&gt;
    &amp;quot;expmode [ day | night | auto ]&amp;quot;:              aktiviert den Belichtungsmodus Tag, Nacht oder Automatisch&lt;br /&gt;
    &amp;quot;extevent [ 1-10 ]&amp;quot;: 	                   löst das externe Ereignis 1-10 aus (Aktionsregeleditor in SVS) &lt;br /&gt;
    &amp;quot;motdetsc [ by_camera | by_SVS | disable ]&amp;quot;:   schaltet die Bewegungserkennung in den gewünschten Modus &lt;br /&gt;
                                                   (durch Kamera, SVS, oder deaktiviert) &lt;br /&gt;
    &amp;quot;goPreset &amp;lt;Presetname&amp;gt;&amp;quot;:                       fährt eine PTZ-Kamera zu einer vordefinierten Preset-Position&lt;br /&gt;
    &amp;quot;runPatrol &amp;lt;Patrolname&amp;gt;&amp;quot;:                      startet eine vordefinierte Überwachungstour einer PTZ-Kamera&lt;br /&gt;
    &amp;quot;goAbsPTZ [ X Y | up | down | left | right ]&amp;quot;: positioniert eine PTZ-Kamera zu einer X/Y-Koordinate oder in Richtung up/down/left/right&lt;br /&gt;
    &amp;quot;move [ up | down | left | right | dir_X ]&amp;quot;:   startet kontinuerliche Bewegung einer PTZ-Kamera in Richtung up/down/left/right bzw. dir_X&lt;br /&gt;
    &amp;quot;runView [image | lastrec | lastrec_open | &lt;br /&gt;
     link | link_open &amp;lt;room&amp;gt;]&amp;quot;:                    startet einen Livestream bzw. die letzte Aufnahme als eingbettetes Image, als Link &lt;br /&gt;
                                                   oder öffnet diesen Medienstream sofort &lt;br /&gt;
    &amp;quot;stopView&amp;quot;:                                    Gegenteil von &amp;quot;runView&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &lt;br /&gt;
=== set &amp;lt;name&amp;gt; [on [rectime] | off] === &lt;br /&gt;
&lt;br /&gt;
Der Befehl &amp;quot;set &amp;lt;name&amp;gt; on&amp;quot; startet eine Aufnahme. Die Standardaufnahmedauer beträgt 15 Sekunden. Sie kann mit dem Attribut &amp;quot;rectime&amp;quot; individuell festgelegt werden. Die im Attribut (bzw. im Standard) hinterlegte Aufnahmedauer kann einmalig mit &amp;quot;set &amp;lt;name&amp;gt; on [rectime]&amp;quot; überschrieben werden.&lt;br /&gt;
Die Aufnahme stoppt automatisch nach Ablauf der Zeit &amp;quot;rectime&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Ein Sonderfall ist der Start einer Daueraufnahme mit &amp;quot;set &amp;lt;name&amp;gt; on 0&amp;quot; bzw. dem Attributwert &amp;quot;rectime = 0&amp;quot;. In diesem Fall wird eine Daueraufnahme gestartet die explizit wieder mit dem Befehl &amp;quot;&amp;quot;set &amp;lt;name&amp;gt; off&amp;quot; gestoppt werden muß.&lt;br /&gt;
&lt;br /&gt;
Das Aufnahmeverhalten kann weiterhin mit dem Attribut &amp;quot;recextend&amp;quot; wie folgt beeinflusst werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Attribut &amp;quot;recextend = 0&amp;quot; bzw. nicht gesetzt (Standard):&#039;&#039;&#039;&lt;br /&gt;
* wird eine Aufnahme mit z.B. rectime=22 gestartet, wird kein weiterer Startbefehl für eine Aufnahme akzeptiert bis diese gestartete Aufnahme nach 22 Sekunden beendet ist. Ein Hinweis wird bei verbose=3 im Logfile protokolliert.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Attribut &amp;quot;recextend = 1&amp;quot; gesetzt:&#039;&#039;&#039;&lt;br /&gt;
* eine zuvor gestartete Aufnahme wird bei einem erneuten &amp;quot;set &amp;lt;name&amp;gt; on&amp;quot;-Befehl mit der Aufnahmezeit &amp;quot;rectime&amp;quot; neu parametrisiert. Das bedeutet, dass der Timer für den automatischen Stop auf den Wert &amp;quot;rectime&amp;quot; neu gesetzt wird. Dieser Vorgang wiederholt sich mit jedem Start-Befehl. Dadurch verlängert sich eine laufende Aufnahme bis kein Start-Inpuls mehr registriert wird.&lt;br /&gt;
&lt;br /&gt;
* eine zuvor gestartete Endlos-Aufnahme wird mit einem erneuten &amp;quot;set &amp;lt;name&amp;gt; on&amp;quot;-Befehl nach der Aufnahmezeit &amp;quot;rectime&amp;quot; gestoppt (Timerneustart). Ist dies nicht gewünscht, ist darauf zu achten dass bei der Verwendung einer Endlos-Aufnahme das Attribut &amp;quot;recextend&amp;quot; nicht verwendet wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Beispiele für einfache Operationen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   set &amp;lt;name&amp;gt; on [rectime] :   startet die Aufnahme der Kamera &amp;lt;name&amp;gt;. &lt;br /&gt;
   set &amp;lt;name&amp;gt; off :            stoppt die Aufnahme der Kamera &amp;lt;name&amp;gt;&lt;br /&gt;
   set &amp;lt;name&amp;gt; disable :        deaktiviert die Kamera &amp;lt;name&amp;gt; in der Surveillance Station&lt;br /&gt;
   set &amp;lt;name&amp;gt; enable :         aktiviert die Kamera &amp;lt;name&amp;gt; in der Surveillance Station&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In der SVS kann unter Aufnahmeeinstellungen der Kamera eine Vor-Aufnahmezeit eingestellt werden. Die Einstellung wird von der SVS bezüglich der Gesamtaufnahmezeit automatisch mit berücksichtigt. &lt;br /&gt;
&lt;br /&gt;
Eine eingestellte Vor-Aufnahmezeit von z.B. 10s und eine rectime von 20s führt zu einer Gesamtaufnahmezeit von 30s (zzgl. Prozesszeit zur Befehlsabarbeitung).&lt;br /&gt;
&lt;br /&gt;
=== set &amp;lt;name&amp;gt; snap === &lt;br /&gt;
&lt;br /&gt;
Ein Schnappschuß kann ausgelöst werden durch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  set &amp;lt;name&amp;gt; snap&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Soll eine Reihe Schnappschüsse ausgelöst werden wenn eine Aufnahme startet, kann das durch folgendes notify geschehen.&lt;br /&gt;
Wird der Start der Kamera CamHE1 ausgelöst (vorher Attribut event-on-change-reading -&amp;gt; &amp;quot;Record&amp;quot; setzen), werden 3 Snapshots im Abstand von 2 Sekunden getriggert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define he1_snap_3 notify CamHE1:Record.*on define h3 at +*{3}00:00:02 set CamHE1 snap&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Triggern von 2 Schnappschüssen der Kamera &amp;quot;CamHE1&amp;quot; im Abstand von 6 Sekunden nachdem der Bewegungsmelder &amp;quot;MelderHE1&amp;quot; einen Event gesendet hat, kann z.B. mit folgendem notify geschehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define he1_snap_2 notify MelderHE1:on.* define h2 at +*{2}00:00:06 set CamHE1 snap&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es wird die ID des letzten Snapshots als Wert der Variable &amp;quot;LastSnapId&amp;quot; in den Readings der Kamera ausgegeben.&lt;br /&gt;
&lt;br /&gt;
=== set &amp;lt;name&amp;gt; [enable] [disable] === &lt;br /&gt;
&lt;br /&gt;
Um eine Liste von Kameras oder alle Kameras (mit Regex) zum Beispiel um 21:46 zu deaktivieren / zu aktivieren zwei Beispiele mit at:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define a13 at 21:46 set CamCP1,CamFL,CamHE1,CamTER disable (enable)&lt;br /&gt;
 define a14 at 21:46 set Cam.* disable (enable)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Etwas komfortabler gelingt das Schalten aller Kameras über einen Dummy.&lt;br /&gt;
Zunächst wird der Dummy angelegt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define allcams dummy&lt;br /&gt;
 attr allcams eventMap on:enable off:disable&lt;br /&gt;
 attr allcams room Cams&lt;br /&gt;
 attr allcams webCmd enable:disable&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durch Verknüpfung mit zwei angelegten notify, jeweils ein notify für &amp;quot;enable&amp;quot; und &amp;quot;disable&amp;quot;, kann man durch Schalten des Dummys auf &amp;quot;enable&amp;quot; bzw. &amp;quot;disable&amp;quot; alle Kameras auf einmal aktivieren bzw. deaktivieren.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define all_cams_disable notify allcams:.*off set CamCP1,CamFL,CamHE1,CamTER disable&lt;br /&gt;
 attr all_cams_disable room Cams&lt;br /&gt;
 &lt;br /&gt;
 define all_cams_enable notify allcams:on set CamCP1,CamFL,CamHE1,CamTER enable&lt;br /&gt;
 attr all_cams_enable room Cams&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== set &amp;lt;name&amp;gt; expmode [day] [night] [auto] === &lt;br /&gt;
&lt;br /&gt;
Mit diesem Befehl kann der Belichtungsmodus der Kameras gesetzt werden. Dadurch wird z.B. das Verhalten der Kamera-LED&#039;s entsprechend gesteuert. Die erfolgreiche Umschaltung wird durch das Reading CamExposureMode (&amp;quot;get ... caminfoall&amp;quot;) reportet.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Die erfolgreiche Ausführung dieser Funktion ist davon abhängig ob die SVS diese Funktionalität der Kamera unterstützt. Ist in SVS -&amp;gt; IP-Kamera -&amp;gt; Optimierung -&amp;gt; Belichtungsmodus das Feld für den Tag/Nachtmodus grau hinterlegt, ist nicht von einer lauffähigen Unterstützung dieser Funktion auszugehen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== set &amp;lt;name&amp;gt; motdetsc [camera] [SVS] [disable] (geändert ab Rev 11284) ===&lt;br /&gt;
&lt;br /&gt;
Der Befehl &amp;quot;motdetsc&amp;quot; (steht für &amp;quot;motion detection source&amp;quot;) schaltet die Bewegungserkennung in den gewünschten Modus.&lt;br /&gt;
Wird die Bewegungserkennung durch die Kamera / SVS ohne weitere Optionen eingestellt, werden die momentan gültigen Bewegungserkennungsparameter der Kamera / SVS beibehalten. &lt;br /&gt;
Die erfolgreiche Ausführung der Operation lässt sich u.a. anhand des Status von SVS -&amp;gt; IP-Kamera -&amp;gt; Ereigniserkennung -&amp;gt; Bewegung nachvollziehen.&lt;br /&gt;
&lt;br /&gt;
Für die Bewegungserkennung durch SVS bzw. durch Kamera können weitere Optionen angegeben werden. Die verfügbaren Optionen bezüglich der Bewegungserkennung durch SVS sind &amp;quot;Empfindlichkeit&amp;quot; und &amp;quot;Schwellwert&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 set &amp;lt;name&amp;gt; motdetsc SVS [Empfindlichkeit] [Schwellwert]     # Befehlsmuster&lt;br /&gt;
 set &amp;lt;name&amp;gt; motdetsc SVS 91 30                               # setzt die Empfindlichkeit auf 91 und den Schwellwert auf 30&lt;br /&gt;
 set &amp;lt;name&amp;gt; motdetsc SVS 0 40                                # behält gesetzten Wert für Empfindlichkeit bei, setzt Schwellwert auf 40&lt;br /&gt;
 set &amp;lt;name&amp;gt; motdetsc SVS 15                                  # setzt die Empfindlichkeit auf 15, Schwellwert bleibt unverändert &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wird die Bewegungserkennung durch die Kamera genutzt, stehen die Optionen &amp;quot;Empfindlichkeit&amp;quot;, &amp;quot;Objektgröße&amp;quot; und &amp;quot;Prozentsatz für Auslösung&amp;quot; zur Verfügung. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 set &amp;lt;name&amp;gt; motdetsc camera [Empfindlichkeit] [Schwellwert] [Prozentsatz]    # Befehlsmuster&lt;br /&gt;
 set &amp;lt;name&amp;gt; motdetsc camera 89 0 20                                          # setzt die Empfindlichkeit auf 89, Prozentsatz auf 20&lt;br /&gt;
 set &amp;lt;name&amp;gt; motdetsc camera 90 40 10                                         # setzt Empfindlichkeit auf 90, Schwellwert auf 40, &lt;br /&gt;
                                                                               Prozentsatz auf 10&lt;br /&gt;
 set &amp;lt;name&amp;gt; motdetsc camera 30                                               # setzt die Empfindlichkeit auf 30, andere Werte bleiben &lt;br /&gt;
                                                                               unverändert &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es ist immer die Reihenfolge der Optionswerte zu beachten. Nicht gewünschte Optionen sind mit &amp;quot;0&amp;quot; zu besetzen sofern danach Optionen folgen deren Werte verändert werden sollen (siehe Beispiele oben). Der Zahlenwert der Optionen beträgt 1 - 99 (außer Sonderfall &amp;quot;0&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Die jeweils verfügbaren Optionen unterliegen der Funktion der Kamera und der Unterstützung durch die SVS. Es können jeweils nur die Optionen genutzt werden die in SVS -&amp;gt; Kamera bearbeiten -&amp;gt; Ereigniserkennung zur Verfügung stehen. Weitere Infos sind der Online-Hilfe zur SVS zu entnehmen.&lt;br /&gt;
&lt;br /&gt;
Über den Befehl &amp;quot;get ... caminfoall&amp;quot; wird auch das Reading &amp;quot;CamMotDetSc&amp;quot; aktualisiert welches die gegenwärtige Einstellung der Bewegungserkennung dokumentiert. Es werden nur die Parameter und Parameterwerte angezeigt, welche die SVS aktiv unterstützt. Die Kamera selbst kann weiterführende Einstellmöglichkeiten besitzen.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CamMotDetSc    SVS, sensitivity: 76, threshold: 55&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== set &amp;lt;name&amp;gt; goPreset &amp;lt;Preset&amp;gt; === &lt;br /&gt;
  &lt;br /&gt;
Mit diesem Kommando können PTZ-Kameras in eine vordefininierte Position bewegt werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Die Preset-Positionen müssen dazu zunächst in der Synology Surveillance Station angelegt worden sein. Das geschieht in der PTZ-Steuerung im IP-Kamera Setup.&lt;br /&gt;
Die Presets werden über das Kommando &amp;quot;set &amp;amp;lt;name&amp;amp;gt; getinfo&amp;quot; eingelesen (geschieht bei restart von FHEM automatisch). Der Einlesevorgang kann durch ein Kamerapolling&lt;br /&gt;
regelmäßig wiederholt werden. Ein langes Pollingintervall ist in diesem Fall empfehlenswert da die Presetpositionen sich nur im Fall der Neuanlage bzw. Änderung verändern werden. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
Hier ein Beispiel einer PTZ-Steuerung in Abhängigkeit eines IR-Melder Events:&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
    define CamFL.Preset.Wandschrank notify MelderTER:on.* set CamFL goPreset Wandschrank, ;; define CamFL.Preset.record &lt;br /&gt;
    at +00:00:10 set CamFL on 5 ;;;; define s3 at +*{3}00:00:05 set CamFL snap ;; define CamFL.Preset.back at +00:00:30 set CamFL goPreset Home&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
Funktionsweise: &amp;lt;br&amp;gt;&lt;br /&gt;
Der IR-Melder &amp;quot;MelderTER&amp;quot; registriert eine Bewegung. Daraufhin wird die Kamera CamFL in die Preset-Position &amp;quot;Wandschrank&amp;quot; gebracht. Eine Aufnahme mit Dauer von 5 Sekunden startet 10 Sekunden&lt;br /&gt;
später. Da die Voraufnahmezeit der Kamera 10s beträgt (vgl. Reading &amp;quot;CamPreRecTime&amp;quot;), startet die effektive Aufnahme wenn der Kameraschwenk beginnt. &amp;lt;br&amp;gt;&lt;br /&gt;
Mit dem Start der Aufnahme werden drei Schnappschüsse im Abstand von 5 Sekunden angefertigt. &amp;lt;br&amp;gt;&lt;br /&gt;
Nach einer Zeit von 30 Sekunden fährt die Kamera wieder zurück in die &amp;quot;Home&amp;quot;-Position. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
Ein Auszug aus dem Log verdeutlicht den Ablauf:&lt;br /&gt;
  &lt;br /&gt;
&amp;lt;pre&amp;gt;  &lt;br /&gt;
   2016.02.04 15:02:14 2: CamFL - Camera Flur_Vorderhaus has moved to position &amp;quot;Wandschrank&amp;quot;&lt;br /&gt;
   2016.02.04 15:02:24 2: CamFL - Camera Flur_Vorderhaus Recording with Recordtime 5s started&lt;br /&gt;
   2016.02.04 15:02:29 2: CamFL - Snapshot of Camera Flur_Vorderhaus has been done successfully&lt;br /&gt;
   2016.02.04 15:02:30 2: CamFL - Camera Flur_Vorderhaus Recording stopped&lt;br /&gt;
   2016.02.04 15:02:34 2: CamFL - Snapshot of Camera Flur_Vorderhaus has been done successfully&lt;br /&gt;
   2016.02.04 15:02:39 2: CamFL - Snapshot of Camera Flur_Vorderhaus has been done successfully&lt;br /&gt;
   2016.02.04 15:02:44 2: CamFL - Camera Flur_Vorderhaus has moved to position &amp;quot;Home&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== set &amp;lt;name&amp;gt; runPatrol &amp;lt;Patrolname&amp;gt; === &lt;br /&gt;
&lt;br /&gt;
Dieses Kommando startet die vordefinierterte Überwachungstour einer PTZ-Kamera. &amp;lt;br&amp;gt;&lt;br /&gt;
Die Überwachungstouren müssen dazu zunächst in der Synology Surveillance Station angelegt worden sein. Das geschieht in der PTZ-Steuerung im IP-Kamera Setup -&amp;gt; PTZ-Steuerung -&amp;gt; Überwachung.&lt;br /&gt;
&lt;br /&gt;
Die Überwachungstouren (Patrols) werden über das Kommando &amp;quot;get &amp;lt;name&amp;gt; caminfoall&amp;quot; eingelesen, welches beim Restart von FHEM automatisch abgearbeitet wird. Der Einlesevorgang kann durch ein Kamerapolling regelmäßig wiederholt werden. Ein langes Pollingintervall ist in diesem Fall empfehlenswert, da sich die Überwachungstouren nur im Fall der Neuanlage bzw. Änderung verändern werden.&lt;br /&gt;
&lt;br /&gt;
Nähere Informationen zur Anlage von Überwachungstouren sind in der Hilfe zur Surveillance Station enthalten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== set &amp;lt;name&amp;gt; goAbsPTZ [ X Y | up | down | left | right ] === &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mit diesem Kommando wird eine PTZ-Kamera in Richtung einer wählbaren absoluten X/Y-Koordinate bewegt, oder zur maximalen Absolutposition in Richtung up/down/left/right.&lt;br /&gt;
Die Option ist nur für Kameras verfügbar die das Reading &amp;quot;CapPTZAbs=true&amp;quot; (die Fähigkeit für PTZAbs-Aktionen) besitzen. Die Eigenschaften der Kamera kann mit &amp;quot;get &amp;lt;name&amp;gt; caminfoall&amp;quot; abgefragt werden.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel für Ansteuerung absoluter X/Y-Koordinaten: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 set &amp;lt;name&amp;gt; goAbsPTZ 120 450&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Dieses Beispiel bewegt die Kameralinse in die Position X=120 und Y=450. &amp;lt;br&amp;gt;&lt;br /&gt;
Der Wertebereich ist dabei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 X = 0 - 640      (0 - 319 bewegt nach links, 321 - 640 bewegt nach rechts, 320 bewegt die Linse nicht)&lt;br /&gt;
 Y = 0 - 480      (0 - 239 bewegt nach unten, 241 - 480 bewegt nach oben, 240 bewegt die Linse nicht) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Linse kann damit in kleinsten bis sehr großen Schritten in die gewünschte Richtung bewegt werden. Dieser Vorgang muß ggf. mehrfach wiederholt werden um die Kameralinse in die gewünschte Position zu bringen. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Soll die Bewegung mit der maximalen Schrittweite erfolgen, kann zur Vereinfachung der Befehl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 set &amp;lt;name&amp;gt; goAbsPTZ up [down ] [left] [right]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
verwendet werden. Die Optik wird in diesem Fall mit der größt möglichen Schrittweite zur Absolutposition in der angegebenen Richtung bewegt. Auch in diesem Fall muß der Vorgang ggf. mehrfach wiederholt werden um die Kameralinse in die gewünschte Position zu bringen. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== set &amp;lt;name&amp;gt; move [ up | down | left | right | dir_X ] [Sekunden] === &lt;br /&gt;
&lt;br /&gt;
Mit diesem Kommando wird eine kontinuierliche Bewegung der PTZ-Kamera gestartet. Neben den vier Grundrichtungen up/down/left/right stehen auch Zwischenwinkelmaße &amp;quot;dir_X&amp;quot; zur Verfügung. Die Feinheit dieser Graduierung ist von der Kamera abhängig und kann dem Reading &amp;quot;CapPTZDirections&amp;quot; entnommen werden.&lt;br /&gt;
&lt;br /&gt;
Das Bogenmaß von 360 Grad teilt sich durch den Wert von &amp;quot;CapPTZDirections&amp;quot; und beschreibt die Bewegungsrichtungen beginnend mit &amp;quot;0=rechts&amp;quot; entgegen dem Uhrzeigersinn. D.h. bei einer Kamera mit &amp;quot;CapPTZDirections = 8&amp;quot; bedeutet dir_0 = rechts, dir_2 = oben, dir_4 = links, dir_6 = unten bzw. dir_1, dir_3, dir_5 und dir_7 die entsprechenden Zwischenrichtungen. Die möglichen Bewegungsrichtungen bei Kameras mit &amp;quot;CapPTZDirections = 32&amp;quot; sind dementsprechend kleinteliger.&lt;br /&gt;
&lt;br /&gt;
Im Gegensatz zum &amp;quot;set &amp;lt;name&amp;gt; goAbsPTZ&amp;quot;-Befehl startet der Befehl &amp;quot;set &amp;lt;name&amp;gt; move&amp;quot; eine kontinuierliche Bewegung bis ein Stop-Kommando empfangen wird. Das Stop-Kommando wird nach Ablauf der optional anzugebenden Zeit [Sekunden] ausgelöst. Wird diese Laufzeit nicht angegeben, wird implizit Sekunde = 1 gesetzt.&lt;br /&gt;
&lt;br /&gt;
Beispiele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 set &amp;lt;name&amp;gt; move up 0.5          : bewegt die Linse 0,5 Sekunden (zzgl. Prozesszeit) nach oben (zzgl. Prozesszeit)&lt;br /&gt;
 set &amp;lt;name&amp;gt; move dir_1 1.5       : bewegt die Linse 1,5 Sekunden (zzgl. Prozesszeit) nach rechts-oben &lt;br /&gt;
 set &amp;lt;name&amp;gt; move dir_20 0.7      : bewegt die Linse 1,5 Sekunden (zzgl. Prozesszeit) nach links-unten bei &amp;quot;CapPTZDirections = 32&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== set &amp;lt;name&amp;gt; runView [ image | lastrec | lastrec_open | link | link_open &amp;lt;room&amp;gt;] === &lt;br /&gt;
&lt;br /&gt;
Mit &amp;quot;image, link, link_open&amp;quot; Es wird ein Livestream (mjpeg-Stream) der Kamera, entweder als eingebettetes Image oder als generierter Link, gestartet.&lt;br /&gt;
Der Zugriff auf die letzte Aufnahme einer Kamera kann über die Zusätze &amp;quot;lastrec&amp;quot; bzw. &amp;quot;lastrec_open&amp;quot; erfolgen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  attr &amp;lt;name&amp;gt; htmlattr target=_blank width=&amp;quot;500&amp;quot; height=&amp;quot;375&amp;quot;&lt;br /&gt;
  attr &amp;lt;name&amp;gt; htmlattr target=_blank width=500,height=375&lt;br /&gt;
  attr &amp;lt;name&amp;gt; htmlattr width=700,height=525,top=200,left=300&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Verhalten des Livestreams im FHEMWEB kann durch Angaben im Attribut &amp;quot;htmlattr&amp;quot; beeinflusst werden.&lt;br /&gt;
Mit diesen Attributwerten öffnet der Link als weiteres Fenster/Browsertab. Wird der Stream als Image gestartet, ändert sich die Größe entsprechend der Angaben von Width und Height.&lt;br /&gt;
Das Kommando &amp;lt;b&amp;gt;&amp;quot;set &amp;lt;name&amp;gt; runView link_open&amp;quot;&amp;lt;/b&amp;gt; startet den Livestreamlink sofort in einem neuen Browsertab (longpoll=1 muß für WEB gesetzt sein).&lt;br /&gt;
Dabei wird für jede aktive FHEM-Session eine Fensteröffnung initiiert. Soll dieses Verhalten geändert werden, kann &amp;lt;b&amp;gt;&amp;quot;set &amp;lt;name&amp;gt; runView link_open &amp;lt;room&amp;gt;&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
verwendet werden um das Öffnen des Browserwindows in einem beliebigen, in einer FHEM-Session angezeigten Raum &amp;lt;room&amp;gt;, zu initiieren.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das gesetzte Attribut &amp;quot;livestreamprefix&amp;quot; überschreibt im Reading &amp;quot;LiveStreamUrl&amp;quot; die Angaben für Protokoll, Servername und Port. Damit kann z.B. die LiveStreamUrl für den Versand und externen Zugriff auf die SVS modifiziert werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 attr &amp;lt;name&amp;gt; livestreamprefix https://&amp;lt;Servername&amp;gt;:&amp;lt;Port&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Livestream wird über das Kommando &amp;quot;set &amp;lt;name&amp;gt; stopView&amp;quot; wieder beendet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== set &amp;lt;name&amp;gt; extevent [ 1-10 ]  === &lt;br /&gt;
&lt;br /&gt;
Dieses Kommando triggert ein externes Ereignis (1-10) in der SVS. Die Aktionen, die dieses Ereignis auslöst, sind zuvor in dem Aktionsregeleditor der SVS einzustellen. Es stehen die Ereignisse 1-10 zur Verfügung. In der Banchrichtigungs-App der SVS können auch Email, SMS oder Mobil (DS-Cam) Nachrichten ausgegeben werden wenn ein externes Ereignis ausgelöst wurde. Nähere Informationen dazu sind in der Hilfe zum Aktionsregeleditor zu finden. Der verwendete User benötigt Admin-Rechte in einer DSM-Session.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Get ==&lt;br /&gt;
&lt;br /&gt;
Mit SSCam können die Eigenschaften der Kameras aus der Surveillance Station abgefragt werden. Dazu steht der Befehl zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 get &amp;lt;name&amp;gt; caminfoall&lt;br /&gt;
 get &amp;lt;name&amp;gt; eventlist&lt;br /&gt;
 get &amp;lt;name&amp;gt; stmUrlPath&lt;br /&gt;
 get &amp;lt;name&amp;gt; svsinfo&lt;br /&gt;
 get &amp;lt;name&amp;gt; snapfileinfo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit dem Befehl &amp;quot;get &amp;lt;name&amp;gt; caminfoall&amp;quot; werden abhängig von der Art der Kamera (z.B. Fix- oder PTZ-Kamera) die verfügbaren Eigenschaften ermittelt und als Readings zur Verfügung gestellt.&lt;br /&gt;
So wird zum Beispiel das Reading &amp;quot;Availability&amp;quot; auf &amp;quot;disconnected&amp;quot; gesetzt falls die Kamera von der Surveillance Station getrennt wird und kann für weitere Verarbeitungen genutzt werden.&lt;br /&gt;
Durch &amp;quot;get &amp;lt;name&amp;gt; eventlist&amp;quot; wird das Reading &amp;quot;CamEventNum&amp;quot; aktualisiert, welches die Gesamtanzahl der registrierten Kameraevents enthält.&lt;br /&gt;
Mit &amp;quot;get &amp;lt;name&amp;gt; snapfileinfo&amp;quot; wird der Filename des letzten Schnapschusses ermittelt. Der Befehl wird implizit mit &amp;quot;get &amp;lt;name&amp;gt; snap&amp;quot; ausgeführt. &lt;br /&gt;
&lt;br /&gt;
Der Befehl &amp;quot;get &amp;lt;name&amp;gt; svsinfo&amp;quot; ist eigentlich nicht von der Kamera abhängig, sondern ermittelt vielmehr allgemeine Informationen zur installierten SVS-Version und andere Eigenschaften.&lt;br /&gt;
Die Funktionen &amp;quot;caminfoall&amp;quot; und &amp;quot;svsinfo&amp;quot; werden einmalig automatisch beim Start von FHEM ausgeführt um steuerungsrelevante Informationen zu sammeln.&lt;br /&gt;
Es ist darauf zu achten dass vorher die Credentials gespeichert wurden !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;get &amp;lt;name&amp;gt; stmUrlPath&#039;&#039;&#039;&lt;br /&gt;
  &lt;br /&gt;
Mit diesem Kommando wird der aktuelle Streamkey der Kamera abgerufen und das Reading mit dem Key-Wert gefüllt. Dieser Streamkey kann verwendet werden um eigene Aufrufe eines Livestreams aufzubauen (siehe Beispiel). Wenn das Attribut &amp;quot;showStmInfoFull&amp;quot; gesetzt ist, werden zusaätzliche Stream-Informationen wie &amp;quot;StmKeyUnicst&amp;quot;, &amp;quot;StmKeymjpegHttp&amp;quot; ausgegeben. Diese Readings enthalten die gültigen Stream-Pfade zu einem Livestream und können z.B. versendet und von einer entsprechenden Anwendung ohne session Id geöffnet werden. Wenn das Attribut &amp;quot;livestreamprefix&amp;quot; (Format: &amp;quot;http(s)://&amp;amp;lt;hostname&amp;amp;gt;&amp;amp;lt;port&amp;amp;gt;) gesetzt ist, wird der Servername und Port überschrieben soweit es sinnvoll ist. Wird Polling der Kameraeigenschaften genutzt, wird die stmUrlPath-Funktion automatisch mit ausgeführt.&lt;br /&gt;
  &lt;br /&gt;
Beispiel für den Aufbau eines Http-Calls zu einem Livestream mit StmKey: &lt;br /&gt;
  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http(s)://&amp;amp;lt;hostname&amp;amp;gt;&amp;amp;lt;port&amp;amp;gt;/webapi/entry.cgi?api=SYNO.SurveillanceStation.VideoStreaming&amp;amp;version=1&amp;amp;method=Stream&amp;amp;format=mjpeg&amp;amp;cameraId=5StmKey=&amp;quot;31fd87279976d89bb98409728cced890&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
cameraId (INTERNAL), StmKey müssen durch gültige Werte ersetzt werden.&lt;br /&gt;
  &lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039;&lt;br /&gt;
  &lt;br /&gt;
Falls der Stream-Aufruf versendet und von extern genutzt wird sowie hostname / port durch gültige Werte ersetzt und die Routerports entsprechend geöffnet werden, ist darauf zu achten dass diese sensiblen Daten nicht durch unauthorisierte Personen für den Zugriff genutzt werden können !   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Polling der Kameraeigenschaften:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Die Abfrage der Kameraeigenschaften erfolgt automatisch, wenn das Attribut &amp;quot;pollcaminfoall&amp;quot; (siehe Attribute) mit einem Wert &amp;gt; 10 gesetzt wird. Per Default ist das Attribut &amp;quot;pollcaminfoall&amp;quot; nicht gesetzt und das automatische Polling nicht aktiv. Der Wert dieses Attributes legt das Intervall der Abfrage in Sekunden fest. Ist das Attribut nicht gesetzt oder &amp;lt; 10 wird kein automatisches Polling gestartet bzw. gestoppt wenn vorher der Wert &amp;gt; 10 gesetzt war.&lt;br /&gt;
&lt;br /&gt;
Das Attribut &amp;quot;pollcaminfoall&amp;quot; wird durch einen Watchdog-Timer überwacht. Änderungen des Attributwertes werden alle 90 Sekunden ausgewertet und entsprechend umgesetzt. Eine Änderung des Pollingstatus / Pollingintervalls wird im FHEM-Logfile protokolliert. Diese Protokollierung kann durch Setzen des Attributes &amp;quot;pollnologging&amp;quot; abgeschaltet werden. Dadurch kann ein unnötiges Anwachsen des Logs vermieden werden. Ab verbose=4 wird allerdings trotz gesetzten &amp;quot;pollnologging&amp;quot;-Attribut ein Log des Pollings zu Analysezwecken aktiviert.&lt;br /&gt;
&lt;br /&gt;
Wird FHEM neu gestartet, wird bei aktivierten Polling der ersten Datenabruf innerhalb 60s nach dem Start ausgeführt.  &lt;br /&gt;
&lt;br /&gt;
Der Status des automatischen Pollings wird durch das Reading &amp;quot;PollState&amp;quot; signalisiert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  PollState = Active     -    automatisches Polling wird mit Intervall entsprechend &amp;lt;pollcaminfoall&amp;gt; ausgeführt&lt;br /&gt;
  PollState = Inactive   -    automatisches Polling wird nicht ausgeführt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Bedeutung der Readingwerte ist unter Readings beschrieben.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweise:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Wird Polling eingesetzt, sollte das Intervall nur so kurz wie benötigt eingestellt werden da die ermittelten Werte überwiegend statisch sind.&lt;br /&gt;
Das eingestellte Intervall sollte nicht kleiner sein als die Summe aller HTTP-Verarbeitungszeiten. Pro Pollingaufruf und Kamera werden ca. 10 - 20 Http-Calls gegen die Surveillance Station abgesetzt.&lt;br /&gt;
&lt;br /&gt;
Bei einem eingestellten HTTP-Timeout (siehe Attribut) &amp;quot;httptimeout&amp;quot;) von 4 Sekunden kann die theoretische Verarbeitungszeit nicht höher als 80 Sekunden betragen.&lt;br /&gt;
In dem Beispiel sollte man das Pollingintervall mit einem Sicherheitszuschlag auf nicht weniger 160 Sekunden setzen.&lt;br /&gt;
Ein praktikabler Richtwert könnte zwischen 600 - 1800 (s) liegen.&lt;br /&gt;
&lt;br /&gt;
Sind mehrere Kameras in SSCam definiert, sollte &amp;quot;pollcaminfoall&amp;quot; nicht bei allen Kameras auf exakt den gleichen Wert gesetzt werden um Verarbeitungsengpässe und dadurch versursachte potentielle Fehlerquellen bei der Abfrage der Synology Surveillance Station zu vermeiden.&lt;br /&gt;
Ein geringfügiger Unterschied zwischen den Pollingintervallen der definierten Kameras von z.B. 1s kann bereits als ausreichend angesehen werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Readings ==&lt;br /&gt;
&lt;br /&gt;
Über den Pollingmechanismus bzw. durch Abfrage mit &amp;quot;Get&amp;quot; werden Readings bereitgestellt, deren Bedeutung in der nachfolgenden Tabelle dargestellt sind. Die übermittelten Readings können in Abhängigkeit des Kameratyps variieren.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;  &lt;br /&gt;
* Availability       - Verfügbarkeit der Kamera (disabled, enabled, disconnected, other)&lt;br /&gt;
* CamEventNum        - liefert die Gesamtanzahl der in SVS registrierten Events der Kamera&lt;br /&gt;
* CamExposureControl - zeigt den aktuell eingestellten Typ der Belichtungssteuerung&lt;br /&gt;
* CamExposureMode    - aktueller Belichtungsmodus (Day, Night, Auto, Schedule, Unknown)&lt;br /&gt;
* CamIP              - IP-Adresse der Kamera&lt;br /&gt;
* CamLiveMode        - Quelle für Live-Ansicht (DS, Camera)&lt;br /&gt;
* CamModel           - Kameramodell&lt;br /&gt;
* CamPort            - IP-Port der Kamera&lt;br /&gt;
* CamPreRecTime      - Dauer der der Voraufzeichnung in Sekunden (Einstellung in SVS)&lt;br /&gt;
* CamRecShare        - gemeinsamer Ordner auf der DS für Aufnahmen&lt;br /&gt;
* CamRecVolume       - Volume auf der DS für Aufnahmen&lt;br /&gt;
* CamVendor          - Kamerahersteller Bezeichnung&lt;br /&gt;
* CamVideoFlip       - Ist das Video gedreht  &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
* CamVideoMirror     - Ist das Video gespiegelt  &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
* CapAudioOut        - Fähigkeit der Kamera zur Audioausgabe über Surveillance Station (false/true)&lt;br /&gt;
* CapChangeSpeed     - Fähigkeit der Kamera verschiedene Bewegungsgeschwindigkeiten auszuführen&lt;br /&gt;
* CapPTZAbs          - Fähigkeit der Kamera für absolute PTZ-Aktionen &lt;br /&gt;
* CapPTZAutoFocus    - Fähigkeit der Kamera für Autofokus Aktionen&lt;br /&gt;
* CapPTZDirections   - die verfügbaren PTZ-Richtungen der Kamera&lt;br /&gt;
* CapPTZFocus        - Art der Kameraunterstützung für Fokussierung&lt;br /&gt;
* CapPTZHome         - Unterstützung der Kamera für Home-Position&lt;br /&gt;
* CapPTZIris         - Unterstützung der Kamera für Iris-Aktion &lt;br /&gt;
* CapPTZPan          - Unterstützung der Kamera für Pan-Aktion&lt;br /&gt;
* CapPTZTilt         - Unterstützung der Kamera für Tilt-Aktion&lt;br /&gt;
* CapPTZZoom         - Unterstützung der Kamera für Zoom-Aktion&lt;br /&gt;
* DeviceType         - Kameratyp (Camera, Video_Server, PTZ, Fisheye)&lt;br /&gt;
* Error              - Meldungstext des letzten Fehlers&lt;br /&gt;
* Errorcode          - Fehlercode des letzten Fehlers&lt;br /&gt;
* LastSnapFilename   - der Filename des letzten Schnapschusses&lt;br /&gt;
* LastSnapId         - die ID des letzten Schnapschusses&lt;br /&gt;
* LastUpdateTime     - Datum / Zeit der letzten Aktualisierung durch &amp;quot;caminfoall&amp;quot;&lt;br /&gt;
* LiveStreamUrl      - die LiveStream-Url wenn der Stream gestartet ist. (Attribut &amp;quot;showStmInfoFull&amp;quot; muss gesetzt sein)&lt;br /&gt;
* Patrols            - in Surveillance Station voreingestellte Überwachungstouren (bei PTZ-Kameras)&lt;br /&gt;
* PollState          - zeigt den Status des automatischen Pollings an&lt;br /&gt;
* Presets            - in Surveillance Station voreingestellte Positionen (bei PTZ-Kameras)&lt;br /&gt;
* Record             - Aufnahme läuft = Start, keine Aufnahme = Stop&lt;br /&gt;
* StmKey             - aktueller StreamKey. Kann zum öffnen eines Livestreams ohne Session Id genutzt werden. &lt;br /&gt;
* StmKeyUnicst       - Uni-cast Stream Pfad der Kamera. ((Attribut &amp;quot;showStmInfoFull&amp;quot; muss gesetzt sein)&lt;br /&gt;
* StmKeymjpegHttp    - Mjpeg Stream Pfad (über http) der Kamera. (Attribut &amp;quot;showStmInfoFull&amp;quot; muss gesetzt sein)&lt;br /&gt;
* SVScustomPortHttp  - benutzerdefinierter Port der Surveillance Station (HTTP) im DSM-Anwendungsportal (get mit &amp;quot;svsinfo&amp;quot;)&lt;br /&gt;
* SVScustomPortHttps - benutzerdefinierter Port der Surveillance Station (HTTPS) im DSM-Anwendungsportal (get mit &amp;quot;svsinfo&amp;quot;)&lt;br /&gt;
* SVSlicenseNumber   - die Anzahl der installierten Kameralizenzen (get mit &amp;quot;svsinfo&amp;quot;)&lt;br /&gt;
* SVSuserPriv        - die effektiven Rechte des verwendeten Users nach dem Login (get mit &amp;quot;svsinfo&amp;quot;)&lt;br /&gt;
* SVSversion         - die Paketversion der installierten Surveillance Station (get mit &amp;quot;svsinfo&amp;quot;)&lt;br /&gt;
* UsedSpaceMB        - durch Aufnahmen der Kamera belegter Plattenplatz auf dem Volume&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Attribute ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;debugactivetoken&#039;&#039;&#039; - wenn gesetzt wird der Status des Active-Tokens gelogged - nur für Debuggung, nicht im normalen Betrieb benutzen&lt;br /&gt;
  &lt;br /&gt;
* &#039;&#039;&#039;httptimeout&#039;&#039;&#039; - Timeout-Wert für HTTP-Aufrufe zur Synology Surveillance Station, Default: 4 Sekunden (wenn httptimeout = &amp;quot;0&amp;quot; oder nicht gesetzt)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;htmlattr&#039;&#039;&#039; - ergänzende Angaben zur Livestream-Url um das Verhalten wie Bildgröße zu beeinflussen&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;livestreamprefix&#039;&#039;&#039; - überschreibt die Angaben zu Protokoll, Servernamen und Port zur Weiterverwendung der Livestreamadresse als z.B. externer Link. Die Angabe muss in der Form &amp;quot;http(s)://&amp;lt;servername&amp;gt;:&amp;lt;port&amp;gt;&amp;quot; erfolgen.&lt;br /&gt;
&lt;br /&gt;
*  &#039;&#039;&#039;noQuotesForSID&#039;&#039;&#039; - dieses Attribut kann in bestimmten Fällen die Fehlermeldung &amp;quot;402 - permission denied&amp;quot; vermeiden und ein login ermöglichen. (normalerweise nicht zu setzen)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;pollcaminfoall&#039;&#039;&#039; - Intervall der automatischen Eigenschaftsabfrage (Polling) einer Kamera (kleiner 10: kein Polling, größer 10: Polling mit Intervall)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;pollnologging&#039;&#039;&#039; - 0 bzw. nicht gesetzt = Logging Gerätepolling aktiv (default), 1 = Logging Gerätepolling inaktiv&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;rectime&#039;&#039;&#039; - festgelegte Aufnahmezeit wenn eine Aufnahme gestartet wird. Mit rectime = 0 wird eine Endlosaufnahme gestartet. Ist &amp;quot;rectime&amp;quot; nicht gesetzt, wird der Defaultwert von 15s verwendet.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;session&#039;&#039;&#039; - Auswahl der Login-Session. Nicht gesetzt oder &amp;quot;DSM&amp;quot; -&amp;gt; session wird mit DSM aufgebaut (Standard). &amp;quot;SurveillanceStation&amp;quot; -&amp;gt; Session-Aufbau erfolgt mit SVS &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;simu_SVSversion&#039;&#039;&#039; - simuliert eine andere SVS-Version. NUR FÜR DEBUGGING, nicht im normalen Betrieb zu nutzen !&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;showStmInfoFull&#039;&#039;&#039; - zusaätzliche Streaminformationen wie LiveStreamUrl, StmKeyUnicst, StmKeymjpegHttp werden ausgegeben&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;verbose&#039;&#039;&#039;&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  Es werden verschiedene Verbose-Level unterstützt.&lt;br /&gt;
  Dies sind im Einzelnen:&lt;br /&gt;
&lt;br /&gt;
        0   -   Start/Stop-Ereignisse werden geloggt&lt;br /&gt;
        1   -   Fehlermeldungen werden geloggt&lt;br /&gt;
        2   -   Meldungen über wichtige Ereignisse oder Alarme &lt;br /&gt;
        3   -   gesendete Kommandos werden geloggt&lt;br /&gt;
        4   -   gesendete und empfangene Daten werden geloggt&lt;br /&gt;
        5   -   alle Ausgaben zur Fehleranalyse werden geloggt. ACHTUNG: unter Umständen werden sehr viele Daten in das Logfile geschrieben!&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
weitere Attribute:&lt;br /&gt;
&lt;br /&gt;
* [http://fhem.de/commandref_DE.html#readingFnAttributes readingFnAttributes]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Das Modul bzw. eine Gerätedefinition deaktivieren ==&lt;br /&gt;
&lt;br /&gt;
Mit dem Attribut &amp;quot;disable&amp;quot; kann das Modul bzw. eine Gerätedefinition deaktiviert werden. Im Gegensatz zum Befehl &amp;quot;set ... disable&amp;quot; wird nicht die Kamera an sich deaktiviert, sondern lediglich das Gerätemodul. In diesem Fall werden keine Funktionen mehr ausgeführt.&lt;br /&gt;
Wird das Modul deaktiviert, werden die folgenden Readings gesetzt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
state:         inactive     &lt;br /&gt;
Availability:  ???&lt;br /&gt;
PollState:     Inactive   &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ist für eine Kamera Polling aktiviert, wird diese Aktivität abgeschaltet. Nach Reaktivierung des Gerätemoduls wird das Polling automatisch wieder fortgesetzt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lösungsbeispiele und Ansätze für verschiedene Aufgabenstellungen ==&lt;br /&gt;
&lt;br /&gt;
=== Eine Übersicht mit Hilfe von readingsGroup ===&lt;br /&gt;
&lt;br /&gt;
Mit den umfangreichen Möglichkeiten des Moduls [[readingsGroup]] kann ein FHEM-Widget nach eigenen Vorstellungen erstellt werden. Hierbei ist es möglich sowohl einen Überblick über die Status der Kameras zu erhalten als auch Steuerungsaktivitäten vorzusehen. Das nachfolgende Beipiel soll als Anregung dafür dienen. Weitere Informationen unter der [http://fhem.de/commandref.html#readingsGroup commandref] zu readingsGroup.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; &lt;br /&gt;
Die folgenden Beispiele enthalten keine Maskierungen oder Verdopplungen für ; und Zeilenende, sondern sind so angegeben, wie sie im Web Interface im Befehls-Eingabefeld, nach Klick auf DEF und im Attribut-Eingabefeld eingegeben werden. Mehrere Leerzeichen innerhalb von &amp;lt; &amp;gt; sind als   &amp;lt;code&amp;gt;&amp;lt;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;gt;&amp;lt;/code&amp;gt; zu kodieren.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | [[Bild:RgSSCam.jpg|thumb|500px|links|Kamerastatus und Steuerung]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:50%&amp;quot; |&amp;lt;code&amp;gt;define Cams_All_States readingsGroup &amp;lt;%it_camera&amp;gt;,&amp;lt;Verfügbar&amp;gt;,&amp;lt; &amp;gt;,&amp;lt;Status&amp;gt;,&amp;lt; &amp;gt;,&amp;lt;Erkennung&amp;gt;,&amp;lt; &amp;gt;,&amp;lt;letzte Aufnahme&amp;gt;,&amp;lt; &amp;gt;,&amp;lt;bel. Platz (MB)&amp;gt;,&amp;lt; &amp;gt;,&amp;lt;letzte Aktualisierung&amp;gt;,&amp;lt; &amp;gt;,&amp;lt;Modul Deaktivierung&amp;gt;,&amp;lt; &amp;gt;,&amp;lt;Image&amp;gt; TYPE=SSCam:Availability,&lt;br /&gt;
&amp;lt;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;gt;,state,&amp;lt;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;gt;,CamMotDetSc,&amp;lt;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;gt;,CamLastRecTime,&amp;lt;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;gt;,UsedSpaceMB,&lt;br /&gt;
&amp;lt;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;gt;,LastUpdateTime,&amp;lt;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;gt;,?!disable,&amp;lt;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;gt;,&amp;lt;%Start&amp;gt;,&amp;lt;%Stop&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| ReadingsGoup anlegen. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Cams_All_States valueIcon {&#039;Availability.enabled&#039; =&amp;gt; &#039;remotecontrol/black_btn_GREEN&#039;,&lt;br /&gt;
&#039;Availability.disabled&#039; =&amp;gt; &#039;remotecontrol/black_btn_RED&#039;,&lt;br /&gt;
&#039;state.inactive&#039; =&amp;gt; &#039;StandBy&#039;,&lt;br /&gt;
&#039;state&#039; =&amp;gt; &#039;%devStateIcon&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| In Abhängigkeit vom Wert der Kameraverfügbarkeit und des state-Readings entsprechende Icons anzeigen. Wird das Modul deaktiviert, wird ein Standby-Icon angezeigt unabhängig davon ob in der Kameradefinition ein devStateIcon hinterlegt wurde.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Cams_All_States valueStyle {if($READING eq &amp;quot;Availability&amp;quot; &amp;amp;&amp;amp; $VALUE eq &amp;quot;enabled&amp;quot;){ &#039; style=&amp;quot;color:green&amp;quot; &#039; }&lt;br /&gt;
elsif( $READING eq &amp;quot;Availability&amp;quot; &amp;amp;&amp;amp; $VALUE eq  &amp;quot;disabled&amp;quot;){ &#039; style=&amp;quot;color:red&amp;quot; &#039; }&lt;br /&gt;
elsif( $READING eq &amp;quot;CamMotDetSc&amp;quot; &amp;amp;&amp;amp; $VALUE =~ /SVS.*/ ){ &#039; style=&amp;quot;color:orange&amp;quot; &#039; }&lt;br /&gt;
elsif( $READING eq &amp;quot;CamMotDetSc&amp;quot; &amp;amp;&amp;amp; $VALUE eq &amp;quot;disabled&amp;quot;){ &#039; style=&amp;quot;color:LimeGreen&amp;quot; &#039; }&lt;br /&gt;
elsif( $READING eq &amp;quot;CamMotDetSc&amp;quot; &amp;amp;&amp;amp; $VALUE =~ /Cam.*/ ){ &#039; style=&amp;quot;color:SandyBrown&amp;quot; &#039; }}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Farbgestaltung der Texte in Anhängigkeit der Werte setzen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Cams_All_States valueFormat {($READING eq &amp;quot;CamMotDetSc&amp;quot; &amp;amp;&amp;amp; $VALUE eq &amp;quot;disabled&amp;quot;) ? &amp;quot;external&amp;quot; : $VALUE}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Wenn die Quelle der Bewegungserkennung auf &amp;quot;disabled&amp;quot; gestellt wurde, soll &amp;quot;external&amp;quot; in der Übersicht angezeigt werden weil die Bewegungserkennung in dem Fall durch IR-Melder durchgeführt wird.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Cams_All_States valueColumns { &#039;Image&#039; =&amp;gt; &#039;colspan=&amp;quot;2&amp;quot;&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Überschrift &amp;quot;Image&amp;quot; soll sich über die letzten zwei Spalten strecken. Es gilt sowohl für &amp;quot;Start&amp;quot; und &amp;quot;Stop&amp;quot; .&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Cams_All_States nameStyle style=&amp;quot;color:black;font-weight:bold&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Überschriften sollen schwarz und fett sein.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Cams_All_States commands { &#039;Availability.enabled&#039; =&amp;gt; &#039;set $DEVICE disable&#039;,&lt;br /&gt;
&#039;Availability.disabled&#039; =&amp;gt; &#039;set $DEVICE enable&#039;,&lt;br /&gt;
&#039;Cams_All_States.Start&#039; =&amp;gt; &#039;set %DEVICE runView image&#039;,&lt;br /&gt;
&#039;Cams_All_States.Stop&#039; =&amp;gt; &#039;set %DEVICE stopView&#039;,&lt;br /&gt;
disable =&amp;gt; &amp;quot;disable:&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Es sollen Kommandos bestimmten Readings / Werten unterlegt werden. Zum Beispiel kann die Kamera mit Klick auf das Availability-Icon disabled werden wenn der Readingswert &amp;quot;enabled&amp;quot; ist. Der Livestream kann mit &amp;quot;Start&amp;quot; in der letzten Spalte gestartet, oder das Modul über eine Auswahl in der Drop-Down-Liste unterhalb von &amp;quot;Modul Deaktivierung&amp;quot; deaktiviert/aktiviert werden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Cams_All_States cellStyle { &amp;quot;c:0&amp;quot; =&amp;gt; &#039;style=&amp;quot;text-align:left;color:green;font-weight:normal&amp;quot;&#039;,&lt;br /&gt;
&amp;quot;c:5&amp;quot; =&amp;gt; &#039;style=&amp;quot;text-align:center;color:green;font-weight:normal&amp;quot;&#039;,&lt;br /&gt;
&amp;quot;c:9&amp;quot; =&amp;gt; &#039;style=&amp;quot;text-align:center;font-weight:normal&amp;quot;&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Formatierung bestimmter Spalten (0,5,9).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Cams_All_States alias Status aller Kameras&amp;lt;/code&amp;gt;&lt;br /&gt;
| Alias setzen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Cams_All_States group Kamerastatus&amp;lt;/code&amp;gt;&lt;br /&gt;
| Gruppenzugehörigkeit setzen. Wird auch für die Anzeige im Dashboard benutzt.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mail mit Snapshot im Anhang und Aufnahmelink versenden (sendemail) ===&lt;br /&gt;
&lt;br /&gt;
Nachfolgendes Beispiel zeigt eine Möglichkeit in Linux mit dem Tool [http://caspian.dotconf.net/menu/Software/SendEmail/ sendemail] eine Mail mit einem Link zu einer Kameraaufnahme und bis zu drei Anhängen zu versenden. Das Tool ist in vielen Repositories erhalten und kann unter Debian (z.B. Ubuntu) installiert werden mittels &amp;lt;code&amp;gt;apt-get install sendemail libio-socket-ssl-perl&amp;lt;/code&amp;gt;.&lt;br /&gt;
Die Mail wird mit einem DOIF Kommando in Abhängigkeit von einer angefertigten Aufnahme angestoßen.&lt;br /&gt;
&lt;br /&gt;
Zunächst die Mailfunktion in der 99_myUtils als Unterroutinen einfügen. Die Funktion ist nicht blockierend (mit Modul Blocking.pm) ausgeführt. Die &amp;quot;\&amp;quot; dienen nachfolgend nur&lt;br /&gt;
zur Kennzeichnung eines Zeilenumbruchs - den Code bitte auf eine Zeile schreiben.&lt;br /&gt;
  &lt;br /&gt;
&amp;lt;source lang=perl&amp;gt;&lt;br /&gt;
# Am Anfang von 99_myUtils hinzufügen&lt;br /&gt;
use Blocking;&lt;br /&gt;
&lt;br /&gt;
##############################################################################&lt;br /&gt;
########        DebianMail  Mail  versenden  nonblocking          ############&lt;br /&gt;
##############################################################################&lt;br /&gt;
&lt;br /&gt;
sub DebianMailnbl {&lt;br /&gt;
&lt;br /&gt;
 my $rcpt = shift;&lt;br /&gt;
 my $subject = shift; &lt;br /&gt;
 my $text = shift;&lt;br /&gt;
 my $attach = shift; &lt;br /&gt;
 my $attach1 = shift; &lt;br /&gt;
 my $attach2 = shift; &lt;br /&gt;
 my $hash-&amp;gt;{NAME_MAIL} = &amp;quot;Debianmail&amp;quot;;&lt;br /&gt;
 my $name = $hash-&amp;gt;{NAME_MAIL};&lt;br /&gt;
&lt;br /&gt;
if ($attach2) {&lt;br /&gt;
    $hash-&amp;gt;{helper}{RUNNING_PID} = BlockingCall(&amp;quot;DebianMailnbl_send&amp;quot;, $name.&amp;quot;|&amp;quot;.$rcpt.&amp;quot;|&amp;quot;.$subject.&amp;quot;|&amp;quot;.$text.&amp;quot;|&amp;quot;.$attach.&amp;quot; \&lt;br /&gt;
    |&amp;quot;.$attach1.&amp;quot;|&amp;quot;.$attach2, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
} elsif ($attach1) {&lt;br /&gt;
    $hash-&amp;gt;{helper}{RUNNING_PID} = BlockingCall(&amp;quot;DebianMailnbl_send&amp;quot;, $name.&amp;quot;|&amp;quot;.$rcpt.&amp;quot;|&amp;quot;.$subject.&amp;quot;|&amp;quot;.$text.&amp;quot;|&amp;quot;.$attach.&amp;quot;|&amp;quot; \&lt;br /&gt;
   .$attach1, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
} else {&lt;br /&gt;
    $hash-&amp;gt;{helper}{RUNNING_PID} = BlockingCall(&amp;quot;DebianMailnbl_send&amp;quot;, $name.&amp;quot;|&amp;quot;.$rcpt.&amp;quot;|&amp;quot;.$subject.&amp;quot;|&amp;quot;.$text.&amp;quot;|&amp;quot;.$attach,&lt;br /&gt;
     &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
######################################################&lt;br /&gt;
########       Mailfunktion nonblocking           &lt;br /&gt;
######################################################&lt;br /&gt;
&lt;br /&gt;
sub DebianMailnbl_send {&lt;br /&gt;
 my ($string) = @_;&lt;br /&gt;
 my ($name, $rcpt, $subject, $text, $attach, $attach1, $attach2) = split(&amp;quot;\\|&amp;quot;, $string);&lt;br /&gt;
 my $ret = &amp;quot;&amp;quot;;&lt;br /&gt;
 my $sender = &amp;quot;&amp;lt;Sendername&amp;gt;\@&amp;lt;Domäne&amp;gt;&amp;quot;; &lt;br /&gt;
 my $konto = &amp;quot;&amp;lt;Mailkonto&amp;quot;;&lt;br /&gt;
 my $passwrd = &amp;quot;&amp;lt;Mailkontopasswort&amp;gt;&amp;quot;;&lt;br /&gt;
 my $provider = &amp;quot;&amp;lt;Mailserver&amp;gt;&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
if ($attach2) {&lt;br /&gt;
    $ret .= qx(sendEmail -f &#039;$sender&#039; -t &#039;$rcpt&#039; -u &#039;$subject&#039; -m &#039;$text&#039; -a &#039;$attach&#039; -a &#039;$attach1&#039; -a &#039;$attach2&#039; -s &#039;$provider&#039; \&lt;br /&gt;
    -xu &#039;$konto&#039; -xp &#039;$passwrd&#039; -o tls=no -o message -charset=utf-8 -o message-content-type=text/plain );&lt;br /&gt;
} elsif ($attach1) {&lt;br /&gt;
    $ret .= qx(sendEmail -f &#039;$sender&#039; -t &#039;$rcpt&#039; -u &#039;$subject&#039; -m &#039;$text&#039; -a &#039;$attach&#039; -a &#039;$attach1&#039; -s &#039;$provider&#039; -xu &#039;$konto&#039; \&lt;br /&gt;
    -xp &#039;$passwrd&#039; -o tls=no -o message-charset=utf-8 -o message-content-type=text/plain );&lt;br /&gt;
} else {&lt;br /&gt;
    $ret .= qx(sendEmail -f &#039;$sender&#039; -t &#039;$rcpt&#039; -u &#039;$subject&#039; -m &#039;$text&#039; -a &#039;$attach&#039; -s &#039;$provider&#039; -xu &#039;$konto&#039; -xp &#039;$passwrd&#039; \&lt;br /&gt;
    -o tls=no -o message-charset=utf-8 -o message-content-type=text/plain );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
 # remove CR from return-string &lt;br /&gt;
 $ret =~ s,[\r\n]*,,g;    &lt;br /&gt;
&lt;br /&gt;
 Log3 $name, 3, &amp;quot;$name - sendEmail returned: $ret&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die TLS Verschlüsselung (ehem. SSL) zu nutzen, dann tls=auto verwenden.&lt;br /&gt;
&lt;br /&gt;
Falls der Body-Text in einem (Android-)Mailer auf dem Handy nicht gezeigt wird, kann evtl. der Parameter &#039;&#039;&#039;-o message-content-type=html&#039;&#039;&#039; helfen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== Versand triggern - Beispiel mit DOIF ====&lt;br /&gt;
Der Mailversand wird in dem Beispiel mit einem DOIF angetriggert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define CamHE1.email DOIF ([CamHE1:&amp;quot;CamLastRec&amp;quot;]) ({DebianMailnbl (&#039;&amp;lt;Empfänger&amp;gt;@&amp;lt;Domäne&amp;gt;&#039;,&#039;Bewegungsalarm CamHE1&#039;,&#039;Eine Bewegung wurde an der Haustür registriert. &lt;br /&gt;
Aufnahmelink: [CamHE1:VideoFolder]/[CamHE1:CamLastRec]&#039;,&#039;/media/sf_surveillance/@Snapshot/[CamHE1:LastSnapFilename]&#039;)})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wird eine Aufnahme der Kamera CamHE1 beendet, wird integriert der Befehl &amp;quot;get .. eventlist&amp;quot; ausgeführt. Dadurch aktualisiert sich das Reading &amp;quot;CamLastRec&amp;quot;.&lt;br /&gt;
Dieser Event wird genutzt um eine Mail mit einem Link zur Aufnahme und einem während der Aufnahme angelegten Schnappschuß zu versenden.&lt;br /&gt;
Will man einen weiteren Anhang versenden, sähe das DOIF folgendermaßen aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define CamHE1.email DOIF ([CamHE1:&amp;quot;CamLastRec&amp;quot;]) ({DebianMailnbl (&#039;&amp;lt;Empfänger&amp;gt;@&amp;lt;Domäne&amp;gt;&#039;,&#039;Bewegungsalarm CamHE1&#039;,&#039;Eine Bewegung wurde an der Haustür registriert. &lt;br /&gt;
Aufnahmelink: [CamHE1:VideoFolder]/[CamHE1:CamLastRec]&#039;,&#039;/media/sf_surveillance/@Snapshot/[CamHE1:LastSnapFilename]&#039;,&#039;&amp;lt;weiteres File&amp;gt;&#039;)})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Dss Reading &amp;quot;VideoFolder&amp;quot; muß, wie in dem Beispiel zu sehen, dem &amp;quot;CamLastRec&amp;quot; vorangestellt werden um den kompletten Pfad zur Aufnahme zu erhalten. Der versendete Link würde somit etwa den folgenden Aufbau haben:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/volume1/surveillance/Carport/20160407PM/Carport20160407-221541-1460060141.mp4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn in einer Mail nach extern versendet wird, ist ein solcher Link wahrscheinlich über eine Anwendung nicht zugreifbar.&lt;br /&gt;
Um den Link dynamisch anzupassen und so den Zugriff von extern über z.B. einen Webserver zu ermöglichen, kann das Attribut &amp;quot;videofolderMap&amp;quot; verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Wird dieses Attribut auf zum Beispiel ...&amp;lt;pre&amp;gt;&amp;quot;http://&amp;lt;Server&amp;gt;:8083/fhem/svs/Carport/&amp;quot;&amp;lt;/pre&amp;gt; ...gesetzt, ergibt sich folgender Link der in der Mail versendet wird:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://&amp;lt;Server&amp;gt;:8083/fhem/svs/Carport/20160407PM/Carport20160407-221541-1460060141.mp4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In dem obigen Beispiel wird ein FHEM-Webserver verwendet, der zuvor über HTTPSRV (siehe Commandref) angelegt wurde,&lt;br /&gt;
WIe der Webserver angelegt werden kann ist [[SSCAM_-_Steuerung_von_Kameras_in_Synology_Surveillance_Station#Einsatz_FHEM_Webserver_zum_Zugriff_auf_Aufnahmen | hier]] beschrieben. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Nach dem Snapshot wird implizit die Funktion &amp;quot;get ... snapfileinfo&amp;quot; aufgerufen. Diese Funktion trägt den neuen/letzten Snapfilename in das Reading &amp;quot;LastSnapFilename&amp;quot; ein.&lt;br /&gt;
Es ist somit sicherzustellen dass dieses Funktion abgeschlossen ist bevor die Aufnahme per Mail versendet werden soll. Das kann zum Beispiel mit einem Notify auf den Event &amp;quot;&amp;lt;Device&amp;gt;:LastSnapFilename.*&amp;quot; geschehen.&lt;br /&gt;
Sollten das Problem auftreten dass alte Snapshots versendet werden, ist aller Wahrscheinlichkeit nach in dem beschriebenen Sachverhalt die Ursache zu finden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Versand triggern - Beispiel mit Notify ====&lt;br /&gt;
&lt;br /&gt;
Mit diesem Notify wird das Snapshotfile angehängt und auch ein Link zu dem Snapshot mit eingefügt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define CamHE1.email NOTIFY CamHE1:LastSnapFilename.* {DebianMailnbl (&#039;&amp;lt;Empfänger&amp;gt;@&amp;lt;Domäne&amp;gt;&#039;,&#039;Bewegungsalarm CamHE1&#039;, &lt;br /&gt;
&#039;Eine Bewegung wurde an der Haustür registriert. Aufnahmelink: http://&amp;lt;Server&amp;gt;:8083/fhem/snap/&#039;.(ReadingsVal(&amp;quot;CamHE1&amp;quot;,&amp;quot;LastSnapFilename&amp;quot;,&amp;quot;&amp;quot;)), &lt;br /&gt;
&#039;/media/sf_surveillance/@Snapshot/&#039;.(ReadingsVal(&amp;quot;CamHE1&amp;quot;,&amp;quot;LastSnapFilename&amp;quot;,&amp;quot;&amp;quot;)))}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Link in dieser Form aufrufen zu können ist erst ein HTTPSRV anzulegen mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define snapweb HTTPSRV snap /media/sf_surveillance/@Snapshot SVS-Snapshots&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Natürlich muß dabei der Pfad &amp;quot;/media/sf_surveillance/&amp;quot; so angepasst werden dass er dem (gemounteten) SVS-Aufnahmeverzeichnis entspricht.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Einsatz eines Webservers zum Zugriff auf Aufnahmen ===&lt;br /&gt;
&lt;br /&gt;
==== Nutzung des FHEM-internen HTTPSRV Plug-In ====&lt;br /&gt;
&lt;br /&gt;
Ziel der nachfolgenden Beschreibung ist es, eine Möglichkeit darzustellen, um den FHEM Webserver für den Zugriff auf die Aufnahmen der Synology Surveillance Station zu nutzen. &lt;br /&gt;
&lt;br /&gt;
Folgende Ausgangslage wird für das Beispiel als gegeben angenommen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* der gemeinsame Ordner der Surveillance Station (normalerweise &amp;quot;surveillance&amp;quot;) in der Diskstation ist am FHEM-Server gemountet. &amp;lt;br&amp;gt;Für das Beipiel ist das gemountete Verzeichnis: /media/sf_surveillance&lt;br /&gt;
* FHEMWEB ist im Einsatz&lt;br /&gt;
* für das Beispiel ist eine Kamera CamHE1 (SVS-Name: Hauseingang) definiert&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HTTPSRV ist ein Plug-in für FHEMWEB und stellt den Webserver für den Zugriff zur Verfügung. Diese Möglichkeit ist sicherlich für jene Fälle interessant bei denen der Zugriff über einen Verzeichnisdienst nicht möglich oder nicht gewünscht ist (zum Bespiel von extern).&lt;br /&gt;
Es steht auch eine Modul-interne Zugriffsmöglichkeit auf die letzte Aufnahme mit dem Befehl &amp;quot;set CamHE1 runView lastrec (oder lastrec_open)&amp;quot; zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Webserver wird definiert mit:&lt;br /&gt;
&lt;br /&gt;
 define svsweb HTTPSRV svs /media/sf_surveillance WebServer SVS-Aufnahmen&lt;br /&gt;
&lt;br /&gt;
Der definierte Webserver sollte nun links im Seitenmenü unter dem Namen &amp;quot;WebServer SVS-Aufnahmen&amp;quot; erscheinen. Ein Klick auf diesen Link sollte nun die Meldung zeigen:&lt;br /&gt;
&lt;br /&gt;
 File not found: /media/sf_surveillance/index.html&lt;br /&gt;
&lt;br /&gt;
Die Datei index.html existiert natürlich normalerweise nicht im surveillance-Verzeichnis. Der Inhalt des Verzeichnisses &amp;quot;/media/sf_surveillance&amp;quot;, also des surveillance-Stammordners, wird nun mit der Basisadresse ... &amp;lt;pre&amp;gt;http://&amp;lt;FHEM-Server&amp;gt;:8083/fhem/svs/&amp;lt;/pre&amp;gt; ...erreicht.&lt;br /&gt;
&lt;br /&gt;
Alle Aufnahmen der Kameras werden in Unterordnern des surveillance-Stammerzeichnisses gespeichert, die den gleichen Namen wie die Kamera in der Surveillance Station haben. Um den Pfad zu dem Aufnahmefile zu spezifizieren, ist die Basisadresse des erstellten Webservers mit dem Unterordner der entsprechenden Kamera zu ergänzen. Mit diesem zusammengesetzten Gesamtpfad ist ebenfalls das Reading &amp;quot;VideoFolder&amp;quot;, welches den physikalischen Pfad von Aufnahmen der entsprechenden Kamera beschreibt, zu überschreiben. &lt;br /&gt;
&lt;br /&gt;
Die wird mit dem Attribut &amp;quot;videofolderMap&amp;quot; erreicht. In dem Beispiel wird es gesetzt auf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr CamHE1 videofolderMap http://&amp;lt;FHEM-Server&amp;gt;:8083/fhem/svs/Hauseingang/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jede Aufnahme der Kamera &amp;quot;Hauseingang&amp;quot; bzw. &amp;quot;CamHE1&amp;quot; wird somit durch die Webadresse ...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://&amp;lt;FHEM-Server&amp;gt;:8083/fhem/svs/Hauseingang/&amp;lt;Inhalt Reading CamLastRec&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
... erreicht.&lt;br /&gt;
&lt;br /&gt;
Wie eine Mail mit diesem Link versendet werden kann ist [[SSCAM_-_Steuerung_von_Kameras_in_Synology_Surveillance_Station#Mail_mit_Snapshot_im_Anhang_und_Aufnahmelink_versenden_.28sendmail.29 | hier]] beschrieben.&lt;br /&gt;
&lt;br /&gt;
Der komplette in der Mail versendete Aufnahmelink sieht folgendermaßen aus: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://&amp;lt;FHEM-Server&amp;gt;:8083/fhem/svs/Hauseingang//20160408PM/Hauseingang20160408-215150-1460145110.mp4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Nutzung der Webstation auf Synology DS zum Zugriff auf Recordings ====&lt;br /&gt;
&lt;br /&gt;
Da die Benutzung des HTTPSRV für diesen Zweck FHEM belastet bzw. blockiert, hat Martin Fischer im Forum unter:&lt;br /&gt;
https://forum.fhem.de/index.php/topic,45671.msg482616.html#msg482616&lt;br /&gt;
&lt;br /&gt;
zwei Möglichkeiten bschrieben wie man den internen Webserver des Synology DS statt dessen verwenden kann (DSM 6).&lt;br /&gt;
&lt;br /&gt;
Darauf aufbauend ist hier folgend die Umsetzung im DSM 5.2 beschrieben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1. schnelle Variante A&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die nachfolgende Beschreibung bezieht sich auf DSM 5.2. Es wird ein virtueller Host (test.myds.me) definiert, der auf Port HTTP 8081 hört. Das Dokument-Root soll in dem Beispiel der Ordner &amp;quot;/volume1/web/fhemsvs&amp;quot; sein.  &lt;br /&gt;
&lt;br /&gt;
* Nach dem Login als root wechselt man in das web-Verzeichnis mit &amp;quot;cd /volume1/web&amp;quot;&lt;br /&gt;
* anlegen des Root-Verzeichnisses für den virtuellen Host und setzen der Berechtigungen:&lt;br /&gt;
  mkdir fhemsvs&lt;br /&gt;
  chown http:http fhemsvs&lt;br /&gt;
  chmod 775 fhemsvs&lt;br /&gt;
&lt;br /&gt;
* Für SVS-Versionen kleiner als 8: Link im Root-Verzeichnis zum SVS-Stammverzeichnis setzen:&lt;br /&gt;
  ln -s /volume1/surveillance/ /volume1/web/fhemsvs&lt;br /&gt;
&lt;br /&gt;
* Für SVS-Versionen ab 8: Link im Root-Verzeichnis zum SVS-Stammverzeichnis setzen:&lt;br /&gt;
  ln -s /volume1/\@surveillance/ /volume1/web/fhemsvs&lt;br /&gt;
&lt;br /&gt;
* einen virtuellen Host in Systemsteuerung -&amp;gt; Webdienste -&amp;gt; virtueller Host anlegen. Soll der Host von extern erreichbar sein, muß ebenfalls eine Registrierung des Hostnamens z.B. bei dem kostenfreien DNS-Dienst von Synology erfolgen sowie der verwendete Port im Router freigeschaltet werden.&lt;br /&gt;
  &lt;br /&gt;
[[Bild:vHost.PNG|left|thumb|300px|]] Der virtuelle Host ist durch die Angabe des Unterodners (fhemsvs), des Hostnamens (test.myds.me), des Protokolls und des Ports (8081) zu definieren. Die Angaben sind natürlichen den realen Werten anzupassen.&lt;br /&gt;
&lt;br /&gt;
* die Recordings sind nun prinzipiell unter der Adresse erreichbar:&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  http://test.myds.me:8081/surveillance/&amp;lt;Camname&amp;gt;/&amp;lt;Zeitordner&amp;gt;/&amp;lt;Dateiname&amp;gt;&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* in FHEM ist der Zugangspfad zu dem Aufnahmen zusammengesetzt aus den Readings &amp;quot;VideoFolder&amp;quot; (Original z.B. /volume1/surveillance/Carport) und &amp;quot;CamLastRec&amp;quot;. Über das Attribut &amp;quot;videofolderMap&amp;quot; wird &amp;quot;/volume1/surveillance/Carport&amp;quot; nun ersetzt durch &amp;lt;pre&amp;gt;&amp;quot;http://test.myds.me:8081/surveillance/Carport/&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der substituierte Aufnahmelink wird nun zu: (ReadingsVal(&amp;quot;&amp;lt;camname&amp;gt;&amp;quot;,&amp;quot;VideoFolder&amp;quot;,&amp;quot;&amp;quot;)).(ReadingsVal(&amp;quot;&amp;lt;name&amp;gt;&amp;quot;,&amp;quot;CamLastRec&amp;quot;,&amp;quot;&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
* Der Versand des Aufnahmelinks per Mail kann durch ein Notify erfolgen:&lt;br /&gt;
&lt;br /&gt;
  define N.CamCP1.Rec.Email notify CamCP1:CamLastRec:.*  {DebianMailnbl (&#039;&amp;lt;Mailempfänger&amp;gt;&#039;,&#039;Bewegungsaufnahme Carport&#039;, &#039;Aufnahmelink: &#039;.(ReadingsVal(&amp;quot;CamCP1&amp;quot;,&amp;quot;VideoFolder&amp;quot;,&amp;quot;&amp;quot;)).(ReadingsVal(&amp;quot;CamCP1&amp;quot;,&amp;quot;CamLastRec&amp;quot;,&amp;quot;&amp;quot;))) }&lt;br /&gt;
&lt;br /&gt;
Die Funktion DebianMailnbl für den Mailversand ist zuvor in 99_myUtils zu definieren. (siehe [[#Mail_mit_Snapshot_im_Anhang_und_Aufnahmelink_versenden_.28sendmail.29 | Mailversandroutine]] )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Der Versand des Aufnahmelinks per TelegramBot kann durch folgendes Notify erfolgen:&lt;br /&gt;
&lt;br /&gt;
 define N.CamCP1.Rec.TeleBot notify CamCP1:CamLastRec:.* { my $var = (ReadingsVal(&amp;quot;CamCP1&amp;quot;,&amp;quot;VideoFolder&amp;quot;,&amp;quot;&amp;quot;)).(ReadingsVal(&amp;quot;CamCP1&amp;quot;,&amp;quot;CamLastRec&amp;quot;,&amp;quot;&amp;quot;)); fhem (&amp;quot;set teleBot message $var Bewegungsaufnahme beim Carport&amp;quot;); }&lt;br /&gt;
&lt;br /&gt;
Natürlich ist TelegramBot vorab einzurichten. Der Versand erfolgt in dem Beispiel an den defaultPeer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2. Variante B&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
(noch für DSM 5.2 zu beschreiben).&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Workaround bei DSM 2-Stufen Verifizierung  ===&lt;br /&gt;
1. Benutzer in der SVS einrichten, zum Manager machen&amp;lt;br&amp;gt;&lt;br /&gt;
2. Benutzer wird automatisch auch in FHEM eingerichtet, dort zum Admin machen&amp;lt;br&amp;gt;&lt;br /&gt;
3. 2-Stufen Verifizierung ausschalten&amp;lt;br&amp;gt;&lt;br /&gt;
4. Modul / Kamera zum Laufen bringen&amp;lt;br&amp;gt;&lt;br /&gt;
5. Session im Modul auf SVS stellen&amp;lt;br&amp;gt;&lt;br /&gt;
6. Benutzer in der DSM aus der Admin-Gruppe rausnehmen&amp;lt;br&amp;gt;&lt;br /&gt;
7. 2-Stufen Verifizierung einschalten (Option nur für Admins)&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Motivierte linke Hände</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HP1000&amp;diff=16465</id>
		<title>HP1000</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HP1000&amp;diff=16465"/>
		<updated>2016-10-02T16:07:27Z</updated>

		<summary type="html">&lt;p&gt;Motivierte linke Hände: Ein paar mögliche Userreadings ergänzt.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Einbindung einer HP1000 Wetterstation&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Heizungssteuerung/Raumklima&lt;br /&gt;
|ModFTopic=44022&lt;br /&gt;
|ModTechName=50_HP1000.pm&lt;br /&gt;
|ModOwner={{Link2FU|1363|Loredo}}&lt;br /&gt;
}}&lt;br /&gt;
== HP1000 ==&lt;br /&gt;
HP1000 ist ein Modul zum Auslesen von HP1000/WH2600 Wetterstationen von renkforce/Froggit, etc.&lt;br /&gt;
&lt;br /&gt;
Funktionsweise des Moduls ist, dass in der Wetterstation eine FHEMWEB Instanz angegeben wird, an die die Wetterstation dann regelmäßig die Daten sendet. &lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
Die Konfiguration des Moduls erfolgt in drei Schritten:&lt;br /&gt;
=== Definition einer Webinstanz für die Wetterstation ===&lt;br /&gt;
Zunächst muss auf einem eigenen Port eine neue FHEMWEB-Instanz angelegt werden, z.B. mit dem Namen WEBweather. Dieser muss zwingend der Name weatherstation zugewiesen werden. Dieser ist in der Firmware der Stationen fest codiert.&lt;br /&gt;
  define WEBweather FHEMWEB 8089 global&lt;br /&gt;
  attr WEBweather webname weatherstation&lt;br /&gt;
=== Definition der Wetterstation ===&lt;br /&gt;
Dann wird das Modul noch in Fhem definiert. Die Definition kann mit und ohne Benutzernamen und Passwort erfolgen. Wenn bei der Definition Benutzername und Passwort nicht angegeben werden, werden die von der Wetterstation gesendeten Benutzerdaten von Fhem nicht überprüft. Eine WH2600 Station erfordert im Webinterfache immer die Angabe von Benutzername und Passwort.&lt;br /&gt;
Definition mit Benutzername und Passwort:&lt;br /&gt;
  define Wetterstation HP1000 Benutzer Passwort&lt;br /&gt;
Definition ohne Benutzername und Passwort:&lt;br /&gt;
  define Wetterstation HP1000&lt;br /&gt;
&lt;br /&gt;
=== Eingaben im Webinterface der Station ===&lt;br /&gt;
Dann muss der Station eingestellt werden, dass die Wetterinformationen an Fhem geschickt werden sollen. Bei einer WH2600 (Station ohne LCD Display) geschieht das im Webinterface, bei einer HP1000 direkt in den Einstellungen des LCD Displays.&lt;br /&gt;
Dazu unter &amp;quot;Weather Network&amp;quot; folgendes eintragen:&lt;br /&gt;
&amp;lt;pre&amp;gt;Remote Server      =&amp;gt; Customized&lt;br /&gt;
Server IP/Hostname =&amp;gt; &amp;lt;Fhem-Domainname&amp;gt; bzw. &amp;lt;Fhem-IP&amp;gt; (siehe unten)&lt;br /&gt;
Server Port        =&amp;gt; Der Port der neuen Webinstanz in Fhem (im Beispiel oben 8089)&lt;br /&gt;
Station ID         =&amp;gt; selbst gewählter Benutzername&lt;br /&gt;
Password           =&amp;gt; selbst gewähltes Passwort&amp;lt;/pre&amp;gt;&lt;br /&gt;
Zu &#039;&#039;&#039;Server IP/Hostname&#039;&#039;&#039;: Hier muss entweder der Domainname angegeben werden, unter dem Fhem erreichbar ist (vollständige Domain nicht vergessen!), oder die IP. Wenn in Fhem keine Daten ankommen, ist das hier meist der Knackpunkt. Erfahrungen zeigen, dass teilweise der Domainname nicht vollständig angegeben wurde oder aber der Domainname nicht aufgelöst werden kann (vielleicht gibt es hier Probleme einzelner Stationen, bei der Konfiguration via DHCP den Nameserver-Eintrag richtig umzusetzen). Auch hat die Firmware oft einen Bug der verhindert, dass IP Adressen direkt verwendet werden können. Hier muss dann zwingend auf einen Domainnamen zurückgegriffen werden!&lt;br /&gt;
Einfach mal alle Möglichkeiten durchprobieren.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Station ID&#039;&#039;&#039; und &#039;&#039;&#039;Passwort&#039;&#039;&#039; müssen hier angegeben werden. Bei der Definition der Station in Fhem kann man diese angeben (dann wird geprüft, ob die berechtigte Station Daten schickt) oder weglassen (dann werden Benutzername und Passwort nicht von Fhem geprüft).&lt;br /&gt;
&lt;br /&gt;
== Tipps, Tricks, Problemlösungen ==&lt;br /&gt;
=== FileLog ===&lt;br /&gt;
Das Modul definiert bei der Erstellung kein FileLog. Wenn man eines definiert, bietet sich aufgrund der Häufigkeit von Datenübertragungen und damit der Menge an übertragenen Informationen das Loggen nur des T:-Readings an:&lt;br /&gt;
  define FileLog_WeatherStation FileLog ./log/WeatherStation-%Y.log WeatherStation:T:.*&lt;br /&gt;
&lt;br /&gt;
Alternativ sei auch auf die Verwendung von DbLog verwiesen. Dort kann man mit Hilfe des DbLogInclude Attributs granularer einstellen wie oft ein Wert geloggt werden soll:&lt;br /&gt;
  attr WeatherStation DbLogInclude windSpeed:300 windGust:300 windChill:300 temperature.*:300 humidity.*:300 luminosity:300 uv:300&lt;br /&gt;
&lt;br /&gt;
Wichtig ist auch, dass für das Logging die richtigen Events ausgelöst werden. Wer die event-on-* Attribute benutzt kann diese in Kombination mit DbLogInclude z.B. so setzen:&lt;br /&gt;
  attr event-on-update-reading temperature.*,humidity.*,windSpeed,windGust,windChill,luminosity,uv,dewpoint.*,rain.*&lt;br /&gt;
&lt;br /&gt;
=== Falsch angezeigte/zu wenig Readings ===&lt;br /&gt;
Abhängig von der Firmwareversion und/oder dem Modell der Station kann es dazu kommen, dass teilweise nicht alle Readings oder die Readings mit den falschen Einheiten (z. B. Wingeschwindigkeit in mph, obwohl km/h konfiguriert wurde) angezeigt werden. In diesem Fall hilft es, im Webinterface der Wetterstation bei der Definition &amp;quot;Weather Network&amp;quot; den &amp;quot;Server Type&amp;quot; auf &amp;quot;JSP&amp;quot; zu stellen.&lt;br /&gt;
&lt;br /&gt;
=== Keine Daten in Fhem ===&lt;br /&gt;
Wenn in Fhem keine Daten von der Wetterstation ankommen, liegt das häufig daran, dass FHEM nicht richtig als &amp;quot;Weather Network&amp;quot; konfiguriert wurde. Wenn die &#039;&#039;&#039;erforderlichen Eingaben im Webinterface&#039;&#039;&#039; (s. o.) der Station nicht helfen, kann man sich zum Testen per telnet mit der Wetterstation verbinden (Benutzername admin, Passwort admin). Mögliche Befehle:&lt;br /&gt;
&amp;lt;pre&amp;gt;help&lt;br /&gt;
quit&lt;br /&gt;
reboot&lt;br /&gt;
Usage: passwd&lt;br /&gt;
       Old Password:&lt;br /&gt;
       New Password:&lt;br /&gt;
       Re-enter New Password:&lt;br /&gt;
Usage: username &amp;lt;user name&amp;gt;&lt;br /&gt;
Usage: ipconfig&lt;br /&gt;
Usage: setip &amp;lt;ip addr&amp;gt;&lt;br /&gt;
Usage: setmask &amp;lt;netmask&amp;gt;&lt;br /&gt;
Usage: setgateway &amp;lt;ip addr&amp;gt;&lt;br /&gt;
Usage: setdns &amp;lt;ip addr&amp;gt;&lt;br /&gt;
Usage: setmode &amp;lt;mode&amp;gt;&lt;br /&gt;
       &amp;lt;mode&amp;gt;: 0: SERVER     1: CLIENT&lt;br /&gt;
Usage: setsrvport &amp;lt;port&amp;gt;&lt;br /&gt;
Usage: setdstport &amp;lt;port&amp;gt;&lt;br /&gt;
Usage: dhcpclient &amp;lt;status&amp;gt;&lt;br /&gt;
       &amp;lt;status&amp;gt;: 0: disable     1: enable&lt;br /&gt;
Usage: connectype &amp;lt;protocol&amp;gt;&lt;br /&gt;
       &amp;lt;protocol&amp;gt;: 0: TCP     1: UDP&lt;br /&gt;
Usage: transmitimer &amp;lt;time&amp;gt;&lt;br /&gt;
       &amp;lt;time&amp;gt;: time in ms&lt;br /&gt;
Usage: saveconfig&lt;br /&gt;
Usage: accessip &amp;lt;index&amp;gt; &amp;lt;ip addr&amp;gt;&lt;br /&gt;
       &amp;lt;index&amp;gt;:   index of accessible IP&lt;br /&gt;
       &amp;lt;ip addr&amp;gt;: accessible IP address&lt;br /&gt;
Usage: setaccip &amp;lt;mode&amp;gt;&lt;br /&gt;
       &amp;lt;mode&amp;gt;:  0: disable    1: enable&lt;br /&gt;
Usage: setaw &amp;lt;cold start&amp;gt; &amp;lt;authentication fail&amp;gt; &amp;lt;ip changed&amp;gt; &amp;lt;password changed&amp;gt;&lt;br /&gt;
       &amp;lt;cold start&amp;gt;:             0: Disable     1: Enable&lt;br /&gt;
       &amp;lt;authentication fail&amp;gt;:    0: Disable     1: Enable&lt;br /&gt;
       &amp;lt;ip changed&amp;gt;:             0: Disable     1: Enable&lt;br /&gt;
       &amp;lt;password changed&amp;gt;:       0: Disable     1: Enable&lt;br /&gt;
Usage: setdsthn &amp;lt;Host name/IP&amp;gt;&lt;br /&gt;
Usage: tftpsrv &amp;lt;ip addr&amp;gt;&lt;br /&gt;
Usage: filename &amp;lt;file name&amp;gt;&lt;br /&gt;
Usage: dlfirmware&lt;br /&gt;
Usage: seteep &amp;lt;HEX RegStartAddr&amp;gt; &amp;lt;HEX Byte 0&amp;gt; &amp;lt;HEX Byte 1&amp;gt;...&amp;lt;HEX Byte N&amp;gt;&lt;br /&gt;
Usage: dbgmsg &amp;lt;mode&amp;gt;&lt;br /&gt;
       &amp;lt;mode&amp;gt;: 0: Disable    1: Enable&lt;br /&gt;
Usage: connstatus&lt;br /&gt;
Usage: ping xxx.xxx.xxx.xxx&lt;br /&gt;
Usage: setRTC &amp;lt;HEX RegStartAddr&amp;gt; &amp;lt;HEX Byte 0&amp;gt; &amp;lt;HEX Byte 1&amp;gt;...&amp;lt;HEX Byte N&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Am besten mit &amp;quot;ipconfig&amp;quot; sich die aktuelle Konfiguration anzeigen lassen. Mit ping kann man Verbindungen z. B. zu Fhem testen.&lt;br /&gt;
&lt;br /&gt;
=== Userreading: Windrichtung als Himmelsrichtung ===&lt;br /&gt;
Wer als Reading lieber die Himmelsrichtung des Windes statt einer Gradangabe hätte, kann ein entsprechendes Userreading &amp;quot;windDirLit&amp;quot; erzeugen, das dann die Himmelsrichtung (N, NW, S, etc.) ausgibt. Dazu folgendes Userreading anlegen:&lt;br /&gt;
&lt;br /&gt;
  attr Wetterstation userReadings windDirLit:windDir.* { Windrichtung(ReadingsVal(&#039;Wetterstation&#039;, &#039;windDir&#039;, &#039;0&#039;)); }&lt;br /&gt;
&lt;br /&gt;
Und folgenden Code in die 99_myUtils.pm kopieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sub Windrichtung ($) {&lt;br /&gt;
  my ($Grad) = @_;&lt;br /&gt;
  my @Richtungen=(&#039;N&#039;, &#039;NNO&#039;, &#039;NO&#039;, &#039;ONO&#039;, &#039;O&#039;, &#039;OSO&#039;, &#039;SO&#039;, &#039;SSO&#039;, &#039;S&#039;, &#039;SSW&#039;, &#039;SW&#039;, &#039;WSW&#039;, &#039;W&#039;, &#039;WNW&#039;, &#039;NW&#039;, &#039;NNW&#039;, &#039;N&#039;);&lt;br /&gt;
  return $Richtungen[sprintf(&#039;%.0f&#039;, $Grad / 22.5)];&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Userreading: Windstärke in Beaufort ===&lt;br /&gt;
Wer gerne ein Reading hätte, um die Windstärke in Beaufort auszugeben, und wer sich die Windstärke normalerweise in km/h anzeigen lässt, kann sich dazu folgendes Userreading anlegen:&lt;br /&gt;
&lt;br /&gt;
  attr Wetterstation userReadings windBft:windSpeed.* { sprintf &#039;%.0f&#039;, (ReadingsVal(&#039;Wetterstation&#039;, &#039;windSpeed&#039;, 0) / 3.0096) ** (2/3); }&lt;br /&gt;
=== Userreading: Windgeschwindigkeit in m/s ===&lt;br /&gt;
Wer sich die Windgeschwindigkeit in km/h anzeigen lässt, aber gerne ein zusätzliches Reading in m/s haben möchte (z. B., um die Windgeschwindigkeit an wetter.com übermitteln zu können mit dem weco-Modul für Fhem), kann sich auch dafür ein zusätzliches Reading &amp;quot;wind_mps&amp;quot; erzeugen:&lt;br /&gt;
&lt;br /&gt;
  attr Wetterstation userReadings wind_mps:windSpeed.* { sprintf &#039;%0.2f&#039;, ReadingsVal(&#039;Wetterstation&#039;,&#039;windSpeed&#039;,0) / 3.6; }&lt;/div&gt;</summary>
		<author><name>Motivierte linke Hände</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HP1000&amp;diff=16460</id>
		<title>HP1000</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HP1000&amp;diff=16460"/>
		<updated>2016-10-02T07:09:38Z</updated>

		<summary type="html">&lt;p&gt;Motivierte linke Hände: Nun stimmen auch die Überschriftenhierarchien... :-/&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Einbindung einer HP1000 Wetterstation&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Heizungssteuerung/Raumklima&lt;br /&gt;
|ModFTopic=44022&lt;br /&gt;
|ModTechName=50_HP1000.pm&lt;br /&gt;
|ModOwner={{Link2FU|1363|Loredo}}&lt;br /&gt;
}}&lt;br /&gt;
== HP1000 ==&lt;br /&gt;
HP1000 ist ein Modul zum Auslesen von HP1000/WH2600 Wetterstationen von renkforce/Froggit, etc.&lt;br /&gt;
&lt;br /&gt;
Funktionsweise des Moduls ist, dass in der Wetterstation eine FHEMWEB Instanz angegeben wird, an die die Wetterstation dann regelmäßig die Daten sendet. &lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
Die Konfiguration des Moduls erfolgt in drei Schritten:&lt;br /&gt;
=== Definition einer Webinstanz für die Wetterstation ===&lt;br /&gt;
Zunächst muss auf einem eigenen Port eine neue FHEMWEB-Instanz angelegt werden, z.B. mit dem Namen WEBweather. Dieser muss zwingend der Name weatherstation zugewiesen werden. Dieser ist in der Firmware der Stationen fest codiert.&lt;br /&gt;
  define WEBweather FHEMWEB 8089 global&lt;br /&gt;
  attr WEBweather webname weatherstation&lt;br /&gt;
=== Definition der Wetterstation ===&lt;br /&gt;
Dann wird das Modul noch in Fhem definiert. Die Definition kann mit und ohne Benutzernamen und Passwort erfolgen. Wenn bei der Definition Benutzername und Passwort nicht angegeben werden, werden die von der Wetterstation gesendeten Daten von Fhem nicht überprüft. (Die Station erfordert im Webinterfache immer die Angabe von Benutzername und Passwort!)&lt;br /&gt;
Definition mit Benutzername und Passwort:&lt;br /&gt;
  define Wetterstation HP1000 Benutzer Passwort&lt;br /&gt;
Definition ohne Benutzername und Passwort:&lt;br /&gt;
  define Wetterstation HP1000&lt;br /&gt;
=== Eingaben im Webinterface der Station ===&lt;br /&gt;
Dann muss der Station in deren Webinterface noch gesagt werden, dass die Wetterinformationen an Fhem geschickt werden. Dazu im Webinterface unter &amp;quot;Weather Network&amp;quot; Folgendes eintragen:&lt;br /&gt;
&amp;lt;pre&amp;gt;Remote Server      =&amp;gt; Customzied&lt;br /&gt;
Server IP/Hostname =&amp;gt; &amp;lt;Fhem-Domainname&amp;gt; bzw. &amp;lt;Fhem-IP&amp;gt; (s.u.)&lt;br /&gt;
Server Port        =&amp;gt; Der Port der neuen Webinstanz in Fhem (im Beispiel oben 8089)&lt;br /&gt;
Station ID         =&amp;gt; selbstgewählter Benutzername&lt;br /&gt;
Password           =&amp;gt; selbstgewähltes Passwort&amp;lt;/pre&amp;gt;&lt;br /&gt;
Zu &#039;&#039;&#039;Server IP/Hostname&#039;&#039;&#039;: Hier muss entweder der Domainname angegeben werden, unter dem Fhem erreichbar ist (vollständige Domain nicht vergessen!), oder die IP. Wenn in Fhem keine Daten ankommen, ist das hier meist der Knackpunkt. Erfahrungen zeigen, dass teilweise der Domainname nicht vollständig angegeben wurde oder aber der Domainname nicht aufgelöst werden kann (vielleicht gibt es hier Probleme einzelner Stationen, bei der Konfiguration via DHCP den Nameserver-Eintrag richtig umzusetzen). Einfach mal alle Möglichkeiten durchprobieren.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Station ID&#039;&#039;&#039; und &#039;&#039;&#039;Passwort&#039;&#039;&#039; müssen hier angegeben werden. Bei der Definition der Station in Fhem kann man diese angeben (dann wird geprüft, ob die berechtigte Station Daten schickt) oder weglassen (dann werden Benutzername und Passwort nicht von Fhem geprüft).&lt;br /&gt;
== Tipps, Tricks, Problemlösungen ==&lt;br /&gt;
=== FileLog ===&lt;br /&gt;
Das Modul definiert bei der Erstellung kein FileLog. Wenn man eines definiert, bietet sich aufgrund der Häufigkeit von Datenübertragungen und damit der Menge an übertragenen Informationen das Loggen nur des T:-Readings an:&lt;br /&gt;
  define FileLog_Wetterstation FileLog ./log/Wetterstation-%Y.log Wetterstation:T:.*&lt;br /&gt;
=== Mehr Einträge im T:-Reading ===&lt;br /&gt;
Das Modul liefert standardmäßig nicht alle vom Außensender verfügbaren Daten auch in der T:-Zeile. Wenn man dort - z. B. zum Loggen - alle Daten haben möchte, kann man die übrigen Daten ergänzen. Dafür editiert man die Datei 50_HP1000.pm und ergänzt Zeilen.&lt;br /&gt;
Im Bereich von Zeile 347 suchen:&lt;br /&gt;
&amp;lt;pre&amp;gt;    $result = &amp;quot;T: &amp;quot; . $webArgs-&amp;gt;{outtemp} if ( defined( $webArgs-&amp;gt;{outtemp} ) );&lt;br /&gt;
    $result .= &amp;quot; H: &amp;quot; . $webArgs-&amp;gt;{outhumi}&lt;br /&gt;
      if ( defined( $webArgs-&amp;gt;{outhumi} ) );&lt;br /&gt;
    $result .= &amp;quot; Ti: &amp;quot; . $webArgs-&amp;gt;{intemp}&lt;br /&gt;
      if ( defined( $webArgs-&amp;gt;{intemp} ) );&lt;br /&gt;
    $result .= &amp;quot; Hi: &amp;quot; . $webArgs-&amp;gt;{inhumi}&lt;br /&gt;
      if ( defined( $webArgs-&amp;gt;{inhumi} ) );&lt;br /&gt;
    $result .= &amp;quot; W: &amp;quot; . $webArgs-&amp;gt;{windspeed}&lt;br /&gt;
      if ( defined( $webArgs-&amp;gt;{windspeed} ) );&lt;br /&gt;
    $result .= &amp;quot; R: &amp;quot; . $webArgs-&amp;gt;{rainrate}&lt;br /&gt;
      if ( defined( $webArgs-&amp;gt;{rainrate} ) );&lt;br /&gt;
    $result .= &amp;quot; WD: &amp;quot; . $webArgs-&amp;gt;{winddir}&lt;br /&gt;
      if ( defined( $webArgs-&amp;gt;{winddir} ) );&lt;br /&gt;
    $result .= &amp;quot; D: &amp;quot; . $webArgs-&amp;gt;{dewpoint}&lt;br /&gt;
      if ( defined( $webArgs-&amp;gt;{dewpoint} ) );&lt;br /&gt;
    $result .= &amp;quot; P: &amp;quot; . $webArgs-&amp;gt;{relbaro}&lt;br /&gt;
      if ( defined( $webArgs-&amp;gt;{relbaro} ) );&amp;lt;/pre&amp;gt;&lt;br /&gt;
und dahinter folgende neue Zeilen einfügen:&lt;br /&gt;
&amp;lt;pre&amp;gt;    $result .= &amp;quot; U: &amp;quot; . $webArgs-&amp;gt;{UV}&lt;br /&gt;
      if ( defined( $webArgs-&amp;gt;{UV} ) );&lt;br /&gt;
    $result .= &amp;quot; L: &amp;quot; . $webArgs-&amp;gt;{light}&lt;br /&gt;
      if ( defined( $webArgs-&amp;gt;{light} ) );&lt;br /&gt;
    $result .= &amp;quot; WC: &amp;quot; . $webArgs-&amp;gt;{windchill}&lt;br /&gt;
      if (defined($webArgs-&amp;gt;{windchill}));&lt;br /&gt;
    $result .= &amp;quot; RD: &amp;quot; . $webArgs-&amp;gt;{dailyrain}&lt;br /&gt;
      if (defined($webArgs-&amp;gt;{dailyrain}));&lt;br /&gt;
    $result .= &amp;quot; RW: &amp;quot; . $webArgs-&amp;gt;{weeklyrain}&lt;br /&gt;
      if (defined($webArgs-&amp;gt;{weeklyrain}));&lt;br /&gt;
    $result .= &amp;quot; RM: &amp;quot;.$webArgs-&amp;gt;{monthlyrain}&lt;br /&gt;
      if (defined($webArgs-&amp;gt;{monthlyrain}));&lt;br /&gt;
    $result .= &amp;quot; RY: &amp;quot;.$webArgs-&amp;gt;{yearlyrain}&lt;br /&gt;
      if (defined($webArgs-&amp;gt;{yearlyrain}));&lt;br /&gt;
    $result .= &amp;quot; WG: &amp;quot;.$webArgs-&amp;gt;{windgust}&lt;br /&gt;
      if (defined($webArgs-&amp;gt;{windgust}));&amp;lt;/pre&amp;gt;&lt;br /&gt;
Um zu verhindern, dass die eigenen Ergänzungen bei einem Update des Moduls überschrieben werden, dann noch 50_HP1000.pm vom automatischen Update ausnehmen:&lt;br /&gt;
  attr global exclude_from_update 50_HP1000.pm&lt;br /&gt;
=== Absturz von Fhem wegen Illegal division by zero ===&lt;br /&gt;
Wenn HP1000 Fhem abstürzen lässt mit der Fehlermeldung &lt;br /&gt;
&amp;lt;pre&amp;gt;2016.10.01 08:51:00 1: PERL WARNING: Use of uninitialized value in division (/) at ./FHEM/50_HP1000.pm line 383.&lt;br /&gt;
Illegal division by zero at ./FHEM/50_HP1000.pm line 383.&amp;lt;/pre&amp;gt;&lt;br /&gt;
dann hilft es, die mit + markierten Zeilen (natürlich ohne die +-Zeichen selbst!) in 50_HP1000.pm im sub HP1000_GetSum (um Zeile 400) einzufügen:&lt;br /&gt;
&amp;lt;pre&amp;gt;    if ($avg) {&lt;br /&gt;
+     if (@{ $hash-&amp;gt;{helper}{history}{$t} } &amp;gt; 0) {&lt;br /&gt;
        $return = sprintf( &amp;quot;%.1f&amp;quot;,&lt;br /&gt;
            sum( @{ $hash-&amp;gt;{helper}{history}{$t} } ) /&lt;br /&gt;
              @{ $hash-&amp;gt;{helper}{history}{$t} } );&lt;br /&gt;
&lt;br /&gt;
        Log3 $name, 5, &amp;quot;HP1000 $name: Average for $t: $return&amp;quot;;&lt;br /&gt;
+     }&lt;br /&gt;
    }&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Falsch angezeigte/zu wenig Readings ===&lt;br /&gt;
Abhängig von der Firmwareversion und/oder dem Modell der Station kann es dazu kommen, dass teilweise nicht alle Readings oder die Readings mit den falschen Einheiten (z. B. Wingeschwindigkeit in mph, obwohl km/h konfiguriert wurde) angezeigt werden. In diesem Fall hilft es, im Webinterface der Wetterstation bei der Definition &amp;quot;Weather Network&amp;quot; den &amp;quot;Server Type&amp;quot; auf &amp;quot;JSP&amp;quot; zu stellen.&lt;br /&gt;
=== Keine Daten in Fhem ===&lt;br /&gt;
Wenn in Fhem keine Daten von der Wetterstation ankommen, liegt das häufig daran, dass FHEM nicht richtig als &amp;quot;Weather Network&amp;quot; konfiguriert wurde. Wenn die &#039;&#039;&#039;erforderlichen Eingaben im Webinterface&#039;&#039;&#039; (s. o.) der Station nicht helfen, kann man sich zum Testen per telnet mit der Wetterstation verbinden (Benutzername admin, Passwort admin). Mögliche Befehle:&lt;br /&gt;
&amp;lt;pre&amp;gt;help&lt;br /&gt;
quit&lt;br /&gt;
reboot&lt;br /&gt;
Usage: passwd&lt;br /&gt;
       Old Password:&lt;br /&gt;
       New Password:&lt;br /&gt;
       Re-enter New Password:&lt;br /&gt;
Usage: username &amp;lt;user name&amp;gt;&lt;br /&gt;
Usage: ipconfig&lt;br /&gt;
Usage: setip &amp;lt;ip addr&amp;gt;&lt;br /&gt;
Usage: setmask &amp;lt;netmask&amp;gt;&lt;br /&gt;
Usage: setgateway &amp;lt;ip addr&amp;gt;&lt;br /&gt;
Usage: setdns &amp;lt;ip addr&amp;gt;&lt;br /&gt;
Usage: setmode &amp;lt;mode&amp;gt;&lt;br /&gt;
       &amp;lt;mode&amp;gt;: 0: SERVER     1: CLIENT&lt;br /&gt;
Usage: setsrvport &amp;lt;port&amp;gt;&lt;br /&gt;
Usage: setdstport &amp;lt;port&amp;gt;&lt;br /&gt;
Usage: dhcpclient &amp;lt;status&amp;gt;&lt;br /&gt;
       &amp;lt;status&amp;gt;: 0: disable     1: enable&lt;br /&gt;
Usage: connectype &amp;lt;protocol&amp;gt;&lt;br /&gt;
       &amp;lt;protocol&amp;gt;: 0: TCP     1: UDP&lt;br /&gt;
Usage: transmitimer &amp;lt;time&amp;gt;&lt;br /&gt;
       &amp;lt;time&amp;gt;: time in ms&lt;br /&gt;
Usage: saveconfig&lt;br /&gt;
Usage: accessip &amp;lt;index&amp;gt; &amp;lt;ip addr&amp;gt;&lt;br /&gt;
       &amp;lt;index&amp;gt;:   index of accessible IP&lt;br /&gt;
       &amp;lt;ip addr&amp;gt;: accessible IP address&lt;br /&gt;
Usage: setaccip &amp;lt;mode&amp;gt;&lt;br /&gt;
       &amp;lt;mode&amp;gt;:  0: disable    1: enable&lt;br /&gt;
Usage: setaw &amp;lt;cold start&amp;gt; &amp;lt;authentication fail&amp;gt; &amp;lt;ip changed&amp;gt; &amp;lt;password changed&amp;gt;&lt;br /&gt;
       &amp;lt;cold start&amp;gt;:             0: Disable     1: Enable&lt;br /&gt;
       &amp;lt;authentication fail&amp;gt;:    0: Disable     1: Enable&lt;br /&gt;
       &amp;lt;ip changed&amp;gt;:             0: Disable     1: Enable&lt;br /&gt;
       &amp;lt;password changed&amp;gt;:       0: Disable     1: Enable&lt;br /&gt;
Usage: setdsthn &amp;lt;Host name/IP&amp;gt;&lt;br /&gt;
Usage: tftpsrv &amp;lt;ip addr&amp;gt;&lt;br /&gt;
Usage: filename &amp;lt;file name&amp;gt;&lt;br /&gt;
Usage: dlfirmware&lt;br /&gt;
Usage: seteep &amp;lt;HEX RegStartAddr&amp;gt; &amp;lt;HEX Byte 0&amp;gt; &amp;lt;HEX Byte 1&amp;gt;...&amp;lt;HEX Byte N&amp;gt;&lt;br /&gt;
Usage: dbgmsg &amp;lt;mode&amp;gt;&lt;br /&gt;
       &amp;lt;mode&amp;gt;: 0: Disable    1: Enable&lt;br /&gt;
Usage: connstatus&lt;br /&gt;
Usage: ping xxx.xxx.xxx.xxx&lt;br /&gt;
Usage: setRTC &amp;lt;HEX RegStartAddr&amp;gt; &amp;lt;HEX Byte 0&amp;gt; &amp;lt;HEX Byte 1&amp;gt;...&amp;lt;HEX Byte N&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Am besten mit &amp;quot;ipconfig&amp;quot; sich die aktuelle Konfiguration anzeigen lassen. Mit ping kann man Verbindungen z. B. zu Fhem testen.&lt;/div&gt;</summary>
		<author><name>Motivierte linke Hände</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HP1000&amp;diff=16459</id>
		<title>HP1000</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HP1000&amp;diff=16459"/>
		<updated>2016-10-02T07:08:20Z</updated>

		<summary type="html">&lt;p&gt;Motivierte linke Hände: Erfahrungen und Informationen aus dem Support-Thread und der Commandref zusammengetragen.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Einbindung einer HP1000 Wetterstation&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Heizungssteuerung/Raumklima&lt;br /&gt;
|ModFTopic=44022&lt;br /&gt;
|ModTechName=50_HP1000.pm&lt;br /&gt;
|ModOwner={{Link2FU|1363|Loredo}}&lt;br /&gt;
}}&lt;br /&gt;
== HP1000 ==&lt;br /&gt;
HP1000 ist ein Modul zum Auslesen von HP1000/WH2600 Wetterstationen von renkforce/Froggit, etc.&lt;br /&gt;
&lt;br /&gt;
Funktionsweise des Moduls ist, dass in der Wetterstation eine FHEMWEB Instanz angegeben wird, an die die Wetterstation dann regelmäßig die Daten sendet. &lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
Die Konfiguration des Moduls erfolgt in drei Schritten:&lt;br /&gt;
=== Definition einer Webinstanz für die Wetterstation ===&lt;br /&gt;
Zunächst muss auf einem eigenen Port eine neue FHEMWEB-Instanz angelegt werden, z.B. mit dem Namen WEBweather. Dieser muss zwingend der Name weatherstation zugewiesen werden. Dieser ist in der Firmware der Stationen fest codiert.&lt;br /&gt;
  define WEBweather FHEMWEB 8089 global&lt;br /&gt;
  attr WEBweather webname weatherstation&lt;br /&gt;
=== Definition der Wetterstation ===&lt;br /&gt;
Dann wird das Modul noch in Fhem definiert. Die Definition kann mit und ohne Benutzernamen und Passwort erfolgen. Wenn bei der Definition Benutzername und Passwort nicht angegeben werden, werden die von der Wetterstation gesendeten Daten von Fhem nicht überprüft. (Die Station erfordert im Webinterfache immer die Angabe von Benutzername und Passwort!)&lt;br /&gt;
Definition mit Benutzername und Passwort:&lt;br /&gt;
  define Wetterstation HP1000 Benutzer Passwort&lt;br /&gt;
Definition ohne Benutzername und Passwort:&lt;br /&gt;
  define Wetterstation HP1000&lt;br /&gt;
=== Eingaben im Webinterface der Station ===&lt;br /&gt;
Dann muss der Station in deren Webinterface noch gesagt werden, dass die Wetterinformationen an Fhem geschickt werden. Dazu im Webinterface unter &amp;quot;Weather Network&amp;quot; Folgendes eintragen:&lt;br /&gt;
&amp;lt;pre&amp;gt;Remote Server      =&amp;gt; Customzied&lt;br /&gt;
Server IP/Hostname =&amp;gt; &amp;lt;Fhem-Domainname&amp;gt; bzw. &amp;lt;Fhem-IP&amp;gt; (s.u.)&lt;br /&gt;
Server Port        =&amp;gt; Der Port der neuen Webinstanz in Fhem (im Beispiel oben 8089)&lt;br /&gt;
Station ID         =&amp;gt; selbstgewählter Benutzername&lt;br /&gt;
Password           =&amp;gt; selbstgewähltes Passwort&amp;lt;/pre&amp;gt;&lt;br /&gt;
Zu &#039;&#039;&#039;Server IP/Hostname&#039;&#039;&#039;: Hier muss entweder der Domainname angegeben werden, unter dem Fhem erreichbar ist (vollständige Domain nicht vergessen!), oder die IP. Wenn in Fhem keine Daten ankommen, ist das hier meist der Knackpunkt. Erfahrungen zeigen, dass teilweise der Domainname nicht vollständig angegeben wurde oder aber der Domainname nicht aufgelöst werden kann (vielleicht gibt es hier Probleme einzelner Stationen, bei der Konfiguration via DHCP den Nameserver-Eintrag richtig umzusetzen). Einfach mal alle Möglichkeiten durchprobieren.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Station ID&#039;&#039;&#039; und &#039;&#039;&#039;Passwort&#039;&#039;&#039; müssen hier angegeben werden. Bei der Definition der Station in Fhem kann man diese angeben (dann wird geprüft, ob die berechtigte Station Daten schickt) oder weglassen (dann werden Benutzername und Passwort nicht von Fhem geprüft).&lt;br /&gt;
== Tipps, Tricks, Problemlösungen ==&lt;br /&gt;
== FileLog ==&lt;br /&gt;
Das Modul definiert bei der Erstellung kein FileLog. Wenn man eines definiert, bietet sich aufgrund der Häufigkeit von Datenübertragungen und damit der Menge an übertragenen Informationen das Loggen nur des T:-Readings an:&lt;br /&gt;
  define FileLog_Wetterstation FileLog ./log/Wetterstation-%Y.log Wetterstation:T:.*&lt;br /&gt;
== Mehr Einträge im T:-Reading ==&lt;br /&gt;
Das Modul liefert standardmäßig nicht alle vom Außensender verfügbaren Daten auch in der T:-Zeile. Wenn man dort - z. B. zum Loggen - alle Daten haben möchte, kann man die übrigen Daten ergänzen. Dafür editiert man die Datei 50_HP1000.pm und ergänzt Zeilen.&lt;br /&gt;
Im Bereich von Zeile 347 suchen:&lt;br /&gt;
&amp;lt;pre&amp;gt;    $result = &amp;quot;T: &amp;quot; . $webArgs-&amp;gt;{outtemp} if ( defined( $webArgs-&amp;gt;{outtemp} ) );&lt;br /&gt;
    $result .= &amp;quot; H: &amp;quot; . $webArgs-&amp;gt;{outhumi}&lt;br /&gt;
      if ( defined( $webArgs-&amp;gt;{outhumi} ) );&lt;br /&gt;
    $result .= &amp;quot; Ti: &amp;quot; . $webArgs-&amp;gt;{intemp}&lt;br /&gt;
      if ( defined( $webArgs-&amp;gt;{intemp} ) );&lt;br /&gt;
    $result .= &amp;quot; Hi: &amp;quot; . $webArgs-&amp;gt;{inhumi}&lt;br /&gt;
      if ( defined( $webArgs-&amp;gt;{inhumi} ) );&lt;br /&gt;
    $result .= &amp;quot; W: &amp;quot; . $webArgs-&amp;gt;{windspeed}&lt;br /&gt;
      if ( defined( $webArgs-&amp;gt;{windspeed} ) );&lt;br /&gt;
    $result .= &amp;quot; R: &amp;quot; . $webArgs-&amp;gt;{rainrate}&lt;br /&gt;
      if ( defined( $webArgs-&amp;gt;{rainrate} ) );&lt;br /&gt;
    $result .= &amp;quot; WD: &amp;quot; . $webArgs-&amp;gt;{winddir}&lt;br /&gt;
      if ( defined( $webArgs-&amp;gt;{winddir} ) );&lt;br /&gt;
    $result .= &amp;quot; D: &amp;quot; . $webArgs-&amp;gt;{dewpoint}&lt;br /&gt;
      if ( defined( $webArgs-&amp;gt;{dewpoint} ) );&lt;br /&gt;
    $result .= &amp;quot; P: &amp;quot; . $webArgs-&amp;gt;{relbaro}&lt;br /&gt;
      if ( defined( $webArgs-&amp;gt;{relbaro} ) );&amp;lt;/pre&amp;gt;&lt;br /&gt;
und dahinter folgende neue Zeilen einfügen:&lt;br /&gt;
&amp;lt;pre&amp;gt;    $result .= &amp;quot; U: &amp;quot; . $webArgs-&amp;gt;{UV}&lt;br /&gt;
      if ( defined( $webArgs-&amp;gt;{UV} ) );&lt;br /&gt;
    $result .= &amp;quot; L: &amp;quot; . $webArgs-&amp;gt;{light}&lt;br /&gt;
      if ( defined( $webArgs-&amp;gt;{light} ) );&lt;br /&gt;
    $result .= &amp;quot; WC: &amp;quot; . $webArgs-&amp;gt;{windchill}&lt;br /&gt;
      if (defined($webArgs-&amp;gt;{windchill}));&lt;br /&gt;
    $result .= &amp;quot; RD: &amp;quot; . $webArgs-&amp;gt;{dailyrain}&lt;br /&gt;
      if (defined($webArgs-&amp;gt;{dailyrain}));&lt;br /&gt;
    $result .= &amp;quot; RW: &amp;quot; . $webArgs-&amp;gt;{weeklyrain}&lt;br /&gt;
      if (defined($webArgs-&amp;gt;{weeklyrain}));&lt;br /&gt;
    $result .= &amp;quot; RM: &amp;quot;.$webArgs-&amp;gt;{monthlyrain}&lt;br /&gt;
      if (defined($webArgs-&amp;gt;{monthlyrain}));&lt;br /&gt;
    $result .= &amp;quot; RY: &amp;quot;.$webArgs-&amp;gt;{yearlyrain}&lt;br /&gt;
      if (defined($webArgs-&amp;gt;{yearlyrain}));&lt;br /&gt;
    $result .= &amp;quot; WG: &amp;quot;.$webArgs-&amp;gt;{windgust}&lt;br /&gt;
      if (defined($webArgs-&amp;gt;{windgust}));&amp;lt;/pre&amp;gt;&lt;br /&gt;
Um zu verhindern, dass die eigenen Ergänzungen bei einem Update des Moduls überschrieben werden, dann noch 50_HP1000.pm vom automatischen Update ausnehmen:&lt;br /&gt;
  attr global exclude_from_update 50_HP1000.pm&lt;br /&gt;
=== Absturz von Fhem wegen Illegal division by zero ===&lt;br /&gt;
Wenn HP1000 Fhem abstürzen lässt mit der Fehlermeldung &lt;br /&gt;
&amp;lt;pre&amp;gt;2016.10.01 08:51:00 1: PERL WARNING: Use of uninitialized value in division (/) at ./FHEM/50_HP1000.pm line 383.&lt;br /&gt;
Illegal division by zero at ./FHEM/50_HP1000.pm line 383.&amp;lt;/pre&amp;gt;&lt;br /&gt;
dann hilft es, die mit + markierten Zeilen (natürlich ohne die +-Zeichen selbst!) in 50_HP1000.pm im sub HP1000_GetSum (um Zeile 400) einzufügen:&lt;br /&gt;
&amp;lt;pre&amp;gt;    if ($avg) {&lt;br /&gt;
+     if (@{ $hash-&amp;gt;{helper}{history}{$t} } &amp;gt; 0) {&lt;br /&gt;
        $return = sprintf( &amp;quot;%.1f&amp;quot;,&lt;br /&gt;
            sum( @{ $hash-&amp;gt;{helper}{history}{$t} } ) /&lt;br /&gt;
              @{ $hash-&amp;gt;{helper}{history}{$t} } );&lt;br /&gt;
&lt;br /&gt;
        Log3 $name, 5, &amp;quot;HP1000 $name: Average for $t: $return&amp;quot;;&lt;br /&gt;
+     }&lt;br /&gt;
    }&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Falsch angezeigte/zu wenig Readings ===&lt;br /&gt;
Abhängig von der Firmwareversion und/oder dem Modell der Station kann es dazu kommen, dass teilweise nicht alle Readings oder die Readings mit den falschen Einheiten (z. B. Wingeschwindigkeit in mph, obwohl km/h konfiguriert wurde) angezeigt werden. In diesem Fall hilft es, im Webinterface der Wetterstation bei der Definition &amp;quot;Weather Network&amp;quot; den &amp;quot;Server Type&amp;quot; auf &amp;quot;JSP&amp;quot; zu stellen.&lt;br /&gt;
=== Keine Daten in Fhem ===&lt;br /&gt;
Wenn in Fhem keine Daten von der Wetterstation ankommen, liegt das häufig daran, dass FHEM nicht richtig als &amp;quot;Weather Network&amp;quot; konfiguriert wurde. Wenn die &#039;&#039;&#039;erforderlichen Eingaben im Webinterface&#039;&#039;&#039; (s. o.) der Station nicht helfen, kann man sich zum Testen per telnet mit der Wetterstation verbinden (Benutzername admin, Passwort admin). Mögliche Befehle:&lt;br /&gt;
&amp;lt;pre&amp;gt;help&lt;br /&gt;
quit&lt;br /&gt;
reboot&lt;br /&gt;
Usage: passwd&lt;br /&gt;
       Old Password:&lt;br /&gt;
       New Password:&lt;br /&gt;
       Re-enter New Password:&lt;br /&gt;
Usage: username &amp;lt;user name&amp;gt;&lt;br /&gt;
Usage: ipconfig&lt;br /&gt;
Usage: setip &amp;lt;ip addr&amp;gt;&lt;br /&gt;
Usage: setmask &amp;lt;netmask&amp;gt;&lt;br /&gt;
Usage: setgateway &amp;lt;ip addr&amp;gt;&lt;br /&gt;
Usage: setdns &amp;lt;ip addr&amp;gt;&lt;br /&gt;
Usage: setmode &amp;lt;mode&amp;gt;&lt;br /&gt;
       &amp;lt;mode&amp;gt;: 0: SERVER     1: CLIENT&lt;br /&gt;
Usage: setsrvport &amp;lt;port&amp;gt;&lt;br /&gt;
Usage: setdstport &amp;lt;port&amp;gt;&lt;br /&gt;
Usage: dhcpclient &amp;lt;status&amp;gt;&lt;br /&gt;
       &amp;lt;status&amp;gt;: 0: disable     1: enable&lt;br /&gt;
Usage: connectype &amp;lt;protocol&amp;gt;&lt;br /&gt;
       &amp;lt;protocol&amp;gt;: 0: TCP     1: UDP&lt;br /&gt;
Usage: transmitimer &amp;lt;time&amp;gt;&lt;br /&gt;
       &amp;lt;time&amp;gt;: time in ms&lt;br /&gt;
Usage: saveconfig&lt;br /&gt;
Usage: accessip &amp;lt;index&amp;gt; &amp;lt;ip addr&amp;gt;&lt;br /&gt;
       &amp;lt;index&amp;gt;:   index of accessible IP&lt;br /&gt;
       &amp;lt;ip addr&amp;gt;: accessible IP address&lt;br /&gt;
Usage: setaccip &amp;lt;mode&amp;gt;&lt;br /&gt;
       &amp;lt;mode&amp;gt;:  0: disable    1: enable&lt;br /&gt;
Usage: setaw &amp;lt;cold start&amp;gt; &amp;lt;authentication fail&amp;gt; &amp;lt;ip changed&amp;gt; &amp;lt;password changed&amp;gt;&lt;br /&gt;
       &amp;lt;cold start&amp;gt;:             0: Disable     1: Enable&lt;br /&gt;
       &amp;lt;authentication fail&amp;gt;:    0: Disable     1: Enable&lt;br /&gt;
       &amp;lt;ip changed&amp;gt;:             0: Disable     1: Enable&lt;br /&gt;
       &amp;lt;password changed&amp;gt;:       0: Disable     1: Enable&lt;br /&gt;
Usage: setdsthn &amp;lt;Host name/IP&amp;gt;&lt;br /&gt;
Usage: tftpsrv &amp;lt;ip addr&amp;gt;&lt;br /&gt;
Usage: filename &amp;lt;file name&amp;gt;&lt;br /&gt;
Usage: dlfirmware&lt;br /&gt;
Usage: seteep &amp;lt;HEX RegStartAddr&amp;gt; &amp;lt;HEX Byte 0&amp;gt; &amp;lt;HEX Byte 1&amp;gt;...&amp;lt;HEX Byte N&amp;gt;&lt;br /&gt;
Usage: dbgmsg &amp;lt;mode&amp;gt;&lt;br /&gt;
       &amp;lt;mode&amp;gt;: 0: Disable    1: Enable&lt;br /&gt;
Usage: connstatus&lt;br /&gt;
Usage: ping xxx.xxx.xxx.xxx&lt;br /&gt;
Usage: setRTC &amp;lt;HEX RegStartAddr&amp;gt; &amp;lt;HEX Byte 0&amp;gt; &amp;lt;HEX Byte 1&amp;gt;...&amp;lt;HEX Byte N&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Am besten mit &amp;quot;ipconfig&amp;quot; sich die aktuelle Konfiguration anzeigen lassen. Mit ping kann man Verbindungen z. B. zu Fhem testen.&lt;/div&gt;</summary>
		<author><name>Motivierte linke Hände</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SSCAM_-_Steuerung_von_Kameras_in_Synology_Surveillance_Station&amp;diff=16381</id>
		<title>SSCAM - Steuerung von Kameras in Synology Surveillance Station</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SSCAM_-_Steuerung_von_Kameras_in_Synology_Surveillance_Station&amp;diff=16381"/>
		<updated>2016-09-17T07:02:39Z</updated>

		<summary type="html">&lt;p&gt;Motivierte linke Hände: Hinweis, dass sendEmail, nicht sendmail für DebianMailnbl_send verwendet wird.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuerung von Kameras in Synology Surveillance Station&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=SSCam&lt;br /&gt;
|ModForumArea=Sonstiges&lt;br /&gt;
|ModTechName=49_SSCam.pm&lt;br /&gt;
|ModOwner=nasseeder1 (Forum: DS_Starter)}}&lt;br /&gt;
&lt;br /&gt;
== Zweckbeschreibung ==&lt;br /&gt;
&lt;br /&gt;
Mit diesem Modul können Operationen von in der Synology Surveillance Station (SVS) definierten Kameras ausgeführt werden.&lt;br /&gt;
Es basiert auf der SVS API und unterstützt die SVS ab Version 7. &lt;br /&gt;
Zur Zeit werden folgende Funktionen unterstützt: &lt;br /&gt;
&lt;br /&gt;
* Start einer Aufnahme&lt;br /&gt;
* Stop einer Aufnahme (per Befehl bzw. automatisch nach Ablauf der Aufnahmedauer)&lt;br /&gt;
* Aufnehmen eines Schnappschusses und Ablage in der Synology Surveillance Station&lt;br /&gt;
* Deaktivieren einer Kamera in Synology Surveillance Station&lt;br /&gt;
* Aktivieren einer Kamera in Synology Surveillance Station&lt;br /&gt;
* Steuerung der Belichtungsmodi Tag, Nacht bzw. Automatisch&lt;br /&gt;
* Umschaltung der Ereigniserkennung durch Kamera, durch SVS oder deaktiviert&lt;br /&gt;
* Abfrage von Kameraeigenschaften (auch mit Polling) sowie den Eigenschaften des installierten SVS-Paketes&lt;br /&gt;
* Bewegen an eine vordefinierte Preset-Position (bei PTZ-Kameras)&lt;br /&gt;
* Start einer vordefinierten Überwachungstour (bei PTZ-Kameras)&lt;br /&gt;
* Positionieren von PTZ-Kameras zu absoluten X/Y-Koordinaten&lt;br /&gt;
* kontinuierliche Bewegung von PTZ-Kameras&lt;br /&gt;
* auslösen externer Ereignisse 1-10 (Aktionsregel SVS) &lt;br /&gt;
* starten und beenden von Kamera-Livestreams&lt;br /&gt;
* Abruf und Ausgabe der Kamera Streamkeys sowie Stream-Urls (zur Nutzung von Kamera-Livestreams ohne Session Id) &lt;br /&gt;
* abspielen der letzten Aufnahme&lt;br /&gt;
&lt;br /&gt;
Die Aufnahmen stehen in der Synology Surveillance Station (SVS) zur Verfügung und unterliegen, wie jede andere Aufnahme, den in der Synology Surveillance Station eingestellten Regeln.&lt;br /&gt;
So werden zum Beispiel die Aufnahmen entsprechend ihrer Archivierungsfrist gespeichert und dann gelöscht. &lt;br /&gt;
&lt;br /&gt;
Wenn sie über dieses Modul diskutieren oder zur Verbesserung des Moduls beitragen möchten, ist im FHEM-Forum ein Sammelplatz unter:&amp;lt;br&amp;gt;&lt;br /&gt;
{{Link2Forum|Topic=45671.0 |LinkText=49_SSCam: Fragen, Hinweise, Neuigkeiten und mehr rund um dieses Modul}} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung ==&lt;br /&gt;
&lt;br /&gt;
Dieses Modul nutzt das Perl-Modul JSON. Bitte darauf achten dieses Paket zu installieren. (Debian: apt-get install libjson-perl).&lt;br /&gt;
SSCAM verwendet für HTTP-Calls die nichtblockierenden Funktionen von HttpUtils bzw. HttpUtils_NonblockingGet.&lt;br /&gt;
Im DSM bzw. der Synology Surveillance Station muß ein Nutzer für den Zugriff aus FHEM angelegt sein. Die Zugangsdaten für diesen Nutzer werden später über ein Set-Kommando dem angelegten Gerät zugewiesen. &amp;lt;br&amp;gt;&lt;br /&gt;
Nähere Informationen dazu unter [[#Credentials | Credentials]].&lt;br /&gt;
&lt;br /&gt;
Überblick über die Perl-Module welche von SSCam genutzt werden: &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    JSON            &lt;br /&gt;
    Data::Dumper                     &lt;br /&gt;
    MIME::Base64   &lt;br /&gt;
    Time::HiRes    &lt;br /&gt;
    HttpUtils       (FHEM-Modul)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Define ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    define &amp;lt;name&amp;gt; SSCam &amp;lt;Kameraname in SVS&amp;gt; &amp;lt;ServerAddr&amp;gt; [Port]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Definiert eine neue Kamera für SSCam. Zunächst muß diese Kamera in der Synology Surveillance Station 7.0 oder höher eingebunden sein und entsprechend funktionieren.&lt;br /&gt;
&lt;br /&gt;
Das Modul SSCam basiert auf Funktionen der Synology Surveillance Station API.&lt;br /&gt;
Weitere Informationen unter: [http://global.download.synology.com/download/Document/DeveloperGuide/Surveillance_Station_Web_API_v2.0.pdf Web API Guide].&lt;br /&gt;
&lt;br /&gt;
Momentan wird nur das HTTP-Protokoll unterstützt um die Web-Services der Synology DS aufzurufen.&lt;br /&gt;
&lt;br /&gt;
Die Parameter beschreiben im Einzelnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    name :	    der Name des neuen Gerätes in FHEM&lt;br /&gt;
    Kameraname :    Kameraname wie er in der Synology Surveillance Station angegeben ist. Leerzeichen im Namen sind nicht erlaubt !&lt;br /&gt;
    ServerAddr :    die IP-Addresse des Synology Surveillance Station Host. &lt;br /&gt;
                    Achtung: Es sollte kein Servername verwendet werden weil DNS-Aufrufe in FHEM blockierend sind&lt;br /&gt;
    Port :	    optional - der Port des Synology Surveillance Station Host. &lt;br /&gt;
                    Wenn nicht angegeben, wird der Standardport 5000 gesetzt(nur HTTP)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
          define CamCP SSCAM Carport 192.168.2.20 [5000]&lt;br /&gt;
&lt;br /&gt;
Wird eine neue Kamera definiert, wird diesem Device zunächst eine Standardaufnahmdauer von 15 zugewiesen. &lt;br /&gt;
Über das Attribut &amp;quot;rectime&amp;quot; kann die Aufnahmedauer für jede Kamera individuell angepasst werden. Der Wert &amp;quot;0&amp;quot; für &amp;quot;rectime&amp;quot; führt zu einer Endlosaufnahme die durch &#039;&#039;&#039;&amp;quot;set &amp;lt;name&amp;gt; off&amp;quot;&#039;&#039;&#039; gestoppt werden muß. Ein Logeintrag mit einem entsprechenden Hinweis auf diesen Umstand wird geschrieben. &lt;br /&gt;
&lt;br /&gt;
Wird das Attribut &amp;quot;rectime&amp;quot; gelöscht, greift wieder der Default-Wert (15s) für die Aufnahmedauer.&lt;br /&gt;
&lt;br /&gt;
Mit dem Befehl &#039;&#039;&#039;&amp;quot;set &amp;lt;name&amp;gt; on [rectime]&amp;quot;&#039;&#039;&#039; wird die Aufnahmedauer temporär festgelegt und überschreibt einmalig sowohl den Defaultwert als auch den Wert des gesetzten Attributs &amp;quot;rectime&amp;quot;. Auch in diesem Fall führt &amp;quot;set &amp;lt;name&amp;gt; on 0&amp;quot; zu einer Daueraufnahme.&lt;br /&gt;
&lt;br /&gt;
Eine eventuell in der SVS eingestellte Dauer der Voraufzeichnung wird weiterhin berücksichtigt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Credentials ===&lt;br /&gt;
&lt;br /&gt;
Nach dem Definieren des Gerätes müssen zuerst die Zugangsparameter gespeichert werden. Das geschieht mit dem Befehl:&lt;br /&gt;
 &lt;br /&gt;
     set &amp;lt;name&amp;gt; credentials &amp;lt;username&amp;gt; &amp;lt;password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Anwender kann in Abhängigkeit der beabsichtigten einzusetzenden Funktionen einen Nutzer im DSM bzw. in der Surveillance Station einrichten.&lt;br /&gt;
Ist der DSM-Nutzer der Gruppe Administratoren zugeordnet, hat er auf alle Funktionen Zugriff. Ohne diese Gruppenzugehörigkeit können nur Funktionen mit niedrigeren Rechtebedarf ausgeführt werden. Die benötigten Mindestrechte der Funktionen sind in der Tabelle weiter unten aufgeführt.&lt;br /&gt;
Alternativ zum DSM-Nutzer kann ein in der SVS angelegter Nutzer verwendet werden. Auch in diesem Fall hat ein Nutzer vom Typ Manager das Recht alle Funktionen auszuführen, wobei der Zugriff auf bestimmte Kameras/ im Privilegienprofil beschränkt werden kann (siehe Hilfefunktion in SVS).&lt;br /&gt;
Als Best Practice wird vorgeschlagen jeweils einen User im DSM und einen in der SVS anzulegen.&lt;br /&gt;
&lt;br /&gt;
* DSM-User als Mitglied der Admin-Gruppe: uneingeschränkter Test aller Modulfunktionen -&amp;gt; session:DSM&lt;br /&gt;
* SVS-User als Manager oder Betrachter: angepasstes Privilegienprofil -&amp;gt; session: SurveillanceStation &lt;br /&gt;
&lt;br /&gt;
Über das Attribut &amp;quot;session&amp;quot; kann ausgewählt werden, ob die Session mit dem DSM oder der SVS augebaut werden soll.&lt;br /&gt;
Erfolgt der Session-Aufbau mit dem DSM, stehen neben der SVS Web-API auch darüber hinaus gehende API Zugriffe zur Verfügung die unter Umständen zur Verarbeitung benötigt werden.&lt;br /&gt;
&lt;br /&gt;
Nach der Gerätedefinition ist die Grundeinstellung &amp;quot;Login in das DSM&amp;quot;, d.h. es können Credentials mit Admin-Berechtigungen genutzt werden um zunächst alle Funktionen der Kameras testen zu können. Danach können die Credentials z.B. in Abhängigkeit der benötigten Funktionen auf eine SVS-Session mit entsprechend beschränkten Privilegienprofil umgestellt werden.&lt;br /&gt;
&lt;br /&gt;
Die nachfolgende Aufstellung zeigt die Mindestanforderungen der jeweiligen Modulfunktionen an die Nutzerrechte. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
* set ... on	       session: ServeillanceStation - Betrachter mit erweiterten Privileg &amp;quot;manuelle Aufnahme&amp;quot;&lt;br /&gt;
* set ... off	       session: ServeillanceStation - Betrachter mit erweiterten Privileg &amp;quot;manuelle Aufnahme&amp;quot;&lt;br /&gt;
* set ... snap	       session: ServeillanceStation - Betrachter&lt;br /&gt;
* set ... disable      session: ServeillanceStation - Manager&lt;br /&gt;
* set ... enable       session: ServeillanceStation - Manager&lt;br /&gt;
* set ... expmode      session: ServeillanceStation - Manager &lt;br /&gt;
* set ... motdetsc     session: ServeillanceStation - Manager &lt;br /&gt;
* set ... goPreset     session: ServeillanceStation - Betrachter mit Privileg Objektivsteuerung der Kamera&lt;br /&gt;
* set ... runPatrol    session: ServeillanceStation - Betrachter mit Privileg Objektivsteuerung der Kamera&lt;br /&gt;
* set ... goAbsPTZ     session: ServeillanceStation - Betrachter mit Privileg Objektivsteuerung der Kamera&lt;br /&gt;
* set ... move         session: ServeillanceStation - Betrachter mit Privileg Objektivsteuerung der Kamera&lt;br /&gt;
* set ... runView      session: ServeillanceStation - Betrachter mit Privileg Liveansicht für Kamera&lt;br /&gt;
* set ... stopView     -&lt;br /&gt;
* set ... credentials  -&lt;br /&gt;
* set ... extevent     session: DSM - Nutzer Mitglied von Admin-Gruppe &lt;br /&gt;
* get ... caminfoall   session: ServeillanceStation - Betrachter &lt;br /&gt;
* get ... eventlist    session: ServeillanceStation - Betrachter&lt;br /&gt;
* get ... svsinfo      session: ServeillanceStation - Betrachter&lt;br /&gt;
* get ... svsinfo      session: ServeillanceStation - Betrachter &lt;br /&gt;
* get ... stmUrlPath   session: ServeillanceStation - Betrachter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== HTTP-Timeout setzen ===&lt;br /&gt;
&lt;br /&gt;
Alle Funktionen dieses Moduls verwenden HTTP-Aufrufe gegenüber der SVS Web API. &amp;lt;br&amp;gt;&lt;br /&gt;
Der Standardwert für den HTTP-Timeout beträgt 4 Sekunden. &lt;br /&gt;
Durch Setzen des Attributes &amp;quot;httptimeout&amp;quot; &amp;gt; 0 kann dieser Wert bei Bedarf entsprechend den technischen Gegebenheiten angepasst werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Set ==&lt;br /&gt;
&lt;br /&gt;
Es gibt zur Zeit folgende Optionen für &amp;quot;set &amp;lt;name&amp;gt; ...&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;quot;on [rectime]&amp;quot;:                                startet eine Aufnahme. Die Aufnahme wird automatisch nach Ablauf der Zeit [rectime] &lt;br /&gt;
                                                   gestoppt.&lt;br /&gt;
                                                   mit rectime = 0 wird eine Daueraufnahme gestartet die durch &amp;quot;set &amp;lt;name&amp;gt; off&amp;quot; &lt;br /&gt;
                                                   wieder gestoppt werden muß.&lt;br /&gt;
    &amp;quot;off&amp;quot; :                                        stoppt eine laufende Aufnahme manuell oder durch die Nutzung anderer Events &lt;br /&gt;
                                                   (z.B. über at, notify)&lt;br /&gt;
    &amp;quot;snap&amp;quot;:                                        löst einen Schnappschuß der entsprechenden Kamera aus und speichert ihn in der SVS&lt;br /&gt;
    &amp;quot;disable&amp;quot;:                                     deaktiviert eine Kamera in der Surveillance Station&lt;br /&gt;
    &amp;quot;enable&amp;quot;:                                      aktiviert eine Kamera in der Surveillance Station&lt;br /&gt;
    &amp;quot;credentials &amp;lt;username&amp;gt; &amp;lt;password&amp;gt;&amp;quot;:           speichert die Zugangsinformationen&lt;br /&gt;
    &amp;quot;expmode [ day | night | auto ]&amp;quot;:              aktiviert den Belichtungsmodus Tag, Nacht oder Automatisch&lt;br /&gt;
    &amp;quot;extevent [ 1-10 ]&amp;quot;: 	                   löst das externe Ereignis 1-10 aus (Aktionsregeleditor in SVS) &lt;br /&gt;
    &amp;quot;motdetsc [ by_camera | by_SVS | disable ]&amp;quot;:   schaltet die Bewegungserkennung in den gewünschten Modus &lt;br /&gt;
                                                   (durch Kamera, SVS, oder deaktiviert) &lt;br /&gt;
    &amp;quot;goPreset &amp;lt;Presetname&amp;gt;&amp;quot;:                       fährt eine PTZ-Kamera zu einer vordefinierten Preset-Position&lt;br /&gt;
    &amp;quot;runPatrol &amp;lt;Patrolname&amp;gt;&amp;quot;:                      startet eine vordefinierte Überwachungstour einer PTZ-Kamera&lt;br /&gt;
    &amp;quot;goAbsPTZ [ X Y | up | down | left | right ]&amp;quot;: positioniert eine PTZ-Kamera zu einer X/Y-Koordinate oder in Richtung up/down/left/right&lt;br /&gt;
    &amp;quot;move [ up | down | left | right | dir_X ]&amp;quot;:   startet kontinuerliche Bewegung einer PTZ-Kamera in Richtung up/down/left/right bzw. dir_X&lt;br /&gt;
    &amp;quot;runView [image | lastrec | lastrec_open | &lt;br /&gt;
     link | link_open &amp;lt;room&amp;gt;]&amp;quot;:                    startet einen Livestream bzw. die letzte Aufnahme als eingbettetes Image, als Link &lt;br /&gt;
                                                   oder öffnet diesen Medienstream sofort &lt;br /&gt;
    &amp;quot;stopView&amp;quot;:                                    Gegenteil von &amp;quot;runView&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
       &lt;br /&gt;
=== set &amp;lt;name&amp;gt; [on [rectime] | off] === &lt;br /&gt;
&lt;br /&gt;
Der Befehl &amp;quot;set &amp;lt;name&amp;gt; on&amp;quot; startet eine Aufnahme. Die Standardaufnahmedauer beträgt 15 Sekunden. Sie kann mit dem Attribut &amp;quot;rectime&amp;quot; individuell festgelegt werden. Die im Attribut (bzw. im Standard) hinterlegte Aufnahmedauer kann einmalig mit &amp;quot;set &amp;lt;name&amp;gt; on [rectime]&amp;quot; überschrieben werden.&lt;br /&gt;
Die Aufnahme stoppt automatisch nach Ablauf der Zeit &amp;quot;rectime&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Ein Sonderfall ist der Start einer Daueraufnahme mit &amp;quot;set &amp;lt;name&amp;gt; on 0&amp;quot; bzw. dem Attributwert &amp;quot;rectime = 0&amp;quot;. In diesem Fall wird eine Daueraufnahme gestartet die explizit wieder mit dem Befehl &amp;quot;&amp;quot;set &amp;lt;name&amp;gt; off&amp;quot; gestoppt werden muß.&lt;br /&gt;
&lt;br /&gt;
Das Aufnahmeverhalten kann weiterhin mit dem Attribut &amp;quot;recextend&amp;quot; wie folgt beeinflusst werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Attribut &amp;quot;recextend = 0&amp;quot; bzw. nicht gesetzt (Standard):&#039;&#039;&#039;&lt;br /&gt;
* wird eine Aufnahme mit z.B. rectime=22 gestartet, wird kein weiterer Startbefehl für eine Aufnahme akzeptiert bis diese gestartete Aufnahme nach 22 Sekunden beendet ist. Ein Hinweis wird bei verbose=3 im Logfile protokolliert.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Attribut &amp;quot;recextend = 1&amp;quot; gesetzt:&#039;&#039;&#039;&lt;br /&gt;
* eine zuvor gestartete Aufnahme wird bei einem erneuten &amp;quot;set &amp;lt;name&amp;gt; on&amp;quot;-Befehl mit der Aufnahmezeit &amp;quot;rectime&amp;quot; neu parametrisiert. Das bedeutet, dass der Timer für den automatischen Stop auf den Wert &amp;quot;rectime&amp;quot; neu gesetzt wird. Dieser Vorgang wiederholt sich mit jedem Start-Befehl. Dadurch verlängert sich eine laufende Aufnahme bis kein Start-Inpuls mehr registriert wird.&lt;br /&gt;
&lt;br /&gt;
* eine zuvor gestartete Endlos-Aufnahme wird mit einem erneuten &amp;quot;set &amp;lt;name&amp;gt; on&amp;quot;-Befehl nach der Aufnahmezeit &amp;quot;rectime&amp;quot; gestoppt (Timerneustart). Ist dies nicht gewünscht, ist darauf zu achten dass bei der Verwendung einer Endlos-Aufnahme das Attribut &amp;quot;recextend&amp;quot; nicht verwendet wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Beispiele für einfache Operationen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   set &amp;lt;name&amp;gt; on [rectime] :   startet die Aufnahme der Kamera &amp;lt;name&amp;gt;. &lt;br /&gt;
   set &amp;lt;name&amp;gt; off :            stoppt die Aufnahme der Kamera &amp;lt;name&amp;gt;&lt;br /&gt;
   set &amp;lt;name&amp;gt; disable :        deaktiviert die Kamera &amp;lt;name&amp;gt; in der Surveillance Station&lt;br /&gt;
   set &amp;lt;name&amp;gt; enable :         aktiviert die Kamera &amp;lt;name&amp;gt; in der Surveillance Station&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In der SVS kann unter Aufnahmeeinstellungen der Kamera eine Vor-Aufnahmezeit eingestellt werden. Die Einstellung wird von der SVS bezüglich der Gesamtaufnahmezeit automatisch mit berücksichtigt. &lt;br /&gt;
&lt;br /&gt;
Eine eingestellte Vor-Aufnahmezeit von z.B. 10s und eine rectime von 20s führt zu einer Gesamtaufnahmezeit von 30s (zzgl. Prozesszeit zur Befehlsabarbeitung).&lt;br /&gt;
&lt;br /&gt;
=== set &amp;lt;name&amp;gt; snap === &lt;br /&gt;
&lt;br /&gt;
Ein Schnappschuß kann ausgelöst werden durch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  set &amp;lt;name&amp;gt; snap&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Soll eine Reihe Schnappschüsse ausgelöst werden wenn eine Aufnahme startet, kann das durch folgendes notify geschehen.&lt;br /&gt;
Wird der Start der Kamera CamHE1 ausgelöst (vorher Attribut event-on-change-reading -&amp;gt; &amp;quot;Record&amp;quot; setzen), werden 3 Snapshots im Abstand von 2 Sekunden getriggert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define he1_snap_3 notify CamHE1:Record.*on define h3 at +*{3}00:00:02 set CamHE1 snap&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Triggern von 2 Schnappschüssen der Kamera &amp;quot;CamHE1&amp;quot; im Abstand von 6 Sekunden nachdem der Bewegungsmelder &amp;quot;MelderHE1&amp;quot; einen Event gesendet hat, kann z.B. mit folgendem notify geschehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define he1_snap_2 notify MelderHE1:on.* define h2 at +*{2}00:00:06 set CamHE1 snap&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es wird die ID des letzten Snapshots als Wert der Variable &amp;quot;LastSnapId&amp;quot; in den Readings der Kamera ausgegeben.&lt;br /&gt;
&lt;br /&gt;
=== set &amp;lt;name&amp;gt; [enable] [disable] === &lt;br /&gt;
&lt;br /&gt;
Um eine Liste von Kameras oder alle Kameras (mit Regex) zum Beispiel um 21:46 zu deaktivieren / zu aktivieren zwei Beispiele mit at:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define a13 at 21:46 set CamCP1,CamFL,CamHE1,CamTER disable (enable)&lt;br /&gt;
 define a14 at 21:46 set Cam.* disable (enable)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Etwas komfortabler gelingt das Schalten aller Kameras über einen Dummy.&lt;br /&gt;
Zunächst wird der Dummy angelegt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define allcams dummy&lt;br /&gt;
 attr allcams eventMap on:enable off:disable&lt;br /&gt;
 attr allcams room Cams&lt;br /&gt;
 attr allcams webCmd enable:disable&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durch Verknüpfung mit zwei angelegten notify, jeweils ein notify für &amp;quot;enable&amp;quot; und &amp;quot;disable&amp;quot;, kann man durch Schalten des Dummys auf &amp;quot;enable&amp;quot; bzw. &amp;quot;disable&amp;quot; alle Kameras auf einmal aktivieren bzw. deaktivieren.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define all_cams_disable notify allcams:.*off set CamCP1,CamFL,CamHE1,CamTER disable&lt;br /&gt;
 attr all_cams_disable room Cams&lt;br /&gt;
 &lt;br /&gt;
 define all_cams_enable notify allcams:on set CamCP1,CamFL,CamHE1,CamTER enable&lt;br /&gt;
 attr all_cams_enable room Cams&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== set &amp;lt;name&amp;gt; expmode [day] [night] [auto] === &lt;br /&gt;
&lt;br /&gt;
Mit diesem Befehl kann der Belichtungsmodus der Kameras gesetzt werden. Dadurch wird z.B. das Verhalten der Kamera-LED&#039;s entsprechend gesteuert. Die erfolgreiche Umschaltung wird durch das Reading CamExposureMode (&amp;quot;get ... caminfoall&amp;quot;) reportet.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Die erfolgreiche Ausführung dieser Funktion ist davon abhängig ob die SVS diese Funktionalität der Kamera unterstützt. Ist in SVS -&amp;gt; IP-Kamera -&amp;gt; Optimierung -&amp;gt; Belichtungsmodus das Feld für den Tag/Nachtmodus grau hinterlegt, ist nicht von einer lauffähigen Unterstützung dieser Funktion auszugehen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== set &amp;lt;name&amp;gt; motdetsc [camera] [SVS] [disable] (geändert ab Rev 11284) ===&lt;br /&gt;
&lt;br /&gt;
Der Befehl &amp;quot;motdetsc&amp;quot; (steht für &amp;quot;motion detection source&amp;quot;) schaltet die Bewegungserkennung in den gewünschten Modus.&lt;br /&gt;
Wird die Bewegungserkennung durch die Kamera / SVS ohne weitere Optionen eingestellt, werden die momentan gültigen Bewegungserkennungsparameter der Kamera / SVS beibehalten. &lt;br /&gt;
Die erfolgreiche Ausführung der Operation lässt sich u.a. anhand des Status von SVS -&amp;gt; IP-Kamera -&amp;gt; Ereigniserkennung -&amp;gt; Bewegung nachvollziehen.&lt;br /&gt;
&lt;br /&gt;
Für die Bewegungserkennung durch SVS bzw. durch Kamera können weitere Optionen angegeben werden. Die verfügbaren Optionen bezüglich der Bewegungserkennung durch SVS sind &amp;quot;Empfindlichkeit&amp;quot; und &amp;quot;Schwellwert&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 set &amp;lt;name&amp;gt; motdetsc SVS [Empfindlichkeit] [Schwellwert]     # Befehlsmuster&lt;br /&gt;
 set &amp;lt;name&amp;gt; motdetsc SVS 91 30                               # setzt die Empfindlichkeit auf 91 und den Schwellwert auf 30&lt;br /&gt;
 set &amp;lt;name&amp;gt; motdetsc SVS 0 40                                # behält gesetzten Wert für Empfindlichkeit bei, setzt Schwellwert auf 40&lt;br /&gt;
 set &amp;lt;name&amp;gt; motdetsc SVS 15                                  # setzt die Empfindlichkeit auf 15, Schwellwert bleibt unverändert &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wird die Bewegungserkennung durch die Kamera genutzt, stehen die Optionen &amp;quot;Empfindlichkeit&amp;quot;, &amp;quot;Objektgröße&amp;quot; und &amp;quot;Prozentsatz für Auslösung&amp;quot; zur Verfügung. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 set &amp;lt;name&amp;gt; motdetsc camera [Empfindlichkeit] [Schwellwert] [Prozentsatz]    # Befehlsmuster&lt;br /&gt;
 set &amp;lt;name&amp;gt; motdetsc camera 89 0 20                                          # setzt die Empfindlichkeit auf 89, Prozentsatz auf 20&lt;br /&gt;
 set &amp;lt;name&amp;gt; motdetsc camera 90 40 10                                         # setzt Empfindlichkeit auf 90, Schwellwert auf 40, &lt;br /&gt;
                                                                               Prozentsatz auf 10&lt;br /&gt;
 set &amp;lt;name&amp;gt; motdetsc camera 30                                               # setzt die Empfindlichkeit auf 30, andere Werte bleiben &lt;br /&gt;
                                                                               unverändert &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es ist immer die Reihenfolge der Optionswerte zu beachten. Nicht gewünschte Optionen sind mit &amp;quot;0&amp;quot; zu besetzen sofern danach Optionen folgen deren Werte verändert werden sollen (siehe Beispiele oben). Der Zahlenwert der Optionen beträgt 1 - 99 (außer Sonderfall &amp;quot;0&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Die jeweils verfügbaren Optionen unterliegen der Funktion der Kamera und der Unterstützung durch die SVS. Es können jeweils nur die Optionen genutzt werden die in SVS -&amp;gt; Kamera bearbeiten -&amp;gt; Ereigniserkennung zur Verfügung stehen. Weitere Infos sind der Online-Hilfe zur SVS zu entnehmen.&lt;br /&gt;
&lt;br /&gt;
Über den Befehl &amp;quot;get ... caminfoall&amp;quot; wird auch das Reading &amp;quot;CamMotDetSc&amp;quot; aktualisiert welches die gegenwärtige Einstellung der Bewegungserkennung dokumentiert. Es werden nur die Parameter und Parameterwerte angezeigt, welche die SVS aktiv unterstützt. Die Kamera selbst kann weiterführende Einstellmöglichkeiten besitzen.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CamMotDetSc    SVS, sensitivity: 76, threshold: 55&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== set &amp;lt;name&amp;gt; goPreset &amp;lt;Preset&amp;gt; === &lt;br /&gt;
  &lt;br /&gt;
Mit diesem Kommando können PTZ-Kameras in eine vordefininierte Position bewegt werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Die Preset-Positionen müssen dazu zunächst in der Synology Surveillance Station angelegt worden sein. Das geschieht in der PTZ-Steuerung im IP-Kamera Setup.&lt;br /&gt;
Die Presets werden über das Kommando &amp;quot;set &amp;amp;lt;name&amp;amp;gt; getinfo&amp;quot; eingelesen (geschieht bei restart von FHEM automatisch). Der Einlesevorgang kann durch ein Kamerapolling&lt;br /&gt;
regelmäßig wiederholt werden. Ein langes Pollingintervall ist in diesem Fall empfehlenswert da die Presetpositionen sich nur im Fall der Neuanlage bzw. Änderung verändern werden. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
Hier ein Beispiel einer PTZ-Steuerung in Abhängigkeit eines IR-Melder Events:&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
    define CamFL.Preset.Wandschrank notify MelderTER:on.* set CamFL goPreset Wandschrank, ;; define CamFL.Preset.record &lt;br /&gt;
    at +00:00:10 set CamFL on 5 ;;;; define s3 at +*{3}00:00:05 set CamFL snap ;; define CamFL.Preset.back at +00:00:30 set CamFL goPreset Home&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
Funktionsweise: &amp;lt;br&amp;gt;&lt;br /&gt;
Der IR-Melder &amp;quot;MelderTER&amp;quot; registriert eine Bewegung. Daraufhin wird die Kamera CamFL in die Preset-Position &amp;quot;Wandschrank&amp;quot; gebracht. Eine Aufnahme mit Dauer von 5 Sekunden startet 10 Sekunden&lt;br /&gt;
später. Da die Voraufnahmezeit der Kamera 10s beträgt (vgl. Reading &amp;quot;CamPreRecTime&amp;quot;), startet die effektive Aufnahme wenn der Kameraschwenk beginnt. &amp;lt;br&amp;gt;&lt;br /&gt;
Mit dem Start der Aufnahme werden drei Schnappschüsse im Abstand von 5 Sekunden angefertigt. &amp;lt;br&amp;gt;&lt;br /&gt;
Nach einer Zeit von 30 Sekunden fährt die Kamera wieder zurück in die &amp;quot;Home&amp;quot;-Position. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
Ein Auszug aus dem Log verdeutlicht den Ablauf:&lt;br /&gt;
  &lt;br /&gt;
&amp;lt;pre&amp;gt;  &lt;br /&gt;
   2016.02.04 15:02:14 2: CamFL - Camera Flur_Vorderhaus has moved to position &amp;quot;Wandschrank&amp;quot;&lt;br /&gt;
   2016.02.04 15:02:24 2: CamFL - Camera Flur_Vorderhaus Recording with Recordtime 5s started&lt;br /&gt;
   2016.02.04 15:02:29 2: CamFL - Snapshot of Camera Flur_Vorderhaus has been done successfully&lt;br /&gt;
   2016.02.04 15:02:30 2: CamFL - Camera Flur_Vorderhaus Recording stopped&lt;br /&gt;
   2016.02.04 15:02:34 2: CamFL - Snapshot of Camera Flur_Vorderhaus has been done successfully&lt;br /&gt;
   2016.02.04 15:02:39 2: CamFL - Snapshot of Camera Flur_Vorderhaus has been done successfully&lt;br /&gt;
   2016.02.04 15:02:44 2: CamFL - Camera Flur_Vorderhaus has moved to position &amp;quot;Home&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== set &amp;lt;name&amp;gt; runPatrol &amp;lt;Patrolname&amp;gt; === &lt;br /&gt;
&lt;br /&gt;
Dieses Kommando startet die vordefinierterte Überwachungstour einer PTZ-Kamera. &amp;lt;br&amp;gt;&lt;br /&gt;
Die Überwachungstouren müssen dazu zunächst in der Synology Surveillance Station angelegt worden sein. Das geschieht in der PTZ-Steuerung im IP-Kamera Setup -&amp;gt; PTZ-Steuerung -&amp;gt; Überwachung.&lt;br /&gt;
&lt;br /&gt;
Die Überwachungstouren (Patrols) werden über das Kommando &amp;quot;get &amp;lt;name&amp;gt; caminfoall&amp;quot; eingelesen, welches beim Restart von FHEM automatisch abgearbeitet wird. Der Einlesevorgang kann durch ein Kamerapolling regelmäßig wiederholt werden. Ein langes Pollingintervall ist in diesem Fall empfehlenswert, da sich die Überwachungstouren nur im Fall der Neuanlage bzw. Änderung verändern werden.&lt;br /&gt;
&lt;br /&gt;
Nähere Informationen zur Anlage von Überwachungstouren sind in der Hilfe zur Surveillance Station enthalten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== set &amp;lt;name&amp;gt; goAbsPTZ [ X Y | up | down | left | right ] === &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mit diesem Kommando wird eine PTZ-Kamera in Richtung einer wählbaren absoluten X/Y-Koordinate bewegt, oder zur maximalen Absolutposition in Richtung up/down/left/right.&lt;br /&gt;
Die Option ist nur für Kameras verfügbar die das Reading &amp;quot;CapPTZAbs=true&amp;quot; (die Fähigkeit für PTZAbs-Aktionen) besitzen. Die Eigenschaften der Kamera kann mit &amp;quot;get &amp;lt;name&amp;gt; caminfoall&amp;quot; abgefragt werden.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel für Ansteuerung absoluter X/Y-Koordinaten: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 set &amp;lt;name&amp;gt; goAbsPTZ 120 450&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Dieses Beispiel bewegt die Kameralinse in die Position X=120 und Y=450. &amp;lt;br&amp;gt;&lt;br /&gt;
Der Wertebereich ist dabei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 X = 0 - 640      (0 - 319 bewegt nach links, 321 - 640 bewegt nach rechts, 320 bewegt die Linse nicht)&lt;br /&gt;
 Y = 0 - 480      (0 - 239 bewegt nach unten, 241 - 480 bewegt nach oben, 240 bewegt die Linse nicht) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Linse kann damit in kleinsten bis sehr großen Schritten in die gewünschte Richtung bewegt werden. Dieser Vorgang muß ggf. mehrfach wiederholt werden um die Kameralinse in die gewünschte Position zu bringen. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Soll die Bewegung mit der maximalen Schrittweite erfolgen, kann zur Vereinfachung der Befehl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 set &amp;lt;name&amp;gt; goAbsPTZ up [down ] [left] [right]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
verwendet werden. Die Optik wird in diesem Fall mit der größt möglichen Schrittweite zur Absolutposition in der angegebenen Richtung bewegt. Auch in diesem Fall muß der Vorgang ggf. mehrfach wiederholt werden um die Kameralinse in die gewünschte Position zu bringen. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== set &amp;lt;name&amp;gt; move [ up | down | left | right | dir_X ] [Sekunden] === &lt;br /&gt;
&lt;br /&gt;
Mit diesem Kommando wird eine kontinuierliche Bewegung der PTZ-Kamera gestartet. Neben den vier Grundrichtungen up/down/left/right stehen auch Zwischenwinkelmaße &amp;quot;dir_X&amp;quot; zur Verfügung. Die Feinheit dieser Graduierung ist von der Kamera abhängig und kann dem Reading &amp;quot;CapPTZDirections&amp;quot; entnommen werden.&lt;br /&gt;
&lt;br /&gt;
Das Bogenmaß von 360 Grad teilt sich durch den Wert von &amp;quot;CapPTZDirections&amp;quot; und beschreibt die Bewegungsrichtungen beginnend mit &amp;quot;0=rechts&amp;quot; entgegen dem Uhrzeigersinn. D.h. bei einer Kamera mit &amp;quot;CapPTZDirections = 8&amp;quot; bedeutet dir_0 = rechts, dir_2 = oben, dir_4 = links, dir_6 = unten bzw. dir_1, dir_3, dir_5 und dir_7 die entsprechenden Zwischenrichtungen. Die möglichen Bewegungsrichtungen bei Kameras mit &amp;quot;CapPTZDirections = 32&amp;quot; sind dementsprechend kleinteliger.&lt;br /&gt;
&lt;br /&gt;
Im Gegensatz zum &amp;quot;set &amp;lt;name&amp;gt; goAbsPTZ&amp;quot;-Befehl startet der Befehl &amp;quot;set &amp;lt;name&amp;gt; move&amp;quot; eine kontinuierliche Bewegung bis ein Stop-Kommando empfangen wird. Das Stop-Kommando wird nach Ablauf der optional anzugebenden Zeit [Sekunden] ausgelöst. Wird diese Laufzeit nicht angegeben, wird implizit Sekunde = 1 gesetzt.&lt;br /&gt;
&lt;br /&gt;
Beispiele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 set &amp;lt;name&amp;gt; move up 0.5          : bewegt die Linse 0,5 Sekunden (zzgl. Prozesszeit) nach oben (zzgl. Prozesszeit)&lt;br /&gt;
 set &amp;lt;name&amp;gt; move dir_1 1.5       : bewegt die Linse 1,5 Sekunden (zzgl. Prozesszeit) nach rechts-oben &lt;br /&gt;
 set &amp;lt;name&amp;gt; move dir_20 0.7      : bewegt die Linse 1,5 Sekunden (zzgl. Prozesszeit) nach links-unten bei &amp;quot;CapPTZDirections = 32&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== set &amp;lt;name&amp;gt; runView [ image | lastrec | lastrec_open | link | link_open &amp;lt;room&amp;gt;] === &lt;br /&gt;
&lt;br /&gt;
Mit &amp;quot;image, link, link_open&amp;quot; Es wird ein Livestream (mjpeg-Stream) der Kamera, entweder als eingebettetes Image oder als generierter Link, gestartet.&lt;br /&gt;
Der Zugriff auf die letzte Aufnahme einer Kamera kann über die Zusätze &amp;quot;lastrec&amp;quot; bzw. &amp;quot;lastrec_open&amp;quot; erfolgen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  attr &amp;lt;name&amp;gt; htmlattr target=_blank width=&amp;quot;500&amp;quot; height=&amp;quot;375&amp;quot;&lt;br /&gt;
  attr &amp;lt;name&amp;gt; htmlattr target=_blank width=500,height=375&lt;br /&gt;
  attr &amp;lt;name&amp;gt; htmlattr width=700,height=525,top=200,left=300&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Verhalten des Livestreams im FHEMWEB kann durch Angaben im Attribut &amp;quot;htmlattr&amp;quot; beeinflusst werden.&lt;br /&gt;
Mit diesen Attributwerten öffnet der Link als weiteres Fenster/Browsertab. Wird der Stream als Image gestartet, ändert sich die Größe entsprechend der Angaben von Width und Height.&lt;br /&gt;
Das Kommando &amp;lt;b&amp;gt;&amp;quot;set &amp;lt;name&amp;gt; runView link_open&amp;quot;&amp;lt;/b&amp;gt; startet den Livestreamlink sofort in einem neuen Browsertab (longpoll=1 muß für WEB gesetzt sein).&lt;br /&gt;
Dabei wird für jede aktive FHEM-Session eine Fensteröffnung initiiert. Soll dieses Verhalten geändert werden, kann &amp;lt;b&amp;gt;&amp;quot;set &amp;lt;name&amp;gt; runView link_open &amp;lt;room&amp;gt;&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
verwendet werden um das Öffnen des Browserwindows in einem beliebigen, in einer FHEM-Session angezeigten Raum &amp;lt;room&amp;gt;, zu initiieren.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das gesetzte Attribut &amp;quot;livestreamprefix&amp;quot; überschreibt im Reading &amp;quot;LiveStreamUrl&amp;quot; die Angaben für Protokoll, Servername und Port. Damit kann z.B. die LiveStreamUrl für den Versand und externen Zugriff auf die SVS modifiziert werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 attr &amp;lt;name&amp;gt; livestreamprefix https://&amp;lt;Servername&amp;gt;:&amp;lt;Port&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Livestream wird über das Kommando &amp;quot;set &amp;lt;name&amp;gt; stopView&amp;quot; wieder beendet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== set &amp;lt;name&amp;gt; extevent [ 1-10 ]  === &lt;br /&gt;
&lt;br /&gt;
Dieses Kommando triggert ein externes Ereignis (1-10) in der SVS. Die Aktionen, die dieses Ereignis auslöst, sind zuvor in dem Aktionsregeleditor der SVS einzustellen. Es stehen die Ereignisse 1-10 zur Verfügung. In der Banchrichtigungs-App der SVS können auch Email, SMS oder Mobil (DS-Cam) Nachrichten ausgegeben werden wenn ein externes Ereignis ausgelöst wurde. Nähere Informationen dazu sind in der Hilfe zum Aktionsregeleditor zu finden. Der verwendete User benötigt Admin-Rechte in einer DSM-Session.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Get ==&lt;br /&gt;
&lt;br /&gt;
Mit SSCam können die Eigenschaften der Kameras aus der Surveillance Station abgefragt werden. Dazu steht der Befehl zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 get &amp;lt;name&amp;gt; caminfoall&lt;br /&gt;
 get &amp;lt;name&amp;gt; eventlist&lt;br /&gt;
 get &amp;lt;name&amp;gt; stmUrlPath&lt;br /&gt;
 get &amp;lt;name&amp;gt; svsinfo&lt;br /&gt;
 get &amp;lt;name&amp;gt; snapfileinfo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit dem Befehl &amp;quot;get &amp;lt;name&amp;gt; caminfoall&amp;quot; werden abhängig von der Art der Kamera (z.B. Fix- oder PTZ-Kamera) die verfügbaren Eigenschaften ermittelt und als Readings zur Verfügung gestellt.&lt;br /&gt;
So wird zum Beispiel das Reading &amp;quot;Availability&amp;quot; auf &amp;quot;disconnected&amp;quot; gesetzt falls die Kamera von der Surveillance Station getrennt wird und kann für weitere Verarbeitungen genutzt werden.&lt;br /&gt;
Durch &amp;quot;get &amp;lt;name&amp;gt; eventlist&amp;quot; wird das Reading &amp;quot;CamEventNum&amp;quot; aktualisiert, welches die Gesamtanzahl der registrierten Kameraevents enthält.&lt;br /&gt;
Mit &amp;quot;get &amp;lt;name&amp;gt; snapfileinfo&amp;quot; wird der Filename des letzten Schnapschusses ermittelt. Der Befehl wird implizit mit &amp;quot;get &amp;lt;name&amp;gt; snap&amp;quot; ausgeführt. &lt;br /&gt;
&lt;br /&gt;
Der Befehl &amp;quot;get &amp;lt;name&amp;gt; svsinfo&amp;quot; ist eigentlich nicht von der Kamera abhängig, sondern ermittelt vielmehr allgemeine Informationen zur installierten SVS-Version und andere Eigenschaften.&lt;br /&gt;
Die Funktionen &amp;quot;caminfoall&amp;quot; und &amp;quot;svsinfo&amp;quot; werden einmalig automatisch beim Start von FHEM ausgeführt um steuerungsrelevante Informationen zu sammeln.&lt;br /&gt;
Es ist darauf zu achten dass vorher die Credentials gespeichert wurden !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;get &amp;lt;name&amp;gt; stmUrlPath&#039;&#039;&#039;&lt;br /&gt;
  &lt;br /&gt;
Mit diesem Kommando wird der aktuelle Streamkey der Kamera abgerufen und das Reading mit dem Key-Wert gefüllt. Dieser Streamkey kann verwendet werden um eigene Aufrufe eines Livestreams aufzubauen (siehe Beispiel). Wenn das Attribut &amp;quot;showStmInfoFull&amp;quot; gesetzt ist, werden zusaätzliche Stream-Informationen wie &amp;quot;StmKeyUnicst&amp;quot;, &amp;quot;StmKeymjpegHttp&amp;quot; ausgegeben. Diese Readings enthalten die gültigen Stream-Pfade zu einem Livestream und können z.B. versendet und von einer entsprechenden Anwendung ohne session Id geöffnet werden. Wenn das Attribut &amp;quot;livestreamprefix&amp;quot; (Format: &amp;quot;http(s)://&amp;amp;lt;hostname&amp;amp;gt;&amp;amp;lt;port&amp;amp;gt;) gesetzt ist, wird der Servername und Port überschrieben soweit es sinnvoll ist. Wird Polling der Kameraeigenschaften genutzt, wird die stmUrlPath-Funktion automatisch mit ausgeführt.&lt;br /&gt;
  &lt;br /&gt;
Beispiel für den Aufbau eines Http-Calls zu einem Livestream mit StmKey: &lt;br /&gt;
  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http(s)://&amp;amp;lt;hostname&amp;amp;gt;&amp;amp;lt;port&amp;amp;gt;/webapi/entry.cgi?api=SYNO.SurveillanceStation.VideoStreaming&amp;amp;version=1&amp;amp;method=Stream&amp;amp;format=mjpeg&amp;amp;cameraId=5StmKey=&amp;quot;31fd87279976d89bb98409728cced890&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
cameraId (INTERNAL), StmKey müssen durch gültige Werte ersetzt werden.&lt;br /&gt;
  &lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039;&lt;br /&gt;
  &lt;br /&gt;
Falls der Stream-Aufruf versendet und von extern genutzt wird sowie hostname / port durch gültige Werte ersetzt und die Routerports entsprechend geöffnet werden, ist darauf zu achten dass diese sensiblen Daten nicht durch unauthorisierte Personen für den Zugriff genutzt werden können !   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Polling der Kameraeigenschaften:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Die Abfrage der Kameraeigenschaften erfolgt automatisch, wenn das Attribut &amp;quot;pollcaminfoall&amp;quot; (siehe Attribute) mit einem Wert &amp;gt; 10 gesetzt wird. Per Default ist das Attribut &amp;quot;pollcaminfoall&amp;quot; nicht gesetzt und das automatische Polling nicht aktiv. Der Wert dieses Attributes legt das Intervall der Abfrage in Sekunden fest. Ist das Attribut nicht gesetzt oder &amp;lt; 10 wird kein automatisches Polling gestartet bzw. gestoppt wenn vorher der Wert &amp;gt; 10 gesetzt war.&lt;br /&gt;
&lt;br /&gt;
Das Attribut &amp;quot;pollcaminfoall&amp;quot; wird durch einen Watchdog-Timer überwacht. Änderungen des Attributwertes werden alle 90 Sekunden ausgewertet und entsprechend umgesetzt. Eine Änderung des Pollingstatus / Pollingintervalls wird im FHEM-Logfile protokolliert. Diese Protokollierung kann durch Setzen des Attributes &amp;quot;pollnologging&amp;quot; abgeschaltet werden. Dadurch kann ein unnötiges Anwachsen des Logs vermieden werden. Ab verbose=4 wird allerdings trotz gesetzten &amp;quot;pollnologging&amp;quot;-Attribut ein Log des Pollings zu Analysezwecken aktiviert.&lt;br /&gt;
&lt;br /&gt;
Wird FHEM neu gestartet, wird bei aktivierten Polling der ersten Datenabruf innerhalb 60s nach dem Start ausgeführt.  &lt;br /&gt;
&lt;br /&gt;
Der Status des automatischen Pollings wird durch das Reading &amp;quot;PollState&amp;quot; signalisiert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  PollState = Active     -    automatisches Polling wird mit Intervall entsprechend &amp;lt;pollcaminfoall&amp;gt; ausgeführt&lt;br /&gt;
  PollState = Inactive   -    automatisches Polling wird nicht ausgeführt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Bedeutung der Readingwerte ist unter Readings beschrieben.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweise:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Wird Polling eingesetzt, sollte das Intervall nur so kurz wie benötigt eingestellt werden da die ermittelten Werte überwiegend statisch sind.&lt;br /&gt;
Das eingestellte Intervall sollte nicht kleiner sein als die Summe aller HTTP-Verarbeitungszeiten. Pro Pollingaufruf und Kamera werden ca. 10 - 20 Http-Calls gegen die Surveillance Station abgesetzt.&lt;br /&gt;
&lt;br /&gt;
Bei einem eingestellten HTTP-Timeout (siehe Attribut) &amp;quot;httptimeout&amp;quot;) von 4 Sekunden kann die theoretische Verarbeitungszeit nicht höher als 80 Sekunden betragen.&lt;br /&gt;
In dem Beispiel sollte man das Pollingintervall mit einem Sicherheitszuschlag auf nicht weniger 160 Sekunden setzen.&lt;br /&gt;
Ein praktikabler Richtwert könnte zwischen 600 - 1800 (s) liegen.&lt;br /&gt;
&lt;br /&gt;
Sind mehrere Kameras in SSCam definiert, sollte &amp;quot;pollcaminfoall&amp;quot; nicht bei allen Kameras auf exakt den gleichen Wert gesetzt werden um Verarbeitungsengpässe und dadurch versursachte potentielle Fehlerquellen bei der Abfrage der Synology Surveillance Station zu vermeiden.&lt;br /&gt;
Ein geringfügiger Unterschied zwischen den Pollingintervallen der definierten Kameras von z.B. 1s kann bereits als ausreichend angesehen werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Readings ==&lt;br /&gt;
&lt;br /&gt;
Über den Pollingmechanismus bzw. durch Abfrage mit &amp;quot;Get&amp;quot; werden Readings bereitgestellt, deren Bedeutung in der nachfolgenden Tabelle dargestellt sind. Die übermittelten Readings können in Abhängigkeit des Kameratyps variieren.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;  &lt;br /&gt;
* Availability       - Verfügbarkeit der Kamera (disabled, enabled, disconnected, other)&lt;br /&gt;
* CamEventNum        - liefert die Gesamtanzahl der in SVS registrierten Events der Kamera&lt;br /&gt;
* CamExposureControl - zeigt den aktuell eingestellten Typ der Belichtungssteuerung&lt;br /&gt;
* CamExposureMode    - aktueller Belichtungsmodus (Day, Night, Auto, Schedule, Unknown)&lt;br /&gt;
* CamIP              - IP-Adresse der Kamera&lt;br /&gt;
* CamLiveMode        - Quelle für Live-Ansicht (DS, Camera)&lt;br /&gt;
* CamModel           - Kameramodell&lt;br /&gt;
* CamPort            - IP-Port der Kamera&lt;br /&gt;
* CamPreRecTime      - Dauer der der Voraufzeichnung in Sekunden (Einstellung in SVS)&lt;br /&gt;
* CamRecShare        - gemeinsamer Ordner auf der DS für Aufnahmen&lt;br /&gt;
* CamRecVolume       - Volume auf der DS für Aufnahmen&lt;br /&gt;
* CamVendor          - Kamerahersteller Bezeichnung&lt;br /&gt;
* CamVideoFlip       - Ist das Video gedreht  &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
* CamVideoMirror     - Ist das Video gespiegelt  &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
* CapAudioOut        - Fähigkeit der Kamera zur Audioausgabe über Surveillance Station (false/true)&lt;br /&gt;
* CapChangeSpeed     - Fähigkeit der Kamera verschiedene Bewegungsgeschwindigkeiten auszuführen&lt;br /&gt;
* CapPTZAbs          - Fähigkeit der Kamera für absolute PTZ-Aktionen &lt;br /&gt;
* CapPTZAutoFocus    - Fähigkeit der Kamera für Autofokus Aktionen&lt;br /&gt;
* CapPTZDirections   - die verfügbaren PTZ-Richtungen der Kamera&lt;br /&gt;
* CapPTZFocus        - Art der Kameraunterstützung für Fokussierung&lt;br /&gt;
* CapPTZHome         - Unterstützung der Kamera für Home-Position&lt;br /&gt;
* CapPTZIris         - Unterstützung der Kamera für Iris-Aktion &lt;br /&gt;
* CapPTZPan          - Unterstützung der Kamera für Pan-Aktion&lt;br /&gt;
* CapPTZTilt         - Unterstützung der Kamera für Tilt-Aktion&lt;br /&gt;
* CapPTZZoom         - Unterstützung der Kamera für Zoom-Aktion&lt;br /&gt;
* DeviceType         - Kameratyp (Camera, Video_Server, PTZ, Fisheye)&lt;br /&gt;
* Error              - Meldungstext des letzten Fehlers&lt;br /&gt;
* Errorcode          - Fehlercode des letzten Fehlers&lt;br /&gt;
* LastSnapFilename   - der Filename des letzten Schnapschusses&lt;br /&gt;
* LastSnapId         - die ID des letzten Schnapschusses&lt;br /&gt;
* LastUpdateTime     - Datum / Zeit der letzten Aktualisierung durch &amp;quot;caminfoall&amp;quot;&lt;br /&gt;
* LiveStreamUrl      - die LiveStream-Url wenn der Stream gestartet ist. (Attribut &amp;quot;showStmInfoFull&amp;quot; muss gesetzt sein)&lt;br /&gt;
* Patrols            - in Surveillance Station voreingestellte Überwachungstouren (bei PTZ-Kameras)&lt;br /&gt;
* PollState          - zeigt den Status des automatischen Pollings an&lt;br /&gt;
* Presets            - in Surveillance Station voreingestellte Positionen (bei PTZ-Kameras)&lt;br /&gt;
* Record             - Aufnahme läuft = Start, keine Aufnahme = Stop&lt;br /&gt;
* StmKey             - aktueller StreamKey. Kann zum öffnen eines Livestreams ohne Session Id genutzt werden. &lt;br /&gt;
* StmKeyUnicst       - Uni-cast Stream Pfad der Kamera. ((Attribut &amp;quot;showStmInfoFull&amp;quot; muss gesetzt sein)&lt;br /&gt;
* StmKeymjpegHttp    - Mjpeg Stream Pfad (über http) der Kamera. (Attribut &amp;quot;showStmInfoFull&amp;quot; muss gesetzt sein)&lt;br /&gt;
* SVScustomPortHttp  - benutzerdefinierter Port der Surveillance Station (HTTP) im DSM-Anwendungsportal (get mit &amp;quot;svsinfo&amp;quot;)&lt;br /&gt;
* SVScustomPortHttps - benutzerdefinierter Port der Surveillance Station (HTTPS) im DSM-Anwendungsportal (get mit &amp;quot;svsinfo&amp;quot;)&lt;br /&gt;
* SVSlicenseNumber   - die Anzahl der installierten Kameralizenzen (get mit &amp;quot;svsinfo&amp;quot;)&lt;br /&gt;
* SVSuserPriv        - die effektiven Rechte des verwendeten Users nach dem Login (get mit &amp;quot;svsinfo&amp;quot;)&lt;br /&gt;
* SVSversion         - die Paketversion der installierten Surveillance Station (get mit &amp;quot;svsinfo&amp;quot;)&lt;br /&gt;
* UsedSpaceMB        - durch Aufnahmen der Kamera belegter Plattenplatz auf dem Volume&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Attribute ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;debugactivetoken&#039;&#039;&#039; - wenn gesetzt wird der Status des Active-Tokens gelogged - nur für Debuggung, nicht im normalen Betrieb benutzen&lt;br /&gt;
  &lt;br /&gt;
* &#039;&#039;&#039;httptimeout&#039;&#039;&#039; - Timeout-Wert für HTTP-Aufrufe zur Synology Surveillance Station, Default: 4 Sekunden (wenn httptimeout = &amp;quot;0&amp;quot; oder nicht gesetzt)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;htmlattr&#039;&#039;&#039; - ergänzende Angaben zur Livestream-Url um das Verhalten wie Bildgröße zu beeinflussen&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;livestreamprefix&#039;&#039;&#039; - überschreibt die Angaben zu Protokoll, Servernamen und Port zur Weiterverwendung der Livestreamadresse als z.B. externer Link. Die Angabe muss in der Form &amp;quot;http(s)://&amp;lt;servername&amp;gt;:&amp;lt;port&amp;gt;&amp;quot; erfolgen.&lt;br /&gt;
&lt;br /&gt;
*  &#039;&#039;&#039;noQuotesForSID&#039;&#039;&#039; - dieses Attribut kann in bestimmten Fällen die Fehlermeldung &amp;quot;402 - permission denied&amp;quot; vermeiden und ein login ermöglichen. (normalerweise nicht zu setzen)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;pollcaminfoall&#039;&#039;&#039; - Intervall der automatischen Eigenschaftsabfrage (Polling) einer Kamera (kleiner 10: kein Polling, größer 10: Polling mit Intervall)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;pollnologging&#039;&#039;&#039; - 0 bzw. nicht gesetzt = Logging Gerätepolling aktiv (default), 1 = Logging Gerätepolling inaktiv&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;rectime&#039;&#039;&#039; - festgelegte Aufnahmezeit wenn eine Aufnahme gestartet wird. Mit rectime = 0 wird eine Endlosaufnahme gestartet. Ist &amp;quot;rectime&amp;quot; nicht gesetzt, wird der Defaultwert von 15s verwendet.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;session&#039;&#039;&#039; - Auswahl der Login-Session. Nicht gesetzt oder &amp;quot;DSM&amp;quot; -&amp;gt; session wird mit DSM aufgebaut (Standard). &amp;quot;SurveillanceStation&amp;quot; -&amp;gt; Session-Aufbau erfolgt mit SVS &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;simu_SVSversion&#039;&#039;&#039; - simuliert eine andere SVS-Version. NUR FÜR DEBUGGING, nicht im normalen Betrieb zu nutzen !&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;showStmInfoFull&#039;&#039;&#039; - zusaätzliche Streaminformationen wie LiveStreamUrl, StmKeyUnicst, StmKeymjpegHttp werden ausgegeben&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;verbose&#039;&#039;&#039;&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  Es werden verschiedene Verbose-Level unterstützt.&lt;br /&gt;
  Dies sind im Einzelnen:&lt;br /&gt;
&lt;br /&gt;
        0   -   Start/Stop-Ereignisse werden geloggt&lt;br /&gt;
        1   -   Fehlermeldungen werden geloggt&lt;br /&gt;
        2   -   Meldungen über wichtige Ereignisse oder Alarme &lt;br /&gt;
        3   -   gesendete Kommandos werden geloggt&lt;br /&gt;
        4   -   gesendete und empfangene Daten werden geloggt&lt;br /&gt;
        5   -   alle Ausgaben zur Fehleranalyse werden geloggt. ACHTUNG: unter Umständen werden sehr viele Daten in das Logfile geschrieben!&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
weitere Attribute:&lt;br /&gt;
&lt;br /&gt;
* [http://fhem.de/commandref_DE.html#readingFnAttributes readingFnAttributes]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Das Modul bzw. eine Gerätedefinition deaktivieren (ab Rev 11296) ==&lt;br /&gt;
&lt;br /&gt;
Mit dem Attribut &amp;quot;disable&amp;quot; kann das Modul bzw. eine Gerätedefinition deaktiviert werden. Im Gegensatz zum Befehl &amp;quot;set ... disable&amp;quot; wird nicht die Kamera an sich deaktiviert, sondern lediglich das Gerätemodul. In diesem Fall werden keine Funktionen mehr ausgeführt.&lt;br /&gt;
Wird das Modul deaktiviert, werden die folgenden Readings gesetzt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
state:         inactive     &lt;br /&gt;
Availability:  ???&lt;br /&gt;
PollState:     Inactive   &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ist für eine Kamera Polling aktiviert, wird diese Aktivität abgeschaltet. Nach Reaktivierung des Gerätemoduls wird das Polling automatisch wieder fortgesetzt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lösungsbeispiele und Ansätze für verschiedene Aufgabenstellungen ==&lt;br /&gt;
&lt;br /&gt;
=== Eine Übersicht mit Hilfe von readingsGroup ===&lt;br /&gt;
&lt;br /&gt;
Mit den umfangreichen Möglichkeiten des Moduls [[readingsGroup]] kann ein FHEM-Widget nach eigenen Vorstellungen erstellt werden. Hierbei ist es möglich sowohl einen Überblick über die Status der Kameras zu erhalten als auch Steuerungsaktivitäten vorzusehen. Das nachfolgende Beipiel soll als Anregung dafür dienen. Weitere Informationen unter der [http://fhem.de/commandref.html#readingsGroup commandref] zu readingsGroup.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; &lt;br /&gt;
Die folgenden Beispiele enthalten keine Maskierungen oder Verdopplungen für ; und Zeilenende, sondern sind so angegeben, wie sie im Web Interface im Befehls-Eingabefeld, nach Klick auf DEF und im Attribut-Eingabefeld eingegeben werden. Mehrere Leerzeichen innerhalb von &amp;lt; &amp;gt; sind als   &amp;lt;code&amp;gt;&amp;lt;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;gt;&amp;lt;/code&amp;gt; zu kodieren.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Definition !! Erläuterungen &lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | [[Bild:RgSSCam.jpg|thumb|500px|links|Kamerastatus und Steuerung]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:50%&amp;quot; |&amp;lt;code&amp;gt;define Cams_All_States readingsGroup &amp;lt;%it_camera&amp;gt;,&amp;lt;Verfügbar&amp;gt;,&amp;lt; &amp;gt;,&amp;lt;Status&amp;gt;,&amp;lt; &amp;gt;,&amp;lt;Erkennung&amp;gt;,&amp;lt; &amp;gt;,&amp;lt;letzte Aufnahme&amp;gt;,&amp;lt; &amp;gt;,&amp;lt;bel. Platz (MB)&amp;gt;,&amp;lt; &amp;gt;,&amp;lt;letzte Aktualisierung&amp;gt;,&amp;lt; &amp;gt;,&amp;lt;Modul Deaktivierung&amp;gt;,&amp;lt; &amp;gt;,&amp;lt;Image&amp;gt; TYPE=SSCam:Availability,&lt;br /&gt;
&amp;lt;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;gt;,state,&amp;lt;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;gt;,CamMotDetSc,&amp;lt;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;gt;,CamLastRecTime,&amp;lt;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;gt;,UsedSpaceMB,&lt;br /&gt;
&amp;lt;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;gt;,LastUpdateTime,&amp;lt;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;gt;,?!disable,&amp;lt;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;gt;,&amp;lt;%Start&amp;gt;,&amp;lt;%Stop&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| ReadingsGoup anlegen. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Cams_All_States valueIcon {&#039;Availability.enabled&#039; =&amp;gt; &#039;remotecontrol/black_btn_GREEN&#039;,&lt;br /&gt;
&#039;Availability.disabled&#039; =&amp;gt; &#039;remotecontrol/black_btn_RED&#039;,&lt;br /&gt;
&#039;state.inactive&#039; =&amp;gt; &#039;StandBy&#039;,&lt;br /&gt;
&#039;state&#039; =&amp;gt; &#039;%devStateIcon&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| In Abhängigkeit vom Wert der Kameraverfügbarkeit und des state-Readings entsprechende Icons anzeigen. Wird das Modul deaktiviert, wird ein Standby-Icon angezeigt unabhängig davon ob in der Kameradefinition ein devStateIcon hinterlegt wurde.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Cams_All_States valueStyle {if($READING eq &amp;quot;Availability&amp;quot; &amp;amp;&amp;amp; $VALUE eq &amp;quot;enabled&amp;quot;){ &#039; style=&amp;quot;color:green&amp;quot; &#039; }&lt;br /&gt;
elsif( $READING eq &amp;quot;Availability&amp;quot; &amp;amp;&amp;amp; $VALUE eq  &amp;quot;disabled&amp;quot;){ &#039; style=&amp;quot;color:red&amp;quot; &#039; }&lt;br /&gt;
elsif( $READING eq &amp;quot;CamMotDetSc&amp;quot; &amp;amp;&amp;amp; $VALUE =~ /SVS.*/ ){ &#039; style=&amp;quot;color:orange&amp;quot; &#039; }&lt;br /&gt;
elsif( $READING eq &amp;quot;CamMotDetSc&amp;quot; &amp;amp;&amp;amp; $VALUE eq &amp;quot;disabled&amp;quot;){ &#039; style=&amp;quot;color:LimeGreen&amp;quot; &#039; }&lt;br /&gt;
elsif( $READING eq &amp;quot;CamMotDetSc&amp;quot; &amp;amp;&amp;amp; $VALUE =~ /Cam.*/ ){ &#039; style=&amp;quot;color:SandyBrown&amp;quot; &#039; }}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Farbgestaltung der Texte in Anhängigkeit der Werte setzen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Cams_All_States valueFormat {($READING eq &amp;quot;CamMotDetSc&amp;quot; &amp;amp;&amp;amp; $VALUE eq &amp;quot;disabled&amp;quot;) ? &amp;quot;external&amp;quot; : $VALUE}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Wenn die Quelle der Bewegungserkennung auf &amp;quot;disabled&amp;quot; gestellt wurde, soll &amp;quot;external&amp;quot; in der Übersicht angezeigt werden weil die Bewegungserkennung in dem Fall durch IR-Melder durchgeführt wird.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Cams_All_States valueColumns { &#039;Image&#039; =&amp;gt; &#039;colspan=&amp;quot;2&amp;quot;&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Überschrift &amp;quot;Image&amp;quot; soll sich über die letzten zwei Spalten strecken. Es gilt sowohl für &amp;quot;Start&amp;quot; und &amp;quot;Stop&amp;quot; .&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Cams_All_States nameStyle style=&amp;quot;color:black;font-weight:bold&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Überschriften sollen schwarz und fett sein.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Cams_All_States commands { &#039;Availability.enabled&#039; =&amp;gt; &#039;set $DEVICE disable&#039;,&lt;br /&gt;
&#039;Availability.disabled&#039; =&amp;gt; &#039;set $DEVICE enable&#039;,&lt;br /&gt;
&#039;Cams_All_States.Start&#039; =&amp;gt; &#039;set %DEVICE runView image&#039;,&lt;br /&gt;
&#039;Cams_All_States.Stop&#039; =&amp;gt; &#039;set %DEVICE stopView&#039;,&lt;br /&gt;
disable =&amp;gt; &amp;quot;disable:&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Es sollen Kommandos bestimmten Readings / Werten unterlegt werden. Zum Beispiel kann die Kamera mit Klick auf das Availability-Icon disabled werden wenn der Readingswert &amp;quot;enabled&amp;quot; ist. Der Livestream kann mit &amp;quot;Start&amp;quot; in der letzten Spalte gestartet, oder das Modul über eine Auswahl in der Drop-Down-Liste unterhalb von &amp;quot;Modul Deaktivierung&amp;quot; deaktiviert/aktiviert werden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Cams_All_States cellStyle { &amp;quot;c:0&amp;quot; =&amp;gt; &#039;style=&amp;quot;text-align:left;color:green;font-weight:normal&amp;quot;&#039;,&lt;br /&gt;
&amp;quot;c:5&amp;quot; =&amp;gt; &#039;style=&amp;quot;text-align:center;color:green;font-weight:normal&amp;quot;&#039;,&lt;br /&gt;
&amp;quot;c:9&amp;quot; =&amp;gt; &#039;style=&amp;quot;text-align:center;font-weight:normal&amp;quot;&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
| Formatierung bestimmter Spalten (0,5,9).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Cams_All_States alias Status aller Kameras&amp;lt;/code&amp;gt;&lt;br /&gt;
| Alias setzen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attr Cams_All_States group Kamerastatus&amp;lt;/code&amp;gt;&lt;br /&gt;
| Gruppenzugehörigkeit setzen. Wird auch für die Anzeige im Dashboard benutzt.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mail mit Snapshot im Anhang und Aufnahmelink versenden (sendemail) ===&lt;br /&gt;
&lt;br /&gt;
Nachfolgendes Beispiel zeigt eine Möglichkeit in Linux mit dem Tool [http://caspian.dotconf.net/menu/Software/SendEmail/ sendemail] eine Mail mit einem Link zu einer Kameraaufnahme und bis zu drei Anhängen zu versenden. Das Tool ist in vielen Repositories erhalten und kann unter Debian (z.B. Ubuntu) installiert werden mittels &amp;lt;code&amp;gt;apt-get install sendemail libio-socket-ssl-perl&amp;lt;/code&amp;gt;.&lt;br /&gt;
Die Mail wird mit einem DOIF Kommando in Abhängigkeit von einer angefertigten Aufnahme angestoßen.&lt;br /&gt;
&lt;br /&gt;
Zunächst die Mailfunktion in der 99_myUtils als Unterroutinen einfügen. Die Funktion ist nicht blockierend (mit Modul Blocking.pm) ausgeführt. Die &amp;quot;\&amp;quot; dienen nachfolgend nur&lt;br /&gt;
zur Kennzeichnung eines Zeilenumbruchs - den Code bitte auf eine Zeile schreiben.&lt;br /&gt;
  &lt;br /&gt;
&amp;lt;source lang=perl&amp;gt;&lt;br /&gt;
# Am Anfang von 99_myUtils hinzufügen&lt;br /&gt;
use Blocking;&lt;br /&gt;
&lt;br /&gt;
##############################################################################&lt;br /&gt;
########        DebianMail  Mail  versenden  nonblocking          ############&lt;br /&gt;
##############################################################################&lt;br /&gt;
&lt;br /&gt;
sub DebianMailnbl {&lt;br /&gt;
&lt;br /&gt;
 my $rcpt = shift;&lt;br /&gt;
 my $subject = shift; &lt;br /&gt;
 my $text = shift;&lt;br /&gt;
 my $attach = shift; &lt;br /&gt;
 my $attach1 = shift; &lt;br /&gt;
 my $attach2 = shift; &lt;br /&gt;
 my $hash-&amp;gt;{NAME_MAIL} = &amp;quot;Debianmail&amp;quot;;&lt;br /&gt;
 my $name = $hash-&amp;gt;{NAME_MAIL};&lt;br /&gt;
&lt;br /&gt;
if ($attach2) {&lt;br /&gt;
    $hash-&amp;gt;{helper}{RUNNING_PID} = BlockingCall(&amp;quot;DebianMailnbl_send&amp;quot;, $name.&amp;quot;|&amp;quot;.$rcpt.&amp;quot;|&amp;quot;.$subject.&amp;quot;|&amp;quot;.$text.&amp;quot;|&amp;quot;.$attach.&amp;quot; \&lt;br /&gt;
    |&amp;quot;.$attach1.&amp;quot;|&amp;quot;.$attach2, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
} elsif ($attach1) {&lt;br /&gt;
    $hash-&amp;gt;{helper}{RUNNING_PID} = BlockingCall(&amp;quot;DebianMailnbl_send&amp;quot;, $name.&amp;quot;|&amp;quot;.$rcpt.&amp;quot;|&amp;quot;.$subject.&amp;quot;|&amp;quot;.$text.&amp;quot;|&amp;quot;.$attach.&amp;quot;|&amp;quot; \&lt;br /&gt;
   .$attach1, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
} else {&lt;br /&gt;
    $hash-&amp;gt;{helper}{RUNNING_PID} = BlockingCall(&amp;quot;DebianMailnbl_send&amp;quot;, $name.&amp;quot;|&amp;quot;.$rcpt.&amp;quot;|&amp;quot;.$subject.&amp;quot;|&amp;quot;.$text.&amp;quot;|&amp;quot;.$attach,&lt;br /&gt;
     &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
######################################################&lt;br /&gt;
########       Mailfunktion nonblocking           &lt;br /&gt;
######################################################&lt;br /&gt;
&lt;br /&gt;
sub DebianMailnbl_send {&lt;br /&gt;
 my ($string) = @_;&lt;br /&gt;
 my ($name, $rcpt, $subject, $text, $attach, $attach1, $attach2) = split(&amp;quot;\\|&amp;quot;, $string);&lt;br /&gt;
 my $ret = &amp;quot;&amp;quot;;&lt;br /&gt;
 my $sender = &amp;quot;&amp;lt;Sendername&amp;gt;\@&amp;lt;Domäne&amp;gt;&amp;quot;; &lt;br /&gt;
 my $konto = &amp;quot;&amp;lt;Mailkonto&amp;quot;;&lt;br /&gt;
 my $passwrd = &amp;quot;&amp;lt;Mailkontopasswort&amp;gt;&amp;quot;;&lt;br /&gt;
 my $provider = &amp;quot;&amp;lt;Mailserver&amp;gt;&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
if ($attach2) {&lt;br /&gt;
    $ret .= qx(sendEmail -f &#039;$sender&#039; -t &#039;$rcpt&#039; -u &#039;$subject&#039; -m &#039;$text&#039; -a &#039;$attach&#039; -a &#039;$attach1&#039; -a &#039;$attach2&#039; -s &#039;$provider&#039; \&lt;br /&gt;
    -xu &#039;$konto&#039; -xp &#039;$passwrd&#039; -o tls=no -o message -charset=utf-8 -o message-content-type=text/plain );&lt;br /&gt;
} elsif ($attach1) {&lt;br /&gt;
    $ret .= qx(sendEmail -f &#039;$sender&#039; -t &#039;$rcpt&#039; -u &#039;$subject&#039; -m &#039;$text&#039; -a &#039;$attach&#039; -a &#039;$attach1&#039; -s &#039;$provider&#039; -xu &#039;$konto&#039; \&lt;br /&gt;
    -xp &#039;$passwrd&#039; -o tls=no -o message-charset=utf-8 -o message-content-type=text/plain );&lt;br /&gt;
} else {&lt;br /&gt;
    $ret .= qx(sendEmail -f &#039;$sender&#039; -t &#039;$rcpt&#039; -u &#039;$subject&#039; -m &#039;$text&#039; -a &#039;$attach&#039; -s &#039;$provider&#039; -xu &#039;$konto&#039; -xp &#039;$passwrd&#039; \&lt;br /&gt;
    -o tls=no -o message-charset=utf-8 -o message-content-type=text/plain );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
 # remove CR from return-string &lt;br /&gt;
 $ret =~ s,[\r\n]*,,g;    &lt;br /&gt;
&lt;br /&gt;
 Log3 $name, 3, &amp;quot;$name - sendEmail returned: $ret&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die TLS Verschlüsselung (ehem. SSL) zu nutzen, dann tls=auto verwenden.&lt;br /&gt;
&lt;br /&gt;
Falls der Body-Text in einem (Android-)Mailer auf dem Handy nicht gezeigt wird, kann evtl. der Parameter &#039;&#039;&#039;-o message-content-type=html&#039;&#039;&#039; helfen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== Versand triggern - Beispiel mit DOIF ====&lt;br /&gt;
Der Mailversand wird in dem Beispiel mit einem DOIF angetriggert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define CamHE1.email DOIF ([CamHE1:&amp;quot;CamLastRec&amp;quot;]) ({DebianMailnbl (&#039;&amp;lt;Empfänger&amp;gt;@&amp;lt;Domäne&amp;gt;&#039;,&#039;Bewegungsalarm CamHE1&#039;,&#039;Eine Bewegung wurde an der Haustür registriert. &lt;br /&gt;
Aufnahmelink: [CamHE1:VideoFolder]/[CamHE1:CamLastRec]&#039;,&#039;/media/sf_surveillance/@Snapshot/[CamHE1:LastSnapFilename]&#039;)})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wird eine Aufnahme der Kamera CamHE1 beendet, wird integriert der Befehl &amp;quot;get .. eventlist&amp;quot; ausgeführt. Dadurch aktualisiert sich das Reading &amp;quot;CamLastRec&amp;quot;.&lt;br /&gt;
Dieser Event wird genutzt um eine Mail mit einem Link zur Aufnahme und einem während der Aufnahme angelegten Schnappschuß zu versenden.&lt;br /&gt;
Will man einen weiteren Anhang versenden, sähe das DOIF folgendermaßen aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define CamHE1.email DOIF ([CamHE1:&amp;quot;CamLastRec&amp;quot;]) ({DebianMailnbl (&#039;&amp;lt;Empfänger&amp;gt;@&amp;lt;Domäne&amp;gt;&#039;,&#039;Bewegungsalarm CamHE1&#039;,&#039;Eine Bewegung wurde an der Haustür registriert. &lt;br /&gt;
Aufnahmelink: [CamHE1:VideoFolder]/[CamHE1:CamLastRec]&#039;,&#039;/media/sf_surveillance/@Snapshot/[CamHE1:LastSnapFilename]&#039;,&#039;&amp;lt;weiteres File&amp;gt;&#039;)})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Dss Reading &amp;quot;VideoFolder&amp;quot; muß, wie in dem Beispiel zu sehen, dem &amp;quot;CamLastRec&amp;quot; vorangestellt werden um den kompletten Pfad zur Aufnahme zu erhalten. Der versendete Link würde somit etwa den folgenden Aufbau haben:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/volume1/surveillance/Carport/20160407PM/Carport20160407-221541-1460060141.mp4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn in einer Mail nach extern versendet wird, ist ein solcher Link wahrscheinlich über eine Anwendung nicht zugreifbar.&lt;br /&gt;
Um den Link dynamisch anzupassen und so den Zugriff von extern über z.B. einen Webserver zu ermöglichen, kann das Attribut &amp;quot;videofolderMap&amp;quot; verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Wird dieses Attribut auf zum Beispiel ...&amp;lt;pre&amp;gt;&amp;quot;http://&amp;lt;Server&amp;gt;:8083/fhem/svs/Carport/&amp;quot;&amp;lt;/pre&amp;gt; ...gesetzt, ergibt sich folgender Link der in der Mail versendet wird:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://&amp;lt;Server&amp;gt;:8083/fhem/svs/Carport/20160407PM/Carport20160407-221541-1460060141.mp4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In dem obigen Beispiel wird ein FHEM-Webserver verwendet, der zuvor über HTTPSRV (siehe Commandref) angelegt wurde,&lt;br /&gt;
WIe der Webserver angelegt werden kann ist [[SSCAM_-_Steuerung_von_Kameras_in_Synology_Surveillance_Station#Einsatz_FHEM_Webserver_zum_Zugriff_auf_Aufnahmen | hier]] beschrieben. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Nach dem Snapshot wird implizit die Funktion &amp;quot;get ... snapfileinfo&amp;quot; aufgerufen. Diese Funktion trägt den neuen/letzten Snapfilename in das Reading &amp;quot;LastSnapFilename&amp;quot; ein.&lt;br /&gt;
Es ist somit sicherzustellen dass dieses Funktion abgeschlossen ist bevor die Aufnahme per Mail versendet werden soll. Das kann zum Beispiel mit einem Notify auf den Event &amp;quot;&amp;lt;Device&amp;gt;:LastSnapFilename.*&amp;quot; geschehen.&lt;br /&gt;
Sollten das Problem auftreten dass alte Snapshots versendet werden, ist aller Wahrscheinlichkeit nach in dem beschriebenen Sachverhalt die Ursache zu finden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Versand triggern - Beispiel mit Notify ====&lt;br /&gt;
&lt;br /&gt;
Mit diesem Notify wird das Snapshotfile angehängt und auch ein Link zu dem Snapshot mit eingefügt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define CamHE1.email NOTIFY CamHE1:LastSnapFilename.* {DebianMailnbl (&#039;&amp;lt;Empfänger&amp;gt;@&amp;lt;Domäne&amp;gt;&#039;,&#039;Bewegungsalarm CamHE1&#039;, &lt;br /&gt;
&#039;Eine Bewegung wurde an der Haustür registriert. Aufnahmelink: http://&amp;lt;Server&amp;gt;:8083/fhem/snap/&#039;.(ReadingsVal(&amp;quot;CamHE1&amp;quot;,&amp;quot;LastSnapFilename&amp;quot;,&amp;quot;&amp;quot;)), &lt;br /&gt;
&#039;/media/sf_surveillance/@Snapshot/&#039;.(ReadingsVal(&amp;quot;CamHE1&amp;quot;,&amp;quot;LastSnapFilename&amp;quot;,&amp;quot;&amp;quot;)))}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Link in dieser Form aufrufen zu können ist erst ein HTTPSRV anzulegen mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define snapweb HTTPSRV snap /media/sf_surveillance/@Snapshot SVS-Snapshots&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Natürlich muß dabei der Pfad &amp;quot;/media/sf_surveillance/&amp;quot; so angepasst werden dass er dem (gemounteten) SVS-Aufnahmeverzeichnis entspricht.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Einsatz eines Webservers zum Zugriff auf Aufnahmen ===&lt;br /&gt;
&lt;br /&gt;
==== Nutzung des FHEM-internen HTTPSRV Plug-In ====&lt;br /&gt;
&lt;br /&gt;
Ziel der nachfolgenden Beschreibung ist es, eine Möglichkeit darzustellen, um den FHEM Webserver für den Zugriff auf die Aufnahmen der Synology Surveillance Station zu nutzen. &lt;br /&gt;
&lt;br /&gt;
Folgende Ausgangslage wird für das Beispiel als gegeben angenommen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* der gemeinsame Ordner der Surveillance Station (normalerweise &amp;quot;surveillance&amp;quot;) in der Diskstation ist am FHEM-Server gemountet. &amp;lt;br&amp;gt;Für das Beipiel ist das gemountete Verzeichnis: /media/sf_surveillance&lt;br /&gt;
* FHEMWEB ist im Einsatz&lt;br /&gt;
* für das Beispiel ist eine Kamera CamHE1 (SVS-Name: Hauseingang) definiert&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HTTPSRV ist ein Plug-in für FHEMWEB und stellt den Webserver für den Zugriff zur Verfügung. Diese Möglichkeit ist sicherlich für jene Fälle interessant bei denen der Zugriff über einen Verzeichnisdienst nicht möglich oder nicht gewünscht ist (zum Bespiel von extern).&lt;br /&gt;
Es steht auch eine Modul-interne Zugriffsmöglichkeit auf die letzte Aufnahme mit dem Befehl &amp;quot;set CamHE1 runView lastrec (oder lastrec_open)&amp;quot; zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Webserver wird definiert mit:&lt;br /&gt;
&lt;br /&gt;
 define svsweb HTTPSRV svs /media/sf_surveillance WebServer SVS-Aufnahmen&lt;br /&gt;
&lt;br /&gt;
Der definierte Webserver sollte nun links im Seitenmenü unter dem Namen &amp;quot;WebServer SVS-Aufnahmen&amp;quot; erscheinen. Ein Klick auf diesen Link sollte nun die Meldung zeigen:&lt;br /&gt;
&lt;br /&gt;
 File not found: /media/sf_surveillance/index.html&lt;br /&gt;
&lt;br /&gt;
Die Datei index.html existiert natürlich normalerweise nicht im surveillance-Verzeichnis. Der Inhalt des Verzeichnisses &amp;quot;/media/sf_surveillance&amp;quot;, also des surveillance-Stammordners, wird nun mit der Basisadresse ... &amp;lt;pre&amp;gt;http://&amp;lt;FHEM-Server&amp;gt;:8083/fhem/svs/&amp;lt;/pre&amp;gt; ...erreicht.&lt;br /&gt;
&lt;br /&gt;
Alle Aufnahmen der Kameras werden in Unterordnern des surveillance-Stammerzeichnisses gespeichert, die den gleichen Namen wie die Kamera in der Surveillance Station haben. Um den Pfad zu dem Aufnahmefile zu spezifizieren, ist die Basisadresse des erstellten Webservers mit dem Unterordner der entsprechenden Kamera zu ergänzen. Mit diesem zusammengesetzten Gesamtpfad ist ebenfalls das Reading &amp;quot;VideoFolder&amp;quot;, welches den physikalischen Pfad von Aufnahmen der entsprechenden Kamera beschreibt, zu überschreiben. &lt;br /&gt;
&lt;br /&gt;
Die wird mit dem Attribut &amp;quot;videofolderMap&amp;quot; erreicht. In dem Beispiel wird es gesetzt auf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr CamHE1 videofolderMap http://&amp;lt;FHEM-Server&amp;gt;:8083/fhem/svs/Hauseingang/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jede Aufnahme der Kamera &amp;quot;Hauseingang&amp;quot; bzw. &amp;quot;CamHE1&amp;quot; wird somit durch die Webadresse ...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://&amp;lt;FHEM-Server&amp;gt;:8083/fhem/svs/Hauseingang/&amp;lt;Inhalt Reading CamLastRec&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
... erreicht.&lt;br /&gt;
&lt;br /&gt;
Wie eine Mail mit diesem Link versendet werden kann ist [[SSCAM_-_Steuerung_von_Kameras_in_Synology_Surveillance_Station#Mail_mit_Snapshot_im_Anhang_und_Aufnahmelink_versenden_.28sendmail.29 | hier]] beschrieben.&lt;br /&gt;
&lt;br /&gt;
Der komplette in der Mail versendete Aufnahmelink sieht folgendermaßen aus: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://&amp;lt;FHEM-Server&amp;gt;:8083/fhem/svs/Hauseingang//20160408PM/Hauseingang20160408-215150-1460145110.mp4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Nutzung der Webstation auf Synology DS zum Zugriff auf Recordings ====&lt;br /&gt;
&lt;br /&gt;
Da die Benutzung des HTTPSRV für diesen Zweck FHEM belastet bzw. blockiert, hat Martin Fischer im Forum unter:&lt;br /&gt;
https://forum.fhem.de/index.php/topic,45671.msg482616.html#msg482616&lt;br /&gt;
&lt;br /&gt;
zwei Möglichkeiten bschrieben wie man den internen Webserver des Synology DS statt dessen verwenden kann (DSM 6).&lt;br /&gt;
&lt;br /&gt;
Darauf aufbauend ist hier folgend die Umsetzung im DSM 5.2 beschrieben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1. schnelle Variante A&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die nachfolgende Beschreibung bezieht sich auf DSM 5.2. Es wird ein virtueller Host (test.myds.me) definiert, der auf Port HTTP 8081 hört. Das Dokument-Root soll in dem Beispiel der Ordner &amp;quot;/volume1/web/fhemsvs&amp;quot; sein.  &lt;br /&gt;
&lt;br /&gt;
* Nach dem Login als root wechselt man in das web-Verzeichnis mit &amp;quot;cd /volume1/web&amp;quot;&lt;br /&gt;
* anlegen des Root-Verzeichnisses für den virtuellen Host und setzen der Berechtigungen:&lt;br /&gt;
  mkdir fhemsvs&lt;br /&gt;
  chown http:http fhemsvs&lt;br /&gt;
  chmod 775 fhemsvs&lt;br /&gt;
&lt;br /&gt;
* Link im Root-Verzeichnis zum SVS-Stammverzeichnis setzen:&lt;br /&gt;
  ln -s /volume1/surveillance/ /volume1/web/fhemsvs&lt;br /&gt;
&lt;br /&gt;
* einen virtuellen Host in Systemsteuerung -&amp;gt; Webdienste -&amp;gt; virtueller Host anlegen. Soll der Host von extern erreichbar sein, muß ebenfalls eine Registrierung des Hostnamens z.B. bei dem kostenfreien DNS-Dienst von Synology erfolgen sowie der verwendete Port im Router freigeschaltet werden.&lt;br /&gt;
  &lt;br /&gt;
[[Bild:vHost.PNG|left|thumb|300px|]] Der virtuelle Host ist durch die Angabe des Unterodners (fhemsvs), des Hostnamens (test.myds.me), des Protokolls und des Ports (8081) zu definieren. Die Angaben sind natürlichen den realen Werten anzupassen.&lt;br /&gt;
&lt;br /&gt;
* die Recordings sind nun prinzipiell unter der Adresse erreichbar:&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  http://test.myds.me:8081/surveillance/&amp;lt;Camname&amp;gt;/&amp;lt;Zeitordner&amp;gt;/&amp;lt;Dateiname&amp;gt;&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* in FHEM ist der Zugangspfad zu dem Aufnahmen zusammengesetzt aus den Readings &amp;quot;VideoFolder&amp;quot; (Original z.B. /volume1/surveillance/Carport) und &amp;quot;CamLastRec&amp;quot;. Über das Attribut &amp;quot;videofolderMap&amp;quot; wird &amp;quot;/volume1/surveillance/Carport&amp;quot; nun ersetzt durch &amp;lt;pre&amp;gt;&amp;quot;http://test.myds.me:8081/surveillance/Carport/&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der substituierte Aufnahmelink wird nun zu: (ReadingsVal(&amp;quot;&amp;lt;camname&amp;gt;&amp;quot;,&amp;quot;VideoFolder&amp;quot;,&amp;quot;&amp;quot;)).(ReadingsVal(&amp;quot;&amp;lt;name&amp;gt;&amp;quot;,&amp;quot;CamLastRec&amp;quot;,&amp;quot;&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
* Der Versand des Aufnahmelinks per Mail kann durch ein Notify erfolgen:&lt;br /&gt;
&lt;br /&gt;
  define N.CamCP1.Rec.Email notify CamCP1:CamLastRec:.*  {DebianMailnbl (&#039;&amp;lt;Mailempfänger&amp;gt;&#039;,&#039;Bewegungsaufnahme Carport&#039;, &#039;Aufnahmelink: &#039;.(ReadingsVal(&amp;quot;CamCP1&amp;quot;,&amp;quot;VideoFolder&amp;quot;,&amp;quot;&amp;quot;)).(ReadingsVal(&amp;quot;CamCP1&amp;quot;,&amp;quot;CamLastRec&amp;quot;,&amp;quot;&amp;quot;))) }&lt;br /&gt;
&lt;br /&gt;
Die Funktion DebianMailnbl für den Mailversand ist zuvor in 99_myUtils zu definieren. (siehe [[#Mail_mit_Snapshot_im_Anhang_und_Aufnahmelink_versenden_.28sendmail.29 | Mailversandroutine]] )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Der Versand des Aufnahmelinks per TelegramBot kann durch folgendes Notify erfolgen:&lt;br /&gt;
&lt;br /&gt;
 define N.CamCP1.Rec.TeleBot notify CamCP1:CamLastRec:.* { my $var = (ReadingsVal(&amp;quot;CamCP1&amp;quot;,&amp;quot;VideoFolder&amp;quot;,&amp;quot;&amp;quot;)).(ReadingsVal(&amp;quot;CamCP1&amp;quot;,&amp;quot;CamLastRec&amp;quot;,&amp;quot;&amp;quot;)); fhem (&amp;quot;set teleBot message $var Bewegungsaufnahme beim Carport&amp;quot;); }&lt;br /&gt;
&lt;br /&gt;
Natürlich ist TelegramBot vorab einzurichten. Der Versand erfolgt in dem Beispiel an den defaultPeer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2. Variante B&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
(noch für DSM 5.2 zu beschreiben).&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Workaround bei DSM 2-Stufen Verifizierung  ===&lt;br /&gt;
1. Benutzer in der SVS einrichten, zum Manager machen&amp;lt;br&amp;gt;&lt;br /&gt;
2. Benutzer wird automatisch auch in FHEM eingerichtet, dort zum Admin machen&amp;lt;br&amp;gt;&lt;br /&gt;
3. 2-Stufen Verifizierung ausschalten&amp;lt;br&amp;gt;&lt;br /&gt;
4. Modul / Kamera zum Laufen bringen&amp;lt;br&amp;gt;&lt;br /&gt;
5. Session im Modul auf SVS stellen&amp;lt;br&amp;gt;&lt;br /&gt;
6. Benutzer in der DSM aus der Admin-Gruppe rausnehmen&amp;lt;br&amp;gt;&lt;br /&gt;
7. 2-Stufen Verifizierung einschalten (Option nur für Admins)&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Motivierte linke Hände</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Pushbullet&amp;diff=15616</id>
		<title>Pushbullet</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Pushbullet&amp;diff=15616"/>
		<updated>2016-06-22T13:11:15Z</updated>

		<summary type="html">&lt;p&gt;Motivierte linke Hände: Aufnahme Bildversand per Skript&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Pushbullet&#039;&#039;&#039; ist ein Dienst, um Benachrichtigungen an unterschiedliche Endgeräte zu senden. Pushbullet stellt Apps für iPhone, Android, Windows (Beta), Mac OS X (bald erhältlich) sowie Plugins für Chrome und Firefox an. Eine genaue Liste kann [http://www.pushbullet.com/apps hier] eingesehen werden. Der Dienst sowie die Apps sind kostenlos. &lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Senden von Push-Nachrichten an unterschiedliche Endgeräte&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Unterstützende Dienste&lt;br /&gt;
|ModTechName=70_Pushbullet.pm&lt;br /&gt;
|ModOwner=fhainz&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
&lt;br /&gt;
Zur Benutzung von Pushbullet ist ein Google Account zwingend notwenig. Falls noch kein Google Account vorhanden ist kann man diesen [https://accounts.google.com/SignUp hier einrichten]. Anschließend kann man sich auf [http://pushbullet.com pushbullet.com] mit den Google Benutzerdaten einloggen. Den benötigten accessToken findet man in den Account Settings (rechts oben auf das Benutzer-Symbol klicken). &lt;br /&gt;
Auf dem gewünschten Endgerät muss nur noch der entsprechende Client installiert werden.&lt;br /&gt;
&lt;br /&gt;
===Offizielle Clients===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Smartphones&#039;&#039;&#039;&lt;br /&gt;
*iOS: [https://www.pushbullet.com/apps Pushbullet App]&lt;br /&gt;
*Android: [https://www.pushbullet.com/apps Pushbullet App]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Browser-Erweiterungen&#039;&#039;&#039;&lt;br /&gt;
*Firefox: [https://www.pushbullet.com/apps Pushbullet Plugin]&lt;br /&gt;
*Chrome: [https://www.pushbullet.com/apps Pushbullet Plugin]&lt;br /&gt;
*Opera: [https://www.pushbullet.com/apps Pushbullet Plugin]&lt;br /&gt;
*Safari: [https://www.pushbullet.com/apps Pushbullet Plugin]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Betriebssystem-Erweiterungen&#039;&#039;&#039;&lt;br /&gt;
*Windows: [https://www.pushbullet.com/apps Pushbullet App]&lt;br /&gt;
*Mac OS X: [https://www.pushbullet.com/apps Pushbullet App]&lt;br /&gt;
&lt;br /&gt;
===Clients durch die Community===&lt;br /&gt;
*Blackberry: [https://www.pushbullet.com/apps BlackBullet]&lt;br /&gt;
*Windows Phone: [https://www.pushbullet.com/apps PushPin]&lt;br /&gt;
*Ubuntu: [https://www.pushbullet.com/apps PB Indicator]&lt;br /&gt;
&lt;br /&gt;
Übersicht aller Clients: [https://www.pushbullet.com/apps]&lt;br /&gt;
&lt;br /&gt;
==Einbinden des Dienstes in Fhem==&lt;br /&gt;
&lt;br /&gt;
Das Modul wird mit dem folgenden Befehl in fhem definiert:&lt;br /&gt;
&lt;br /&gt;
 define &amp;lt;name&amp;gt; Pushbullet &amp;lt;accessToken&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Push Benachrichtigung senden==&lt;br /&gt;
&lt;br /&gt;
===Nachricht===&lt;br /&gt;
&lt;br /&gt;
Nachricht ohne Titel oder Gerät:&lt;br /&gt;
 set &amp;lt;name&amp;gt; message Das ist eine Nachricht&lt;br /&gt;
&lt;br /&gt;
Nachricht mit Titel ohne Gerät:&lt;br /&gt;
 set &amp;lt;name&amp;gt; message Das ist eine Nachricht | Ein Titel&lt;br /&gt;
&lt;br /&gt;
Nachricht mit Titel an Gerät iPhone:&lt;br /&gt;
 set &amp;lt;name&amp;gt; message Das ist eine Nachricht | Ein Titel | iPhone&lt;br /&gt;
&lt;br /&gt;
Nachricht mit Titel an Kontakt Max Mustermann&lt;br /&gt;
 set &amp;lt;name&amp;gt; message Das ist eine Nachricht | Ein Titel | Max Mustermann&lt;br /&gt;
&lt;br /&gt;
Wenn kein Titel angegeben wird tritt das Attribut defaultTitel in Kraft. Falls dies nicht gesetzt ist wird der Titel auf FHEM gesetzt.&lt;br /&gt;
Wenn kein Device angeben wird tritt das Attribut defaultDevice in Kraft. Falls dies nicht gesetzt ist geht der Push an alle &#039;&#039;&#039;deine&#039;&#039;&#039; Devices. Kontakte erhalten die Benachrichtigung &#039;&#039;&#039;nicht!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Link===&lt;br /&gt;
Der Inhalt des Links wird in der App direkt angezeigt. Ein Webcam Foto kann somit mit einem Touch direkt am Endgerät angezeigt werden.&lt;br /&gt;
&lt;br /&gt;
Link ohne Titel oder Gerät:&lt;br /&gt;
 set &amp;lt;name&amp;gt; link http://google.com&lt;br /&gt;
&lt;br /&gt;
Link mit Titel ohne Gerät:&lt;br /&gt;
 set &amp;lt;name&amp;gt; link http://google.com | Google&lt;br /&gt;
&lt;br /&gt;
Link mit Titel an Gerät iPhone&lt;br /&gt;
 set &amp;lt;name&amp;gt; link http://google.com | Google | iPhone&lt;br /&gt;
&lt;br /&gt;
Link mit Titel an Kontakt Max Mustermann&lt;br /&gt;
 set &amp;lt;name&amp;gt; link http://google.com | Google | MaxMustermann&lt;br /&gt;
&lt;br /&gt;
*Wenn kein Titel angegeben wird tritt das Attribut defaultTitel in Kraft. Falls dies nicht gesetzt ist wird der Titel auf FHEM gesetzt.&lt;br /&gt;
*Wenn kein Device angeben wird tritt das Attribut defaultDevice in Kraft. Falls dies nicht gesetzt ist geht der Push an alle &#039;&#039;&#039;deine&#039;&#039;&#039; Devices. Kontakte erhalten die Benachrichtigung &#039;&#039;&#039;nicht!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Liste===&lt;br /&gt;
&lt;br /&gt;
Liste ohne Titel oder Gerät:&lt;br /&gt;
 set &amp;lt;name&amp;gt; list Milch, Brot, Zucker&lt;br /&gt;
&lt;br /&gt;
Liste mit Titel ohne Gerät:&lt;br /&gt;
 set &amp;lt;name&amp;gt; list Milch, Brot, Zucker | Einkaufsliste&lt;br /&gt;
&lt;br /&gt;
Liste mit Titel an Gerät iPhone&lt;br /&gt;
 set &amp;lt;name&amp;gt; list Milch, Brot, Zucker | Einkaufsliste | iPhone&lt;br /&gt;
&lt;br /&gt;
Liste mit Titel an Kontakt Max Mustermann&lt;br /&gt;
 set &amp;lt;name&amp;gt; list Milch, Brot, Zucker | Einkaufsliste | MaxMustermann&lt;br /&gt;
&lt;br /&gt;
*Wenn kein Titel angegeben wird tritt das Attribut defaultTitel in Kraft. Falls dies nicht gesetzt ist wird der Titel auf FHEM gesetzt.&lt;br /&gt;
*Wenn kein Device angeben wird tritt das Attribut defaultDevice in Kraft. Falls dies nicht gesetzt ist geht der Push an alle &#039;&#039;&#039;deine&#039;&#039;&#039; Devices. Kontakte erhalten die Benachrichtigung &#039;&#039;&#039;nicht!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Bilder versenden===&lt;br /&gt;
Das geht über ein (von User stkr002 erstelltes) externes Skript, das im Bedarfsfall aus FHEM aufgerufen werden muss:&lt;br /&gt;
&amp;lt;pre&amp;gt;#!/usr/bin/perl -w&lt;br /&gt;
use WWW::PushBullet;&lt;br /&gt;
$KEY = &#039;XXXXXXXXXXXXXXXXXXXXXXX&#039;;&lt;br /&gt;
$pb = WWW::PushBullet-&amp;gt;new({apikey =&amp;gt; $KEY});&lt;br /&gt;
$filename = &#039;/opt/fhem/snapshot/ipcam_snapshot.jpg&#039;;&lt;br /&gt;
$pb-&amp;gt;push_file({ file_name =&amp;gt; $filename});&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aufrufen kann man das Skript z.B. über Perl-Code aus FHEM:&lt;br /&gt;
&lt;br /&gt;
  my $befehl = &amp;quot;/home/user/script&amp;quot;;&lt;br /&gt;
  my $ausgabe = `$befehl`;&lt;br /&gt;
&lt;br /&gt;
Wenn man keinen festen Dateinamen und Key verwenden möchte, sondern unterschiedliche Dateien an unterschiedliche Empfänger schicken möchte, muss das oben gepostete Skript die Auswertung von Kommandozeilenparametern mit eingebaut werden:&lt;br /&gt;
&lt;br /&gt;
  my $argument = shift @ARGV;&lt;br /&gt;
  my $noch_ein_argument = shift @ARGV;&lt;br /&gt;
&lt;br /&gt;
etc.&lt;br /&gt;
&lt;br /&gt;
==Kontakt hinzufügen==&lt;br /&gt;
Mit&lt;br /&gt;
 set &amp;lt;name&amp;gt; contactAdd &amp;lt;Name&amp;gt; | &amp;lt;email&amp;gt;&lt;br /&gt;
wird eine neuer Kontakt hinzugefügt. Dieser bekommt erstmal eine E-Mail mit einer Einladung zur Pushbullet App. Fall die App nicht installiert wird, bekommt der Kontakt Push-Benachrichtigungen als E-Mail zugestellt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Gerät / Kontakt umbenennen==&lt;br /&gt;
Mit&lt;br /&gt;
 set &amp;lt;name&amp;gt; deviceRename &amp;lt;alterName&amp;gt; | &amp;lt;neuerName&amp;gt;&lt;br /&gt;
wird ein Gerät oder Kontakt umbenannt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Gerät / Kontakt löschen==&lt;br /&gt;
Mit&lt;br /&gt;
  set &amp;lt;name&amp;gt; deviceDelete &amp;lt;name&amp;gt;&lt;br /&gt;
wird ein Gerät oder Kontakt gelöscht.&lt;br /&gt;
&lt;br /&gt;
==Geräte / Kontakte neu einlesen==&lt;br /&gt;
Mit&lt;br /&gt;
  get &amp;lt;name&amp;gt; devices&lt;br /&gt;
kann man die Device Liste von pushbullet.com neu einlesen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Pushbullet Website==&lt;br /&gt;
Die Pushbullet Website bietet umfangreiche Möglichkeiten die gesendeten Push Nachrichten, Geräte und Kontakte zu verwalten. Weiters kann man auch Nachrichten versenden und löschen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Bekannte Probleme==&lt;br /&gt;
===Cannot load module Pushbullet===&lt;br /&gt;
&lt;br /&gt;
Bei einigen Installationen kommt es beim Start zu folgender Fehlermeldung:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Error messages while initializing FHEM:&lt;br /&gt;
configfile: Cannot load module Pushbullet&lt;br /&gt;
Cannot load module Pushbullet&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Abhilfe schafft in der Regel, JSON zu installieren. Zum Beispiel auf dem Raspberry:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get install libjson-perl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Nachrichten von fhem werden nicht verschickt===&lt;br /&gt;
&lt;br /&gt;
Nachrichten von http://www.pushbullet.com/ kommen jedoch auf dem Telephon an. Sicherstellen, daß das perl IO:Socket:SSL Modul installiert ist:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get install libio-socket-ssl-perl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
*Thread über das Modul im [http://forum.fhem.de/index.php/topic,29796.0.html FHEM-Forum]&lt;br /&gt;
*Pushbullet [https://www.pushbullet.com/apps Apps]&lt;br /&gt;
*Pushbullet [https://docs.pushbullet.com API]&lt;br /&gt;
*Homepage: [http://pushbullet.com pushbullet.com]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Motivierte linke Hände</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=GDS&amp;diff=15270</id>
		<title>GDS</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=GDS&amp;diff=15270"/>
		<updated>2016-05-02T14:34:31Z</updated>

		<summary type="html">&lt;p&gt;Motivierte linke Hände: Anpassungen an neue Version des GDS-Moduls&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Herunterladen und Auswerten von Daten des Deutschen Wetterdienstes&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Unterstuetzende Dienste&lt;br /&gt;
|ModFTopic=14106&lt;br /&gt;
|ModTechName=55_GDS.pm&lt;br /&gt;
|ModOwner=betateilchen&lt;br /&gt;
}}&lt;br /&gt;
[[GDS]] ist ein Modul, mit dessen Hilfe man sich die Daten des Deutschen Wetterdienstes herunterladen kann und dann Wetterlage, diverse Wetterkarten und/oder Unwettermeldungen anzeigen/auswerten kann.&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
=== Anmeldung beim DWD ===&lt;br /&gt;
Als erstes muss man sich beim Deutschen Wetterdienst zur [http://www.dwd.de/grundversorgung Grundversorgung] kostenlos [http://kunden.dwd.de/gdsRegistration/gdsRegistrationStart.do anmelden].&lt;br /&gt;
&lt;br /&gt;
=== Installation der benötigten Perl-Module ===&lt;br /&gt;
GDS benötigt die Perl-Module Net::FTP, List::MoreUtils, XML::Simple, Text::CSV. &lt;br /&gt;
&lt;br /&gt;
Für Ubuntu und Raspi sollte funktionieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;apt-get install libnet-lite-ftp-perl liblist-moreutils-perl libxml-simple-perl libtext-csv-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das ftp-Modul verursacht manchmal Probleme bei der Installation. Teilweise ist es wohl auch schon in der Grundinstallation vorhanden, ansonsten kann man versuchen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;apt-get install libnet-ftp-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;apt-get install libwww-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Abhängig von der Perl-Version muss ggf. auch noch Archive::Zip installiert werden.&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
=== Define ===&lt;br /&gt;
&amp;lt;code&amp;gt;define [gdsName] GDS [gdsUsername] [gdsPasswort]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[gdsUsername] und [gdsPasswort] gibt es nach Anmeldung vom DWD.&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
Die vollständige Liste der Attribute ist in der [http://fhem.de/commandref.html#GDS commandref].&lt;br /&gt;
&lt;br /&gt;
Hilfreich kann u.a. sein, wenn man hinter eine Firewall sitzt und der Datenabruf nicht funktioniert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr [gdsName] gdsPassiveFtp 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
=== Liste der verfügbaren Zellen für Warnungen abrufen ===&lt;br /&gt;
&amp;lt;code&amp;gt;get [gdsName] list capstations&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Manuelle Aktualisierung der Daten ===&lt;br /&gt;
&lt;br /&gt;
==== Aktuelle Daten vom Server abrufen ====&lt;br /&gt;
&amp;lt;code&amp;gt;get [gdsName] rereadcfg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Readings aus abgerufenen Daten aktualisieren ====&lt;br /&gt;
&amp;lt;code&amp;gt;set [gdsName] update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Station setzen für automatischen, periodischen Abruf ===&lt;br /&gt;
Station setzen, für die beim fhem-Start und dann alle 20 Minuten die Vorhersagedaten eingelesen werden sollen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;set [gdsName] forecasts [Station]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Automatisch abgerufen (alle 20 Minuten) werden nur die mit fc_ beginnenden Readings (forecast, d.h. die Vorhersage). Die a_ Readings (Warnungen, etc.) müssen manuell aktualisiert werden.&lt;br /&gt;
&lt;br /&gt;
=== Unwetterwarnungen nach Region aus gelesenen Daten raussuchen ===&lt;br /&gt;
&amp;lt;code&amp;gt;set [gdsName] warnings [Region]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
z.B.: &amp;lt;code&amp;gt;set gds warn Nordrhein-Westfalen&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Region kann ausgeschrieben oder mit den [http://www.bmelv-statistik.de/de/daten-tabellen-suche/abkuerzungen-der-bundeslaender/ offiziellen Abkürzungen] bezeichnet werden.&lt;br /&gt;
&lt;br /&gt;
=== Unwetterwarnungen granularer nach Kreis aus gelesenenen Daten raussuchen ===&lt;br /&gt;
&amp;lt;code&amp;gt;set [gdsName] alerts [Warncell-ID]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die passende Warncell-ID kann man sich über &amp;lt;code&amp;gt;get [gdsName] list capstations&amp;lt;/code&amp;gt; heraussuchen.&lt;br /&gt;
&lt;br /&gt;
Ob es passende Warnmeldungen gibt, kann dann über das Reading &amp;lt;code&amp;gt;a_valid&amp;lt;/code&amp;gt; abgefragt werden. Wenn &amp;lt;code&amp;gt;a_valid&amp;lt;/code&amp;gt; 1 ist, gibt &amp;lt;code&amp;gt;a_count&amp;lt;/code&amp;gt; die Anzahl der vorhandenen Warnmeldungen an. Die Warnungen stehen dann in den Readings &amp;lt;code&amp;gt;a_X_...&amp;lt;/code&amp;gt;, wobei X ab 0 hochzählt. D.h. wenn &amp;lt;code&amp;gt;a_count&amp;lt;/code&amp;gt; 2 ist, gibt es a_0_... und a_1_... Ein praktisches Reading ist z.B. &amp;lt;code&amp;gt;a_X_headline&amp;lt;/code&amp;gt;, das die Zusammenfassung der jeweiligen Warnung als kurze Textzusammenfassung enthält.&lt;br /&gt;
&lt;br /&gt;
Alle eingelesenen Warnmeldungen kann man sich über die Funktion &amp;lt;code&amp;gt;gdsHeadlines()&amp;lt;/code&amp;gt; ausgeben lassen. Z.B. einfach in der Befehlszeile von fhem eingeben:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;{gdsHeadlines([gdsName])}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer möchte, kann auch das Trennzeichen bei mehreren Meldungen konfigurieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;{gdsHeadlines([gdsName],&#039;[Trennzeichen]&#039;)}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Z.B. also&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;{gdsHeadlines(gds, &#039;***&#039;)}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Standard für das Trennzeichen ist der senkrechte Strich.&lt;br /&gt;
&lt;br /&gt;
Jedenfalls nach &amp;lt;code&amp;gt;attr [gdsName] gdsLong 1&amp;lt;/code&amp;gt; werden in a_X_description die Langmeldungen zu den Warnungen ausgegeben.&lt;br /&gt;
&lt;br /&gt;
=== Karten abrufen ===&lt;br /&gt;
Wetterlage: &amp;lt;code&amp;gt;get [gdsName] conditionsmap [Station] &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vorhersage: &amp;lt;code&amp;gt;get [gdsName] forecastsmap [Station]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Warnungen: &amp;lt;code&amp;gt;get [gdsName] warningsmap [Station]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Radar: &amp;lt;code&amp;gt;get [gdsName] radarmap [Station]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
&lt;br /&gt;
Für GDS sollten die Daten regelmäßig aktualisiert werden. Dafür richtet man am besten &#039;&#039;&#039;zwei&#039;&#039;&#039; zeitlich &#039;&#039;&#039;nacheinander&#039;&#039;&#039; laufende ats ein:&lt;br /&gt;
&lt;br /&gt;
Einen zum Holen aktualisierter Daten vom Server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define readGDS at +*00:10:00 get [gdsName] rereadcfg &lt;br /&gt;
attr readGDS alignTime 22:30:05 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Einen zweiten, der danach läuft, der aus den aktualisierten Serverdaten dann die Readings aktualisiert; z.B. für die Alerts:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define checkGDS at +*00:10:00 get [gdsName] alerts [Region] &lt;br /&gt;
attr checkGDS alignTime 22:35:05&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig ist, dass beide at zeitlich auseinander liegen, im vorstehenden Beispiel durch die unterschiedlichen &amp;quot;alignTime&amp;quot; Attribute um 5 Minuten.&lt;br /&gt;
&lt;br /&gt;
=== Karten regelmäßig vom Server neu laden ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define Karten at +*00:30:00 get [gdsName] radarmap Nordost; get [gdsName] conditionsmap Nordost; get [gdsName] warningsmap Berlin&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hinweis: Die vorstehende Schreibweise ist die Schreibweise im Editiermodus der Weboberfläche von fhem. Wer die Zeile per copy &amp;amp; paste direkt in die Kommandozeile eintragen will, muss die Semikolons verdoppeln, sonst geht alles nach dem ersten Semikolon verloren.&lt;br /&gt;
&lt;br /&gt;
Also:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define Karten at +*00:30:00 get [gdsName] radarmap Nordost;; get [gdsName] conditionsmap Nordost;; get [gdsName] warningsmap Berlin&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
Das GDS-Modul wurde mittlerweile auf &amp;quot;non-blocking&amp;quot; umgeschrieben, führt aber dennoch hin und wieder zu Meldungen einzelner Nutzer, dass FHEM &amp;quot;einfriert&amp;quot; (nichts macht), während auf die Rückmeldung von, z. B., einem FTP-Transfer (&amp;quot;get [gdsName] conditionsmap&amp;quot; etc.) gewartet wird. Das kann bei Timing-kritischen Bestandteilen zu Problemen führen, weil Events nicht mitbekommen werden, die Ansteuerung von Geräten nicht funktioniert, etc.&lt;br /&gt;
&lt;br /&gt;
Einige dieser FHEM blockierenden Aktivitäten lassen sich mittels cron recht einfach auslagern (z. B. der ftp Transfer), für andere müsste das GDS-Modul umgeschrieben werden. Details dazu gibt es z. B. in [http://forum.fhem.de/index.php/topic,38106.0.html diesem schon etwas älteren Thread] im Forum.&lt;br /&gt;
&lt;br /&gt;
Nachfolgend noch eine Möglichkeit, das regelmäßige Laden der Karten vom Server in einen - dann FHEM nicht mehr blockierenden - cron-Job auszulagern:&lt;br /&gt;
&lt;br /&gt;
Was Ihr wissen müsst:&lt;br /&gt;
*Wo legt das GDS-Modul die Karten ab? Z. B. im Temporär-Verzeichnis, /tmp. Wenn Ihr eine radarmap gespeichert habt, findet Ihr den Speicherort recht einfach, indem Ihr unter Linux &amp;lt;code&amp;gt;cd / &amp;amp;&amp;amp; find . | grep gds_radarmap.jpg&amp;lt;/code&amp;gt; ausführt.&lt;br /&gt;
*Wo liegen die Karten auf dem DWD-ftp-Server? Die Adresse des Servers ist [ftp://ftp-outgoing2.dwd.de ftp://ftp-outgoing2.dwd.de] und die Karten findet Ihr unterhalb von [ftp://ftp-outgoing2.dwd.de/gds/specials/ ftp://ftp-outgoing2.dwd.de/gds/specials/], z. B. die conditions maps unter [ftp://ftp-outgoing2.dwd.de/gds/specials/observations/maps/germany/ ftp://ftp-outgoing2.dwd.de/gds/specials/observations/maps/germany/], radarmaps unter [ftp://ftp-outgoing2.dwd.de/gds/specials/radar/ ftp://ftp-outgoing2.dwd.de/gds/specials/radar/] und dann dem passenden Unterverzeichnis für Eure Region, etc.&lt;br /&gt;
*Eure Login-Daten für den DWD ftp-server (habt Ihr vom DWD zugeschickt bekommen und in die Definition des GDS-Moduls eingetragen).&lt;br /&gt;
&lt;br /&gt;
Anbei ein Beispielscript, das jeweils die neueste conditions- und Radarmap für Südwest-Deutschland holt und im /tmp-Verzeichnis ablegt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
if [ ! -d &amp;quot;/tmp/gds&amp;quot; ]; then&lt;br /&gt;
  mkdir /tmp/gds&lt;br /&gt;
fi&lt;br /&gt;
# ftp-Server als Verzeichnis mounten:&lt;br /&gt;
curlftpfs ftp-outgoing2.dwd.de /tmp/gds -o user=user:pass&lt;br /&gt;
cd /tmp/gds/gds/specials/radar/southwest&lt;br /&gt;
NEUESTE_DATEI=$(ls -t | head -n 1)&lt;br /&gt;
echo Downloading ${NEUESTE_DATEI}...&lt;br /&gt;
cp &amp;quot;${NEUESTE_DATEI}&amp;quot; &amp;quot;/tmp/gds_radarmap.jpg&amp;quot;&lt;br /&gt;
echo ok.&lt;br /&gt;
chown fhem:dialout /tmp/gds_radarmap.jpg&lt;br /&gt;
cd /tmp/gds/gds/specials/observations/maps/germany&lt;br /&gt;
NEUESTE_DATEI=$(ls -t Suedwest* | head -n 1)&lt;br /&gt;
echo Downloading ${NEUESTE_DATEI}...&lt;br /&gt;
cp &amp;quot;${NEUESTE_DATEI}&amp;quot; &amp;quot;/tmp/gds_conditionsmap.jpg&amp;quot;&lt;br /&gt;
echo ok.&lt;br /&gt;
chown fhem:dialout /tmp/gds_conditionsmap.jpg&lt;br /&gt;
# unmount&lt;br /&gt;
fusermount -u /tmp/gds&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hinweise:&lt;br /&gt;
*user:pass durch Eure Login-Daten für den Server ersetzen.&lt;br /&gt;
*/tmp ggf. anpassen, wenn bei Euch die GDS-Karten in einem anderen Verzeichnis liegen.&lt;br /&gt;
*&amp;quot;Suedwest&amp;quot; durch Eure Region ersetzen. Dateinamen können auf dem ftp-Server eingesehen werden.&lt;br /&gt;
*Die Angabe von user:pass im Klartext im Script ist unsicher. Sicherer wäre die Angabe einer versteckten und in den Rechten beschränkten Konfigurationsdatei.&lt;br /&gt;
*fhem:dialout sind die Rechte unter Debian. Mit einem &amp;lt;code&amp;gt;li -l&amp;lt;/code&amp;gt; im Verzeichnis, in dem GDS die Karten ablegt, könnt Ihr Euch - vor dem Ausführen des Scripts - den Benutzer und die Rechte ansehen, wie das GDS-Modul bei Euch die Karten ablegt.&lt;br /&gt;
*Das Script braucht curlftpfs, das sich i.d.R. problemlos mittels &amp;lt;code&amp;gt;apt-get install curlftpfs&amp;lt;/code&amp;gt; (Debian) o.ä. installieren lassen sollte.&lt;br /&gt;
&lt;br /&gt;
Dann das Script noch regelmäßig über cron ausführen lassen, und schon blockiert Euer FHEM an einer Stelle weniger.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [[Wetter und Wettervorhersagen]]&lt;/div&gt;</summary>
		<author><name>Motivierte linke Hände</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Calendar&amp;diff=14996</id>
		<title>Calendar</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Calendar&amp;diff=14996"/>
		<updated>2016-04-05T15:26:59Z</updated>

		<summary type="html">&lt;p&gt;Motivierte linke Hände: Beta-Hinweis entfernt, Tipp zu ownCloud-Kalender aufgenommen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Anlegen eines Kalenderobjekts&lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModForumArea=Unterstützende Dienste&lt;br /&gt;
|ModTechName=57_Calendar.pm&lt;br /&gt;
|ModOwner=borisneubert ({{Link2FU|10|Dr. Boris Neubert}})&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Calendar]] ist ein Hilfsmodul, das Kalenderereignisse aus einer Datei oder einem über die URL angegeben Kalender holt. Der Kalender muss im iCal-Format vorliegen.&lt;br /&gt;
&lt;br /&gt;
Zur Anzeige der Kalenderereignisse kann das Modul [[CALVIEW]] verwendet werden.&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
Wenn die Kalender-URL mit &#039;&#039;https://&#039;&#039; beginnt, muss das Perl Modul IO::Socket::SSL installiert sein (z.B. mit &amp;lt;code&amp;gt;cpan -i IO::Socket::SSL&amp;lt;/code&amp;gt; oder mit &amp;lt;code&amp;gt;apt-get install libio-socket-ssl-perl&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
=== Define ===&lt;br /&gt;
Siehe commandref;&lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; Calendar ical url &amp;lt;URL&amp;gt; [&amp;lt;interval&amp;gt;]&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; Calendar ical file &amp;lt;FILENAME&amp;gt; [&amp;lt;interval&amp;gt;]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sofern für den Zugriff auf den Kalender Benutzername und Passwort erforderlich sind, können diese in der URL beispielsweise so mit angegeben werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;define myCalendar ical url &amp;lt;nowiki&amp;gt;https://user:password@my.domain.com/.../yourcalendar.ics&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
Siehe commandref;&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiel(e) ==&lt;br /&gt;
* Einbindung von owncloud-Kalendern&lt;br /&gt;
Für ownCloud-Kalender muss bei der Definition als &amp;lt;URL&amp;gt; der Link zum Export des jeweiligen Kalenders angegeben werden. Der Link kann in der Weboberfläche von ownCloud gefunden werden. Für ownCloud 9.0 folgt dieser URL z.B. dem folgenden Muster:&lt;br /&gt;
:&amp;lt;code&amp;gt;http://&amp;lt;ownCloud-Benutzer&amp;gt;:&amp;lt;ownCloud-Passwort&amp;gt;@example.com/owncloud/remote.php/dav/calendars/&amp;lt;ownCloud-Benutzer&amp;gt;/&amp;lt;Kalendername&amp;gt;?export&amp;lt;/code&amp;gt;&lt;br /&gt;
Der Standard für &amp;lt;Kalendername&amp;gt; ist &amp;lt;code&amp;gt;defaultcalendar&amp;lt;/code&amp;gt;&lt;br /&gt;
* [[Google-Kalender zur Steuerung von Dummies]]&lt;br /&gt;
* [[Wochenende, Feiertage und Schulferien]]&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Modul, das alle Termine aus einer bestehenden Instanz von [[Calendar]] in Readings übernimmt: [[CALVIEW]]&lt;/div&gt;</summary>
		<author><name>Motivierte linke Hände</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Google-Kalender_zur_Steuerung_von_Dummies&amp;diff=14115</id>
		<title>Google-Kalender zur Steuerung von Dummies</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Google-Kalender_zur_Steuerung_von_Dummies&amp;diff=14115"/>
		<updated>2016-02-09T08:55:44Z</updated>

		<summary type="html">&lt;p&gt;Motivierte linke Hände: Anpassung der Syntax an neue Version von Calendar&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mit dem Kalendermodul [http://fhem.de/commandref.html Calendar] ist es möglich, Ereignisse aus Kalendern im&lt;br /&gt;
ICal-Format abzufragen.&lt;br /&gt;
Dies und der Wiki-Eintrag [[Wochenende, Feiertage und Schulferien]] hat mich dazu veranlasst, dass ich durch&lt;br /&gt;
Kalendereinträge im Google-Kalender den Status meiner beiden [[dummy|Dummies]] &amp;quot;Urlaub&amp;quot; und &amp;quot;Besuch&amp;quot; steuere. Durch diese&lt;br /&gt;
beiden Dummies werden zum Beispiel die Rolläden im Schlafzimmer oder Gästezimmer bei Besuch oder Urlaub anders&lt;br /&gt;
gesteuert als ohne Besuch oder unter der Woche. Auch meine Zirkulationspumpe soll so bedarfsgerecht gesteuert werden.&lt;br /&gt;
Dass am Wochenende anders gesteuert wird, ist ja mit $we kein Problem.&lt;br /&gt;
Zuerst wird dafür der Kalender definiert:&lt;br /&gt;
&lt;br /&gt;
 define Kalender_Christian Calendar ical url &amp;lt;der richtige Kalenderlink&amp;gt; 14400&lt;br /&gt;
&lt;br /&gt;
Den Kalenderlink [https://support.google.com/calendar/answer/37103?hl=de] findet man wie beschrieben heraus.&lt;br /&gt;
Dann habe ich meine Dummies definiert:&lt;br /&gt;
&lt;br /&gt;
 define Urlaub_dummy dummy&lt;br /&gt;
 attr Urlaub_dummy room Kalender&lt;br /&gt;
 attr Urlaub_dummy setList ja nein&lt;br /&gt;
 attr Urlaub_dummy webCmd ja:nein&lt;br /&gt;
 define Gast_dummy dummy&lt;br /&gt;
 attr Gast_dummy room Kalender&lt;br /&gt;
 attr Gast_dummy setList ja nein&lt;br /&gt;
 attr Gast_dummy webCmd ja:nein&lt;br /&gt;
&lt;br /&gt;
Und nun mussten die Notifys definiert werden, um bei entsprechenden Einträgen im Google-Kalender den Status der&lt;br /&gt;
Dummies zu setzen.&lt;br /&gt;
&lt;br /&gt;
 define Kalender_Christian_Start notify Kalender_Christian:modeStarted.*googlecom.* {\&lt;br /&gt;
 Kalenderstart(&amp;quot;$EVENT&amp;quot;);;\&lt;br /&gt;
 }&lt;br /&gt;
 define Kalender_Christian_Ende notify Kalender_Christian:modeEnded.*googlecom.* {\&lt;br /&gt;
 Kalenderende(&amp;quot;$EVENT&amp;quot;);;\&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Um nicht für verschiedene Dummies immer einzelne Notifys zu bauen, wird hier bei mir je eine Funktion aus meiner [[99 myUtils anlegen|99_MyUtils.pm]] aufgerufen und das Event als Parameter übergeben. Die beiden zugehörigen&lt;br /&gt;
Funktionen für den Start und das Ende des Kalenderevents schauen so aus:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
sub&lt;br /&gt;
Kalenderstart ($)&lt;br /&gt;
{&lt;br /&gt;
	my ($Ereignis) = @_;&lt;br /&gt;
	my @Ereignisarray = split(/.*:\s/,$Ereignis);&lt;br /&gt;
	my $Ereignisteil1 = $Ereignisarray[1];&lt;br /&gt;
	my @uids = split(/;/,$Ereignisteil1);&lt;br /&gt;
	foreach my $uid (@uids) {&lt;br /&gt;
		my $Kalendertext = fhem(&amp;quot;get Kalender_Christian summary uid=$uid 1&amp;quot;);&lt;br /&gt;
		if ($Kalendertext =~ /Urlaub/) {&lt;br /&gt;
			fhem(&amp;quot;set Urlaub_dummy ja&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		if ($Kalendertext =~ /Besuch/) {&lt;br /&gt;
			fhem(&amp;quot;set Gast_dummy ja&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
sub Kalenderende ($) {&lt;br /&gt;
	my ($Ereignis) = @_;&lt;br /&gt;
	my @Ereignisarray = split(/.*:\s/,$Ereignis);&lt;br /&gt;
	my $Ereignisteil1 = $Ereignisarray[1];&lt;br /&gt;
	my @uids = split(/;/,$Ereignisteil1);&lt;br /&gt;
	foreach my $uid (@uids) {&lt;br /&gt;
		my $Kalendertext = fhem(&amp;quot;get Kalender_Christian summary uid=$uid 1&amp;quot;);&lt;br /&gt;
		if ($Kalendertext =~ /Urlaub/) {&lt;br /&gt;
			fhem(&amp;quot;set Urlaub_dummy nein&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		if ($Kalendertext =~ /Besuch/) {&lt;br /&gt;
			fhem(&amp;quot;set Gast_dummy nein&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zur Erläuterung: Als Ereignis wird z.B. &amp;quot;&#039;&#039;modeStarted: 9aas2amo7td47th4sf7mlocl48googlecom&#039;&#039;&amp;quot; oder bei 2 gleichzeitigen&lt;br /&gt;
Ereignissen: &amp;quot;&#039;&#039;modeStarted: arqpe2a2snu6qn64dt0men7nd0googlecom;j0pjiupfb1sk3m5s64hbeo6880googlecom&#039;&#039;&amp;quot;&lt;br /&gt;
übergeben. Da uns aber nur die eindeutige UID interessiert, wird das Ereignis beim Vorkommen der Zeichen &amp;quot;: Leerzeichen&amp;quot;&lt;br /&gt;
also nach modeStarted: geteilt (&amp;lt;code&amp;gt;split(/.*:\s/,$Ereignis)&amp;lt;/code&amp;gt;). Die beiden Teile werden in ein Array (&amp;lt;code&amp;gt;@Ereignisarray&amp;lt;/code&amp;gt;) gespeichert.&lt;br /&gt;
Und als 2. Element in dem Array ist nun die uns interessierende UID (&amp;lt;code&amp;gt;$Ereignisarray[1]&amp;lt;/code&amp;gt;) vorhanden, mit welcher wir weiter&lt;br /&gt;
arbeiten. Da auch mit dem Fall mehrerer gleichzeitiger Ereignisse umgegangen werden können soll, müssen wir bei mehreren&lt;br /&gt;
UIDs diese wieder splitten. Diesmal beim Vorkommen des Semikolons als Trennzeichen (&amp;lt;code&amp;gt;split(/;/,$Ereignisteil1)&amp;lt;/code&amp;gt;). Auch die&lt;br /&gt;
UIDs werden wieder in einem Array gespeichert und dann mittels der foreach-Schleife nacheinander abgearbeitet. Und&lt;br /&gt;
hierbei wird abhängig von der mittels UID abgerufenen Kalenderbeschreibung (&amp;lt;code&amp;gt;fhem(&amp;quot;get Kalender_Christian summary&lt;br /&gt;
uid=$uid 1&amp;quot;)&amp;lt;/code&amp;gt;) ein Vergleich auf die Werte &amp;quot;Besuch&amp;quot; oder &amp;quot;Urlaub&amp;quot; durchgeführt (&amp;lt;code&amp;gt;if ($Kalendertext =~ /Urlaub/)&amp;lt;/code&amp;gt;) und davon&lt;br /&gt;
abhängig der Dummy-Status gesetzt.&lt;br /&gt;
Abhängig von diesen Dummies reagiert dann meine Rollosteuerung.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Motivierte linke Hände</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Apache_Authentication_Proxy&amp;diff=13496</id>
		<title>Apache Authentication Proxy</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Apache_Authentication_Proxy&amp;diff=13496"/>
		<updated>2016-01-08T14:15:34Z</updated>

		<summary type="html">&lt;p&gt;Motivierte linke Hände: Tipps zur Beseitigung weiterer Hürden aufgenommen, Config ergänzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Konfiguration ==&lt;br /&gt;
&lt;br /&gt;
Um den Zugriff auf FHEMWEB etwas sicherer zu machen, kann man den Webzugriff über einen Apachen laufen lassen. Dies ist ein kurzes Rezept, um Zugriffe auf FHEMWEB über einen Apachen authentifizieren zu lassen. Erstellt wurde es auf Debian Squeeze, sollte aber auch mit Ubuntu funktionieren.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;apt-get install apache2 libapache2-mod-proxy-html&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Step 1) FHEMWEB sollte nur noch auf dem Loopback lauschen, also kein &#039;global&#039; Attribut in der Definition in fhem.cfg&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define WEBS FHEMWEB 8084&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Step 2) die folgenden Apache2 Module müssen aktiviert sein: mod_proxy + mod_proxy_http&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;a2enmod proxy&lt;br /&gt;
a2enmod proxy_http&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Step 3) neue Datei /etc/apache2/conf.d/fhem:&lt;br /&gt;
&lt;br /&gt;
Diese Konfiguration sorgt dafür, dass alle Anfragen unter /fhem weiter nach [http://localhost/fhem http://localhost/fhem] geleitet werden. Zusätzlich wird eine Basic-Authentifizierung eingeschaltet. Die Benutzerdatenbank ist dann in /etc/fhem-htpasswd zu finden.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;amp;lt;Location /fhem&amp;amp;gt;&lt;br /&gt;
  # ProxyPass/ProxyPassReverse leitet HTTP requests auf eine andere URL um&lt;br /&gt;
  ProxyPass http://localhost:8084/fhem&lt;br /&gt;
  ProxyPassReverse http://localhost:8084/fhem&lt;br /&gt;
  ProxyHTMLEnable On&lt;br /&gt;
  # ProxyHTMLURLMap passt Links im HTML/JavaScript Source an&lt;br /&gt;
  ProxyHTMLURLMap /        /fhem/&lt;br /&gt;
  ProxyHTMLURLMap /fhem/     /fhem/&lt;br /&gt;
  AuthType Basic&lt;br /&gt;
  AuthName &amp;amp;quot;Password Required&amp;amp;quot;&lt;br /&gt;
  AuthUserFile /etc/fhem-htpasswd&lt;br /&gt;
  Require valid-user&lt;br /&gt;
  Order deny,allow&lt;br /&gt;
  Allow from all&lt;br /&gt;
&amp;amp;lt;/Location&amp;amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Step 4) Benutzer-Datenbank in /etc/fhem-htpasswd anlegen&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# -c -&amp;amp;gt; create file&lt;br /&gt;
# -s SHA encryption&lt;br /&gt;
htpasswd -c -s /etc/fhem-htpasswd &amp;amp;lt;username&amp;amp;gt;&lt;br /&gt;
# add more users with&lt;br /&gt;
htpasswd -s /etc/fhem-htpasswd &amp;amp;lt;username&amp;amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Step 5) Apache neu starten&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;invoke-rc.d apache2 reload&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;service apache2 reload&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fertig. FHEM ist jetzt über http://server/fhem erreichbar. Alle Zugriffe müssen aber erst mit Benutzername + Passwort freigeschaltet werden.&lt;br /&gt;
&lt;br /&gt;
== Hinweis zu Apache 2.4 ==&lt;br /&gt;
Es muss zusätzlich das Modul &#039;&#039;&#039;proxy_html&#039;&#039;&#039; aktiviert werden (&amp;lt;code&amp;gt;a2enmod proxy_html&amp;lt;/code&amp;gt;).&lt;br /&gt;
Und die zu erstellende Config-Datei muss jetzt nach &#039;&#039;/etc/apache2/conf-available/fhem.conf&#039;&#039; (statt /etc/apache2/conf.d/fhem).&lt;br /&gt;
&lt;br /&gt;
== Mögliche Probleme ==&lt;br /&gt;
&lt;br /&gt;
=== Invalid command &#039;ProxyHTMLURLMap&#039; ===&lt;br /&gt;
Falls nach dem Neustart des Apache folgende Fehlermeldung kommt:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;Invalid command &#039;ProxyHTMLURLMap&#039;, perhaps misspelled or defined by a module not included in the server configuration&lt;br /&gt;
Action &#039;configtest&#039; failed.&lt;br /&gt;
The Apache error log may have more information.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
fehlt das Paket libapache2-mod-proxy-html. Einfach mit &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;apt-get install libapache2-mod-proxy-html&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
nachinstallieren.&lt;br /&gt;
&lt;br /&gt;
=== ProxyHTMLURLMap funktioniert nicht ===&lt;br /&gt;
&lt;br /&gt;
Nicht bei allen Distributionen scheint die Konfigurationsdatei proxy_html.conf mitgeliefert zu werden. Allerdings ist seit einigen Versionen aus mod_proxy_ssl alle Information über zu ersetzende Links etc. entfernt worden. proxy_html.conf wird daher zwingend benötigt. Sie sollte in /etc/apache2/mods-available liegen und bei der Aktivierung des mods nach /etc/apache2/mods-enabled verlinkt werden. Wenn das nicht der Fall ist, kann man das nachholen.&lt;br /&gt;
&lt;br /&gt;
Eine Beispielkonfiguration gibt es [http://apache.webthing.com/svn/apache/filters/proxy_html/proxy_html.conf hier beim ursprünglichen Autor des mods]. Abspeichern unter /etc/apache2/mods-available/proxy_html.conf und dann verlinken:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt;ln -s /etc/apache2/mods-available/proxy_html.conf /etc/apache2/mods-enabled/proxy_html.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann Apache neu starten/laden.&lt;br /&gt;
&lt;br /&gt;
=== Content Encoding Fehler ===&lt;br /&gt;
&lt;br /&gt;
Wenn Firefox und Chromium sich nach der Konfigurationsänderung über Content Encoding Fehler beschweren, könnte Folgendes helfen:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt;SetOutputFilter INFLATE;proxy-html;DEFLATE&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Motivierte linke Hände</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Harmony&amp;diff=13363</id>
		<title>Harmony</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Harmony&amp;diff=13363"/>
		<updated>2015-12-27T08:08:45Z</updated>

		<summary type="html">&lt;p&gt;Motivierte linke Hände: Typos, freeze bei Nichterreichbarkeit des Hubs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:harmoony}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Anbindung Logitech Harmony Hub basierter Fernbedienungen&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=harmony&lt;br /&gt;
|ModForumArea=Multimedia&lt;br /&gt;
|ModTechName=37_harmony.pm&lt;br /&gt;
|ModOwner=Andre ([http://forum.fhem.de/index.php?action=profile;u=430 Forum] / [[Benutzer Diskussion:justme|Wiki]])}}&lt;br /&gt;
&lt;br /&gt;
Das Fhem-[[:Kategorie:Gerätemodul|Gerätemodul]] [[harmony]] bietet die Möglichkeit Logitech Harmony Hub basierte Fernbedienungen an Fhem anzubinden und so von Fhem aus Aktivitäten zu starten und zu stoppen, in Fhem auf das Starten und Stoppen von Aktivitäten über eine der mit dem Hub verbundenen Fernbedienungen zu reagieren oder auf Geräteebene jedes im Hub konfigurierte Gerät über IR, Bluetooth und/oder einen Smart Keyboard USB Dongle zu steuern.&lt;br /&gt;
&lt;br /&gt;
Unterstützt werden zur Zeit die Modelle Ultimate Hub, Ultimate Smart Control, Ultimate, Smart Keyboard sowie alle darauf basierenden Kombinationen mit Smart Control und Smart Keyboard Add-On.&lt;br /&gt;
&lt;br /&gt;
== Define ==&lt;br /&gt;
  define &amp;lt;hub&amp;gt; harmony [&amp;lt;username&amp;gt; &amp;lt;password&amp;gt;] &amp;lt;ip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sind &amp;lt;code&amp;gt;username&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;password&amp;lt;/code&amp;gt; die myharmony Zugangsdaten und &amp;lt;code&amp;gt;ip&amp;lt;/code&amp;gt; ist die IP-Adresse des Hub im lokalen Netz.&lt;br /&gt;
&lt;br /&gt;
Für die Firmware-Versionen 3.x ist die volle Funktionalität des Moduls auch ohne Angaben von &amp;lt;code&amp;gt;username&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;password&amp;lt;/code&amp;gt; gegeben. Ab Firmware 4.x muss beides angegeben werden. Sonst ist keine Steuerung auf Geräteebene möglich.&lt;br /&gt;
&lt;br /&gt;
==Allgemeines==&lt;br /&gt;
Aktivitäten und Geräte lassen sich an allen Stellen entweder als ID oder als Name angeben. Wenn der Name angegeben wird, müssen hierbei Leerzeichen durch einen Punkt ersetzt werden. Dies kann auch für eventuell andere im Namen vorhandene Sonderzeichen gelten.&lt;br /&gt;
&lt;br /&gt;
== Aktivitäten ==&lt;br /&gt;
Das Reading &amp;lt;code&amp;gt;currentActivity&amp;lt;/code&amp;gt; enthält die gerade laufende Aktivität. Beim Wechsel zwischen Aktivitäten erzeugt es Events, auf die in Fhem über &#039;&#039;notify&#039;&#039; reagiert werden kann. Das Reading &amp;lt;code&amp;gt;previousActivity&amp;lt;/code&amp;gt; enthält die davor laufende Aktivität, sofern diese bekannt ist. Dieses Reading erzeugt keine Events.&lt;br /&gt;
&lt;br /&gt;
In den Internals &amp;lt;code&amp;gt;currentActivityID&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;previousActivityID&amp;lt;/code&amp;gt; stehen die dazu gehörenden IDs der Aktivitäten.&lt;br /&gt;
&lt;br /&gt;
Innerhalb einer laufenden Aktivität kann mit&lt;br /&gt;
  set &amp;lt;hub&amp;gt; command &amp;lt;command&amp;gt;&lt;br /&gt;
ein IR-Kommando an eines der beteiligten Geräte gesendet werden.&lt;br /&gt;
&lt;br /&gt;
== Geräteebene ==&lt;br /&gt;
Innerhalb und außerhalb einer laufenden Aktivität kann mit&lt;br /&gt;
  set &amp;lt;hub&amp;gt; command &amp;lt;id|name&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
ein IR-Kommando an eines der im Hub bekannten Geräte gesendet werden. Hierbei ist darauf zu achten, dass innerhalb einer Aktivität keine Kommandos verwendet werden sollten, die den Smart-State betreffen.&lt;br /&gt;
&lt;br /&gt;
=== Fhem Devices auf Geräteebene ===&lt;br /&gt;
Es ist möglich, sich für einzelne oder alle im Hub konfigurierten Geräte ein zugehöriges FHEM-Device anlegen zu lassen:&lt;br /&gt;
  set &amp;lt;hub&amp;gt; autocreate [&amp;lt;id|name&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
Beim Umschalten zwischen Aktivitäten wird in diesen FHEM-Devices im Reading power der in der Aktivität konfigurierten Einschaltzustand (on, off oder manual) angezeigt. Mit einem &#039;&#039;notify&#039;&#039; auf &amp;lt;code&amp;gt;power&amp;lt;/code&amp;gt; Events lässt sich in Fhem auf einzelne Geräte reagieren.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wichtig:&#039;&#039;&#039; Diese FHEM-Device spiegeln nicht den tatsächlichen Gerätezustand wieder, sondern den innerhalb einer Aktivität beabsichtigen Zustand. Der tatsächliche Zustand kann z.B. auf Grund von Empfangsproblemen abweichen.&lt;br /&gt;
&lt;br /&gt;
Das get &amp;lt;code&amp;gt;commands&amp;lt;/code&amp;gt; sowie die set &amp;lt;code&amp;gt;command&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;hidDevice&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;cursor&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;special&amp;lt;/code&amp;gt; Kommandos auf Hub-Ebene stehen hier direkt und ohne Angabe von Device-ID oder Name zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
=== Kommandos an Fhem senden ===&lt;br /&gt;
Da es (zur Zeit) nicht möglich ist, Geräte-Kommandos oder einzelne Tasten direkt vom HUB zu empfangen, muss hierzu ein zusätzlicher Empfänger in Fhem eingebunden werden. Dies kann z.B. mit einem MCE-IR Empfänger oder per Bluetooth geschehen. Ein Fhem-Modul hierzu findet sich im in diesem {{Link2Forum|Topic=36257|LinkText=Forenthread}}.&lt;br /&gt;
&lt;br /&gt;
== Smart Keyboard ==&lt;br /&gt;
Der Harmony Hub kann über Bluetooth oder die zum Smart Keyboard gehörenden USB-Dongle mit einem Rechner, Media PC oder sonstigem Gerät, das Tastatureingabe unterstützt, verbunden werden. Fhem kann diese Verbindung nutzen, um beliebige Tastendrücke an ein solches Gerät zu senden. Das können Texte sein, Cursorbewegungen oder die Power-, Multimedia oder sonstigen Funktionstasten, die das Gerät unterstützt.&lt;br /&gt;
&lt;br /&gt;
Alle gesendeten Tastendrücke beziehen sich normalerweise auf das zur gerade laufenden Aktivität gehörende Tastatureingabegerät. Mit dem &amp;lt;code&amp;gt;hidDevice&amp;lt;/code&amp;gt; Kommando lässt sich die Tastatureingabe auf jedes im Hub dafür konfigurierte Gerät umschalten.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wichtig:&#039;&#039;&#039; Dieses Umschalten kann einige Sekunden dauern, da hierbei die bestehende Bluetooth-Verbindung getrennt und eine neue aufgebaut wird.&lt;br /&gt;
&lt;br /&gt;
Es stehen die Kommandos &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;cursor&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;special&amp;lt;/code&amp;gt; zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Beispiele:&lt;br /&gt;
&lt;br /&gt;
Gehe in PLEX auf die Library Musik und spiele das erste Item in der OnDeck Liste:&lt;br /&gt;
  set &amp;lt;hub&amp;gt; text M&lt;br /&gt;
  set &amp;lt;hub&amp;gt; cursor right&lt;br /&gt;
  set &amp;lt;hub&amp;gt; text p&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
&lt;br /&gt;
=== Vorgeschaltete Funksteckdose ansteuern ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorbereitung Harmony&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Nachdem die Geräte mit Strom versorgt werden, benötigen sie einige Sekunden, bis sie ihre Einschaltsignale verarbeiten können. Diese Verzögerung wird durch ein Dummy Gerät in jeder Aktion erzeugt.&lt;br /&gt;
&lt;br /&gt;
1) In MyHarmony einen Amazon Fire TV anlegen und ihm einen passenden Namen geben (z.B. Pause)&lt;br /&gt;
&lt;br /&gt;
2) Unter &amp;quot;Geräte&amp;quot; dieses markieren und per &amp;quot;Ändern der Betriebseinstellungen&amp;quot; die Einstellungen aufrufen&lt;br /&gt;
&lt;br /&gt;
3) Punkt &amp;quot;Ich möchte dieses Gerät eingeschaltet lassen, wenn Aktionen gewechselt werden und nur durch Drücken der Off-Taste ausschalten&amp;quot; auswählen&lt;br /&gt;
&lt;br /&gt;
4) Einen harmlosen Befehl einfügen (&amp;quot;Search&amp;quot;), danach eine Verzögerung von 5000ms einbauen und dann noch einen Befehl (&amp;quot;Search&amp;quot;). Dies bewirkt eine Verzögerung von 5 Sekunden beim Ein- und Ausschalten&lt;br /&gt;
&lt;br /&gt;
5) Unter Aktionen die Aktion auswählen und per &amp;quot;Einstellung ändern&amp;quot; das neue Gerät hinzufügen&lt;br /&gt;
&lt;br /&gt;
6) Per &amp;quot;Diese Aktion anpassen&amp;quot; das neue Gerät an die erste Stelle schieben&lt;br /&gt;
&lt;br /&gt;
7) Schritte 5-7 für alle Aktionen wiederholen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Konfiguration in FHEM&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1) Der Harmony Hub muss existieren&lt;br /&gt;
&lt;br /&gt;
  #Harmony Hub Wohnzimmer definieren&lt;br /&gt;
  define wz_harmonyhub harmony 192.168.123.123&lt;br /&gt;
&lt;br /&gt;
2) Ihr benötigt eine fertig konfigurierte Funksteckdose (hier &amp;quot;wz_Multimedia&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
3) Ihr baut eine Bedingung, die auf den Ein- und Ausschaltvorgang des Harmony Hub (hier wz_harmonyhub) reagiert und die Steckdose (hier wz_Multimedia) schaltet. Es wird eine &#039;&#039;&#039;zusätzliche&#039;&#039;&#039; Pause genutzt von 0 Sekunden bei der ersten Bedingung (wäre kontraproduktiv) und 10 Sekunden bei der zweiten Bedingung (DOELSEIF). Bei der Nutzung eines Beamers lässt sich hierüber die Abkühlzeit einstellen. Im Beispiel bleiben den Geräten somit 15 Sekunden zum Ausschalten und 5 Sekunden um die Empfangsbereitschaft herzustellen. Die erste Bedingung im DOIF ist eine Regex, da &amp;quot;currentActivity&amp;quot; bei mehrfachem Abschalten hintereinander immer wieder von &amp;quot;PowerOff&amp;quot; auf &amp;quot;Stopping PowerOff&amp;quot; wechselt. &lt;br /&gt;
&lt;br /&gt;
  #Auf den Schaltvorgang des Hubs reagieren&lt;br /&gt;
  define wz_Multimedia_Automatik DOIF ([wz_harmonyhub:currentActivity] !~ /PowerOff/) (set wz_Multimedia on) DOELSEIF ([wz_harmonyhub:activity] eq &amp;quot;PowerOff&amp;quot;) (set wz_Multimedia off)&lt;br /&gt;
  attr wz_Multimedia_Automatik wait 0:10&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
Wenn Fhem den Harmony Hub nicht erreichen kann, blockiert das Modul Fhem für den Timeout von 2 Sekunden im Abstand von nur wenigen Sekunden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[...]&lt;br /&gt;
2015.12.26 18:25:45 1: Perfmon: possible freeze starting at 18:25:43, delay is 2.794&lt;br /&gt;
2015.12.26 18:25:58 1: Perfmon: possible freeze starting at 18:25:56, delay is 2.709&lt;br /&gt;
2015.12.26 18:26:11 1: Perfmon: possible freeze starting at 18:26:09, delay is 2.676&lt;br /&gt;
2015.12.26 18:26:24 1: Perfmon: possible freeze starting at 18:26:22, delay is 2.686&lt;br /&gt;
2015.12.26 18:26:37 1: Perfmon: possible freeze starting at 18:26:35, delay is 2.686&lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da dieses Blockieren die Funktionalität von Fhem beeinträchtigen kann, sollte man bei geplanten Auszeiten des Hubs diesen disablen:&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;hub&amp;gt; disable 1&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://myharmony.com myHarmony] Logitech Harmony Hersteller&lt;br /&gt;
* [http://www.harmony-remote-forum.de/portal.php Harmony Remote Forum] deutsches Harmony Forum&lt;br /&gt;
* [http://forum.fhem.de/index.php/topic,14163.0.html Thread im FHEM Forum] Weitere Infos im FHEM Forum Thread&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Unterhaltungselektronik]]&lt;br /&gt;
[[Kategorie:IP Components]]&lt;/div&gt;</summary>
		<author><name>Motivierte linke Hände</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-LC-Sw1PBU-FM_Unterputz-Schaltaktor_1-fach&amp;diff=13263</id>
		<title>HM-LC-Sw1PBU-FM Unterputz-Schaltaktor 1-fach</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HM-LC-Sw1PBU-FM_Unterputz-Schaltaktor_1-fach&amp;diff=13263"/>
		<updated>2015-12-17T21:06:03Z</updated>

		<summary type="html">&lt;p&gt;Motivierte linke Hände: Typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware|Bild=platzHalter.png&lt;br /&gt;
|Bildbeschreibung=HM-LC-Sw1PBU-FM Unterputz-Schaltaktor 1-fach für Markenschalter&lt;br /&gt;
|HWProtocol=HomeMatic &lt;br /&gt;
|HWType=Aktor / Sender&lt;br /&gt;
|HWCategory=HomeMatic&lt;br /&gt;
|HWComm=868,3MHz&lt;br /&gt;
|HWChannels=1&lt;br /&gt;
|HWVoltage=230V&lt;br /&gt;
|HWPowerConsumption=0,5W (Standby)&lt;br /&gt;
|HWPoweredBy=Netz&lt;br /&gt;
|HWSize=71x71x37 mm &lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#CUL_HM CUL_HM]&lt;br /&gt;
|HWManufacturer=eQ-3}}&lt;br /&gt;
&lt;br /&gt;
[[HM-LC-Sw1PBU-FM Unterputz-Schaltaktor 1-fach]] ist ein einkanaliger Funk-Schaltaktor &amp;quot;für Markenschalter&amp;quot;, der mittels entsprechender Installationsadapter mit Tasterwippen diverser renommierter Hersteller versehen werden kann und sich dadurch nahtlos in bestehende Elektroinstallationen einfügt.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Das besondere an diesem Schalter ist, dass er den vorhandenen Unterputzeinsatz vollständig ersetzt. Dabei kann die Wippe des vorhandenen Schalters - je nach Hersteller - mit einer entsprechenden Adapterplatte weiterverwendet werden.&lt;br /&gt;
&lt;br /&gt;
Es handelt sich hierbei nur um einen Aktor. Es ist nicht möglich die Taster mit anderen Homematic Geräten zu peeren. Man kann nur andere Taster mit dem Aktor peeren und diesen fernsteuern.&lt;br /&gt;
&lt;br /&gt;
== Technische Daten ==&lt;br /&gt;
&lt;br /&gt;
{|  &lt;br /&gt;
| Art&lt;br /&gt;
| Unterputz&lt;br /&gt;
|- &lt;br /&gt;
| Typ&lt;br /&gt;
| 1fach&lt;br /&gt;
|- &lt;br /&gt;
| Stand-by-Verbrauch&lt;br /&gt;
| 0,5 W (lt. Bedienungsanleitung, S. 31, Stand 02/2012, 1 W)&lt;br /&gt;
|- &lt;br /&gt;
| Versorgungsspannung&lt;br /&gt;
| 230 V&lt;br /&gt;
|- &lt;br /&gt;
| Abmessungen (B x H x T)&lt;br /&gt;
| 71 x 71 x 37 mm&lt;br /&gt;
|- &lt;br /&gt;
| Farbe&lt;br /&gt;
| Grau&lt;br /&gt;
|- &lt;br /&gt;
| Max. Schaltleistung&lt;br /&gt;
| 1000 W&lt;br /&gt;
|- &lt;br /&gt;
| Relaistyp&lt;br /&gt;
| Wechsler&lt;br /&gt;
|- &lt;br /&gt;
| Funkfrequenz&lt;br /&gt;
| 868,3 MHz&lt;br /&gt;
|- &lt;br /&gt;
| Empfängerklasse&lt;br /&gt;
| SRD Class 2&lt;br /&gt;
|- &lt;br /&gt;
| Sicherung (intern)&lt;br /&gt;
| Rundsicherung 5 A, träge&lt;br /&gt;
|- &lt;br /&gt;
| Max. Sendeleistung&lt;br /&gt;
| 10 mW&lt;br /&gt;
|- &lt;br /&gt;
| IP-Schutzgrad&lt;br /&gt;
| IP 20&lt;br /&gt;
|- &lt;br /&gt;
| Umgebungstemperaturbereich&lt;br /&gt;
| 5–35 °C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Hinweise zur Hardware-Installation ==&lt;br /&gt;
Der vorhandene Schalter muss ersetzt werden. Dabei sind ein paar Dinge zu beachten:&lt;br /&gt;
&lt;br /&gt;
* Der (neue) Schalter benötigt neben dem L-Leiter auch einen N-Leiter für die Stromversorgung.&lt;br /&gt;
* Die Befestigung ist nicht wie bei dem System z.B. von Merten durch spreizen von Klammern möglich. Der Schalter muss in die Löcher in der Dose geschraubt werden (Schrauben im Lieferumfang enthalten).&lt;br /&gt;
* Die &amp;quot;Frontplatte&amp;quot; bzw. der Befestigungsrahmen ist etwas dicker, als der Rahmen eines normalen Schalters. Dadurch kann es sein, dass der vorhandene Rahmen des Schalters nicht mehr ganz an der Wand anliegt.&lt;br /&gt;
* Um die bereits vorhandene Schalter-Wippe weiter nutzen zu können, muss ein passender Adapter verwendet werden.&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
Das Pairing sollte wie in [[HomeMatic Devices pairen]] beschrieben durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== FHEM Config-Auszug ===&lt;br /&gt;
Ein exemplarischer Auszug aus der [[Konfiguration]]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define LichtWohnzimmer CUL_HM 197764&lt;br /&gt;
attr LichtWohnzimmer devInfo 010100&lt;br /&gt;
attr LichtWohnzimmer firmware 2.1&lt;br /&gt;
attr LichtWohnzimmer hmClass receiver&lt;br /&gt;
attr LichtWohnzimmer model unknown&lt;br /&gt;
attr LichtWohnzimmer room Wohnzimmer&lt;br /&gt;
attr LichtWohnzimmer serialNr JEQ0xxxxxx&lt;br /&gt;
attr LichtWohnzimmer subType switch&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mögliche Schaltoperationen ===&lt;br /&gt;
Der Aktor versteht folgende Aktionen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set &amp;lt;name&amp;gt; on -&amp;gt; Schaltet den Aktor ein&lt;br /&gt;
set &amp;lt;name&amp;gt; off -&amp;gt; Schaltet den Aktor aus&lt;br /&gt;
set &amp;lt;name&amp;gt; toggle -&amp;gt; Ändert den Zustand des Aktors, d.h. ein eingeschalteter Aktor wird ausgeschaltet&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Log-Auszug ===&lt;br /&gt;
In FHEM ist nach dem Schalten des HM-LC-Sw1PBU-FM folgendes Log zu sehen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2012-06-05_00:09:22 LichtWohnzimmer deviceMsg: off&lt;br /&gt;
2012-06-05_00:09:22 LichtWohnzimmer off&lt;br /&gt;
2012-06-05_07:40:51 LichtWohnzimmer on&lt;br /&gt;
2012-06-05_07:40:51 LichtWohnzimmer deviceMsg: on&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beim Einrichten des Schalters kommt folgender Auszug (Stand: 06.2012)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2012.06.04 23:12:27 2: CUL_HM pair: CUL_HM_switch_197764 is a switch, model unknown serialNr JEQ0xxxxxx&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Funktion als Treppenlichtschalter ===&lt;br /&gt;
Um dafür zu sorgen, dass z.B. ein durch den HM-LC-Sw1PBU-FM eingeschaltetes Licht automatisch von FHEM nach 10 Minuten ausgeschaltet wird, kann folgende Definition verwendet werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;define Beleuchtung_an notify Beleuchtung:on* define Beleuchtung_aus at +00:10:00 set Beleuchtung off &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Workaround um den Taster in FHEM zu nutzen ===&lt;br /&gt;
Man kann den Taster in der Originalfirmware nicht mit anderen Geräten peeren. Allerdings kann man mit folgendem Workaround den Taster in FHEM nutzen. Das hat jedoch eine Verzögerung zwischen drei und acht Sekunden. Dabei ist es trotzdem möglich, den Aktor per FHEM oder gepeertem Gerät weiter zu steuern. Der Taster beeinflusst den Aktor nicht mehr. Das ganze funktioniert, weil der HM-LC-Sw1PBU-FM bei jedem Tastendruck das reading für state aktualisiert, auch wenn sich der Wert nicht ändert.&lt;br /&gt;
&lt;br /&gt;
Zuerst setzt man ein event auf event-on-change-reading:&lt;br /&gt;
&lt;br /&gt;
 attr HM-LC-Sw1PBU-FM event-on-change-reading state&lt;br /&gt;
 attr HM-LC-Sw1PBU-FM event-on-update-reading state&lt;br /&gt;
&lt;br /&gt;
Weiterhin wird der Schalter deaktiviert (hier nur für kurzen Tastendruck; mit lgSwJtXXX wird dieser Effekt auch für den langen Tastendruck erzielt):&lt;br /&gt;
 set HM-LC-Sw1PBU-FM regSet intKeyVisib visib&lt;br /&gt;
 set HM-LC-Sw1PBU-FM getConfig&lt;br /&gt;
 set HM-LC-Sw1PBU-FM regSet prep shSwJtOff off self01&lt;br /&gt;
 set HM-LC-Sw1PBU-FM regSet prep shSwJtOn on self01&lt;br /&gt;
 set HM-LC-Sw1PBU-FM regSet prep shSwJtOff off self02&lt;br /&gt;
 set HM-LC-Sw1PBU-FM regSet exec shSwJtOn on self02&lt;br /&gt;
&lt;br /&gt;
Nun setzt man einen Notify auf das Reading:&lt;br /&gt;
:&amp;lt;code&amp;gt;define HM-LC-Sw1PBU-FM-TasterPressed notify HM-LC-Sw1PBU-FM {set YourOtherDevice toggle}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Alternative Firmware ===&lt;br /&gt;
Um die beiden Taster als Remote und den Aktor getrennt zu nutzen gibt es alternative Firmware, deren Funktion und Benutzung auf der Seite [[HM-LC-Sw1PBU-FM Alternative Firmware]] im Detail beschrieben ist.&lt;br /&gt;
&lt;br /&gt;
=== Schalter immer toggeln lassen ===&lt;br /&gt;
Im Werkszustand schaltet die Wippe bei Druck auf der einen Seite ein, auf der anderen Seite aus. Möchte man, dass bei jedem Tastendruck einfach der Zustand geändert wird, kann man das wie folgt erreichen (unten nur für den kurzen Tastendruck dargestellt):&lt;br /&gt;
 set HM-LC-Sw1PBU-FM regSet intKeyVisib visib&lt;br /&gt;
 set HM-LC-Sw1PBU-FM getConfig&lt;br /&gt;
 set HM-LC-Sw1PBU-FM regSet shActionType  jmpToTarget self01&lt;br /&gt;
 set HM-LC-Sw1PBU-FM regSet shSwJtOn      dlyOff      self01&lt;br /&gt;
 set HM-LC-Sw1PBU-FM regSet shSwJtOff     dlyOn       self01&lt;br /&gt;
 set HM-LC-Sw1PBU-FM regSet shSwJtDlyOn   on          self01&lt;br /&gt;
 set HM-LC-Sw1PBU-FM regSet shSwJtDlyOff  off         self01&lt;br /&gt;
 set HM-LC-Sw1PBU-FM regSet shActionType  jmpToTarget self02&lt;br /&gt;
 set HM-LC-Sw1PBU-FM regSet shSwJtOn      dlyOff      self02&lt;br /&gt;
 set HM-LC-Sw1PBU-FM regSet shSwJtOff     dlyOn       self02&lt;br /&gt;
 set HM-LC-Sw1PBU-FM regSet shSwJtDlyOn   on          self02&lt;br /&gt;
 set HM-LC-Sw1PBU-FM regSet shSwJtDlyOff  off         self02&lt;br /&gt;
&lt;br /&gt;
=== on-for-timer Ersatz ===&lt;br /&gt;
Der HM-LC-Sw1PBU-FM kennt kein &amp;lt;code&amp;gt;set on-for-timer&amp;lt;/code&amp;gt;. Um den HM-LC-Sw1PBU-FM trotzdem für einige Zeit anschalten zu können (z. B. wenn ein Fensteröffner dranhängt und das Fenster nur für eine gewisse Zeit geöffnet werden soll), muss ein Button der vccu mit dem HM-LC-Sw1PBU-FM gepeered werden:&lt;br /&gt;
 set vccu_Btn4 peerChan 0 HM-LC-Sw1PBU-FM dual set&lt;br /&gt;
&lt;br /&gt;
Danach wären (in diesem Fall mit vccu_Btn4) die virtuellen Buttons 4 und 5 mit dem HM-LC-Sw1PBU-FM gepeered. Das Fenster könnte dann über &amp;lt;code&amp;gt;set vccu_Btn4 press short&amp;lt;/code&amp;gt; für die vorher über &amp;lt;code&amp;gt;set HM-LC-Sw1PBU-FM regSet shOnTime [Dauer] vccu_Btn4&amp;lt;/code&amp;gt; die Öffnungszeit eingestellt werden kann.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Anleitung (PDF {{DocLink|elv|/Assets/Produkte/10/1030/103029/Downloads/103029_FunkSchaltaktor_um.pdf}})&lt;br /&gt;
* Produktwebseite bei [http://www.elv.de/output/controller.aspx?cid=74&amp;amp;detail=10&amp;amp;detail2=37991 ELV]&lt;br /&gt;
* [[HM-LC-Sw1PBU-FM Alternative_Firmware|Alternative Firmware]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Schalter (Empfänger)]]&lt;/div&gt;</summary>
		<author><name>Motivierte linke Hände</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-LC-Sw1PBU-FM_Unterputz-Schaltaktor_1-fach&amp;diff=13262</id>
		<title>HM-LC-Sw1PBU-FM Unterputz-Schaltaktor 1-fach</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HM-LC-Sw1PBU-FM_Unterputz-Schaltaktor_1-fach&amp;diff=13262"/>
		<updated>2015-12-17T20:56:34Z</updated>

		<summary type="html">&lt;p&gt;Motivierte linke Hände: vccu peering ergänzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware|Bild=platzHalter.png&lt;br /&gt;
|Bildbeschreibung=HM-LC-Sw1PBU-FM Unterputz-Schaltaktor 1-fach für Markenschalter&lt;br /&gt;
|HWProtocol=HomeMatic &lt;br /&gt;
|HWType=Aktor / Sender&lt;br /&gt;
|HWCategory=HomeMatic&lt;br /&gt;
|HWComm=868,3MHz&lt;br /&gt;
|HWChannels=1&lt;br /&gt;
|HWVoltage=230V&lt;br /&gt;
|HWPowerConsumption=0,5W (Standby)&lt;br /&gt;
|HWPoweredBy=Netz&lt;br /&gt;
|HWSize=71x71x37 mm &lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#CUL_HM CUL_HM]&lt;br /&gt;
|HWManufacturer=eQ-3}}&lt;br /&gt;
&lt;br /&gt;
[[HM-LC-Sw1PBU-FM Unterputz-Schaltaktor 1-fach]] ist ein einkanaliger Funk-Schaltaktor &amp;quot;für Markenschalter&amp;quot;, der mittels entsprechender Installationsadapter mit Tasterwippen diverser renommierter Hersteller versehen werden kann und sich dadurch nahtlos in bestehende Elektroinstallationen einfügt.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Das besondere an diesem Schalter ist, dass er den vorhandenen Unterputzeinsatz vollständig ersetzt. Dabei kann die Wippe des vorhandenen Schalters - je nach Hersteller - mit einer entsprechenden Adapterplatte weiterverwendet werden.&lt;br /&gt;
&lt;br /&gt;
Es handelt sich hierbei nur um einen Aktor. Es ist nicht möglich die Taster mit anderen Homematic Geräten zu peeren. Man kann nur andere Taster mit dem Aktor peeren und diesen fernsteuern.&lt;br /&gt;
&lt;br /&gt;
== Technische Daten ==&lt;br /&gt;
&lt;br /&gt;
{|  &lt;br /&gt;
| Art&lt;br /&gt;
| Unterputz&lt;br /&gt;
|- &lt;br /&gt;
| Typ&lt;br /&gt;
| 1fach&lt;br /&gt;
|- &lt;br /&gt;
| Stand-by-Verbrauch&lt;br /&gt;
| 0,5 W (lt. Bedienungsanleitung, S. 31, Stand 02/2012, 1 W)&lt;br /&gt;
|- &lt;br /&gt;
| Versorgungsspannung&lt;br /&gt;
| 230 V&lt;br /&gt;
|- &lt;br /&gt;
| Abmessungen (B x H x T)&lt;br /&gt;
| 71 x 71 x 37 mm&lt;br /&gt;
|- &lt;br /&gt;
| Farbe&lt;br /&gt;
| Grau&lt;br /&gt;
|- &lt;br /&gt;
| Max. Schaltleistung&lt;br /&gt;
| 1000 W&lt;br /&gt;
|- &lt;br /&gt;
| Relaistyp&lt;br /&gt;
| Wechsler&lt;br /&gt;
|- &lt;br /&gt;
| Funkfrequenz&lt;br /&gt;
| 868,3 MHz&lt;br /&gt;
|- &lt;br /&gt;
| Empfängerklasse&lt;br /&gt;
| SRD Class 2&lt;br /&gt;
|- &lt;br /&gt;
| Sicherung (intern)&lt;br /&gt;
| Rundsicherung 5 A, träge&lt;br /&gt;
|- &lt;br /&gt;
| Max. Sendeleistung&lt;br /&gt;
| 10 mW&lt;br /&gt;
|- &lt;br /&gt;
| IP-Schutzgrad&lt;br /&gt;
| IP 20&lt;br /&gt;
|- &lt;br /&gt;
| Umgebungstemperaturbereich&lt;br /&gt;
| 5–35 °C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Hinweise zur Hardware-Installation ==&lt;br /&gt;
Der vorhandene Schalter muss ersetzt werden. Dabei sind ein paar Dinge zu beachten:&lt;br /&gt;
&lt;br /&gt;
* Der (neue) Schalter benötigt neben dem L-Leiter auch einen N-Leiter für die Stromversorgung.&lt;br /&gt;
* Die Befestigung ist nicht wie bei dem System z.B. von Merten durch spreizen von Klammern möglich. Der Schalter muss in die Löcher in der Dose geschraubt werden (Schrauben im Lieferumfang enthalten).&lt;br /&gt;
* Die &amp;quot;Frontplatte&amp;quot; bzw. der Befestigungsrahmen ist etwas dicker, als der Rahmen eines normalen Schalters. Dadurch kann es sein, dass der vorhandene Rahmen des Schalters nicht mehr ganz an der Wand anliegt.&lt;br /&gt;
* Um die bereits vorhandene Schalter-Wippe weiter nutzen zu können, muss ein passender Adapter verwendet werden.&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
Das Pairing sollte wie in [[HomeMatic Devices pairen]] beschrieben durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== FHEM Config-Auszug ===&lt;br /&gt;
Ein exemplarischer Auszug aus der [[Konfiguration]]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define LichtWohnzimmer CUL_HM 197764&lt;br /&gt;
attr LichtWohnzimmer devInfo 010100&lt;br /&gt;
attr LichtWohnzimmer firmware 2.1&lt;br /&gt;
attr LichtWohnzimmer hmClass receiver&lt;br /&gt;
attr LichtWohnzimmer model unknown&lt;br /&gt;
attr LichtWohnzimmer room Wohnzimmer&lt;br /&gt;
attr LichtWohnzimmer serialNr JEQ0xxxxxx&lt;br /&gt;
attr LichtWohnzimmer subType switch&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mögliche Schaltoperationen ===&lt;br /&gt;
Der Aktor versteht folgende Aktionen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set &amp;lt;name&amp;gt; on -&amp;gt; Schaltet den Aktor ein&lt;br /&gt;
set &amp;lt;name&amp;gt; off -&amp;gt; Schaltet den Aktor aus&lt;br /&gt;
set &amp;lt;name&amp;gt; toggle -&amp;gt; Ändert den Zustand des Aktors, d.h. ein eingeschalteter Aktor wird ausgeschaltet&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Log-Auszug ===&lt;br /&gt;
In FHEM ist nach dem Schalten des HM-LC-Sw1PBU-FM folgendes Log zu sehen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2012-06-05_00:09:22 LichtWohnzimmer deviceMsg: off&lt;br /&gt;
2012-06-05_00:09:22 LichtWohnzimmer off&lt;br /&gt;
2012-06-05_07:40:51 LichtWohnzimmer on&lt;br /&gt;
2012-06-05_07:40:51 LichtWohnzimmer deviceMsg: on&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beim Einrichten des Schalters kommt folgender Auszug (Stand: 06.2012)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2012.06.04 23:12:27 2: CUL_HM pair: CUL_HM_switch_197764 is a switch, model unknown serialNr JEQ0xxxxxx&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Funktion als Treppenlichtschalter ===&lt;br /&gt;
Um dafür zu sorgen, dass z.B. ein durch den HM-LC-Sw1PBU-FM eingeschaltetes Licht automatisch von FHEM nach 10 Minuten ausgeschaltet wird, kann folgende Definition verwendet werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;define Beleuchtung_an notify Beleuchtung:on* define Beleuchtung_aus at +00:10:00 set Beleuchtung off &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Workaround um den Taster in FHEM zu nutzen ===&lt;br /&gt;
Man kann den Taster in der Originalfirmware nicht mit anderen Geräten peeren. Allerdings kann man mit folgendem Workaround den Taster in FHEM nutzen. Das hat jedoch eine Verzögerung zwischen drei und acht Sekunden. Dabei ist es trotzdem möglich, den Aktor per FHEM oder gepeertem Gerät weiter zu steuern. Der Taster beeinflusst den Aktor nicht mehr. Das ganze funktioniert, weil der HM-LC-Sw1PBU-FM bei jedem Tastendruck das reading für state aktualisiert, auch wenn sich der Wert nicht ändert.&lt;br /&gt;
&lt;br /&gt;
Zuerst setzt man ein event auf event-on-change-reading:&lt;br /&gt;
&lt;br /&gt;
 attr HM-LC-Sw1PBU-FM event-on-change-reading state&lt;br /&gt;
 attr HM-LC-Sw1PBU-FM event-on-update-reading state&lt;br /&gt;
&lt;br /&gt;
Weiterhin wird der Schalter deaktiviert (hier nur für kurzen Tastendruck; mit lgSwJtXXX wird dieser Effekt auch für den langen Tastendruck erzielt):&lt;br /&gt;
 set HM-LC-Sw1PBU-FM regSet intKeyVisib visib&lt;br /&gt;
 set HM-LC-Sw1PBU-FM getConfig&lt;br /&gt;
 set HM-LC-Sw1PBU-FM regSet prep shSwJtOff off self01&lt;br /&gt;
 set HM-LC-Sw1PBU-FM regSet prep shSwJtOn on self01&lt;br /&gt;
 set HM-LC-Sw1PBU-FM regSet prep shSwJtOff off self02&lt;br /&gt;
 set HM-LC-Sw1PBU-FM regSet exec shSwJtOn on self02&lt;br /&gt;
&lt;br /&gt;
Nun setzt man einen Notify auf das Reading:&lt;br /&gt;
:&amp;lt;code&amp;gt;define HM-LC-Sw1PBU-FM-TasterPressed notify HM-LC-Sw1PBU-FM {set YourOtherDevice toggle}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Alternative Firmware ===&lt;br /&gt;
Um die beiden Taster als Remote und den Aktor getrennt zu nutzen gibt es alternative Firmware, deren Funktion und Benutzung auf der Seite [[HM-LC-Sw1PBU-FM Alternative Firmware]] im Detail beschrieben ist.&lt;br /&gt;
&lt;br /&gt;
=== Schalter immer toggeln lassen ===&lt;br /&gt;
Im Werkszustand schaltet die Wippe bei Druck auf der einen Seite ein, auf der anderen Seite aus. Möchte man, dass bei jedem Tastendruck einfach der Zustand geändert wird, kann man das wie folgt erreichen (unten nur für den kurzen Tastendruck dargestellt):&lt;br /&gt;
 set HM-LC-Sw1PBU-FM regSet intKeyVisib visib&lt;br /&gt;
 set HM-LC-Sw1PBU-FM getConfig&lt;br /&gt;
 set HM-LC-Sw1PBU-FM regSet shActionType  jmpToTarget self01&lt;br /&gt;
 set HM-LC-Sw1PBU-FM regSet shSwJtOn      dlyOff      self01&lt;br /&gt;
 set HM-LC-Sw1PBU-FM regSet shSwJtOff     dlyOn       self01&lt;br /&gt;
 set HM-LC-Sw1PBU-FM regSet shSwJtDlyOn   on          self01&lt;br /&gt;
 set HM-LC-Sw1PBU-FM regSet shSwJtDlyOff  off         self01&lt;br /&gt;
 set HM-LC-Sw1PBU-FM regSet shActionType  jmpToTarget self02&lt;br /&gt;
 set HM-LC-Sw1PBU-FM regSet shSwJtOn      dlyOff      self02&lt;br /&gt;
 set HM-LC-Sw1PBU-FM regSet shSwJtOff     dlyOn       self02&lt;br /&gt;
 set HM-LC-Sw1PBU-FM regSet shSwJtDlyOn   on          self02&lt;br /&gt;
 set HM-LC-Sw1PBU-FM regSet shSwJtDlyOff  off         self02&lt;br /&gt;
&lt;br /&gt;
=== on-for-timer Ersatz ===&lt;br /&gt;
Der HM-LC-Sw1PBU-FM kennt kein &amp;lt;code&amp;gt;set on-for-timer&amp;lt;/code&amp;gt;. Um den HM-LC-Sw1PBU-FM trotzdem für einige Zeit anschalten zu können (z. B. wenn ein Fensteröffner dranhängt und das Fenster nur für eine gewisse Zeit geöffnet werden soll), muss ein Button der vccu mit dem HM-LC-Sw1PBU-FM gepeered werden:&lt;br /&gt;
 set vccu_Btn4 peerChan 0 HM-LC-Sw1PBU-FM dual set&lt;br /&gt;
&lt;br /&gt;
Danach wären (in diesem Fall mit vccu_Btn4) die virtuellen Buttons 4 und 5 mit dem HM-LC-Sw1PBU-FM gepeered. Das Fenster könnte dann über &amp;lt;code&amp;gt;set vccu_Btn4 press short&amp;lt;/code&amp;gt; für die über &amp;lt;code&amp;gt;set HM-LC-Sw1PBU-FM regSet shOnTime vccu_Btn4 [Dauer]&amp;lt;/code&amp;gt; die Öffnungszeit eingestellt werden kann.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Anleitung (PDF {{DocLink|elv|/Assets/Produkte/10/1030/103029/Downloads/103029_FunkSchaltaktor_um.pdf}})&lt;br /&gt;
* Produktwebseite bei [http://www.elv.de/output/controller.aspx?cid=74&amp;amp;detail=10&amp;amp;detail2=37991 ELV]&lt;br /&gt;
* [[HM-LC-Sw1PBU-FM Alternative_Firmware|Alternative Firmware]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Schalter (Empfänger)]]&lt;/div&gt;</summary>
		<author><name>Motivierte linke Hände</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-LC-Sw1PBU-FM_Unterputz-Schaltaktor_1-fach&amp;diff=13136</id>
		<title>HM-LC-Sw1PBU-FM Unterputz-Schaltaktor 1-fach</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HM-LC-Sw1PBU-FM_Unterputz-Schaltaktor_1-fach&amp;diff=13136"/>
		<updated>2015-12-05T11:59:55Z</updated>

		<summary type="html">&lt;p&gt;Motivierte linke Hände: Beispiel zum Togglen per Schalter hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware|Bild=platzHalter.png&lt;br /&gt;
|Bildbeschreibung=HM-LC-Sw1PBU-FM Unterputz-Schaltaktor 1-fach für Markenschalter&lt;br /&gt;
|HWProtocol=HomeMatic &lt;br /&gt;
|HWType=Aktor / Sender&lt;br /&gt;
|HWCategory=HomeMatic&lt;br /&gt;
|HWComm=868,3MHz&lt;br /&gt;
|HWChannels=1&lt;br /&gt;
|HWVoltage=230V&lt;br /&gt;
|HWPowerConsumption=0,5W (Standby)&lt;br /&gt;
|HWPoweredBy=Netz&lt;br /&gt;
|HWSize=71x71x37 mm &lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#CUL_HM CUL_HM]&lt;br /&gt;
|HWManufacturer=eQ-3}}&lt;br /&gt;
&lt;br /&gt;
[[HM-LC-Sw1PBU-FM Unterputz-Schaltaktor 1-fach]] ist ein einkanaliger Funk-Schaltaktor &amp;quot;für Markenschalter&amp;quot;, der mittels entsprechender Installationsadapter mit Tasterwippen diverser renommierter Hersteller versehen werden kann und sich dadurch nahtlos in bestehende Elektroinstallationen einfügt.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Das besondere an diesem Schalter ist, dass er den vorhandenen Unterputzeinsatz vollständig ersetzt. Dabei kann die Wippe des vorhandenen Schalters - je nach Hersteller - mit einer entsprechenden Adapterplatte weiterverwendet werden.&lt;br /&gt;
&lt;br /&gt;
Es handelt sich hierbei nur um einen Aktor. Es ist nicht möglich die Taster mit anderen Homematic Geräten zu peeren. Man kann nur andere Taster mit dem Aktor peeren und diesen fernsteuern.&lt;br /&gt;
&lt;br /&gt;
== Technische Daten ==&lt;br /&gt;
&lt;br /&gt;
{|  &lt;br /&gt;
| Art&lt;br /&gt;
| Unterputz&lt;br /&gt;
|- &lt;br /&gt;
| Typ&lt;br /&gt;
| 1fach&lt;br /&gt;
|- &lt;br /&gt;
| Stand-by-Verbrauch&lt;br /&gt;
| 0,5 W (lt. Bedienungsanleitung, S. 31, Stand 02/2012, 1 W)&lt;br /&gt;
|- &lt;br /&gt;
| Versorgungsspannung&lt;br /&gt;
| 230 V&lt;br /&gt;
|- &lt;br /&gt;
| Abmessungen (B x H x T)&lt;br /&gt;
| 71 x 71 x 37 mm&lt;br /&gt;
|- &lt;br /&gt;
| Farbe&lt;br /&gt;
| Grau&lt;br /&gt;
|- &lt;br /&gt;
| Max. Schaltleistung&lt;br /&gt;
| 1000 W&lt;br /&gt;
|- &lt;br /&gt;
| Relaistyp&lt;br /&gt;
| Wechsler&lt;br /&gt;
|- &lt;br /&gt;
| Funkfrequenz&lt;br /&gt;
| 868,3 MHz&lt;br /&gt;
|- &lt;br /&gt;
| Empfängerklasse&lt;br /&gt;
| SRD Class 2&lt;br /&gt;
|- &lt;br /&gt;
| Sicherung (intern)&lt;br /&gt;
| Rundsicherung 5 A, träge&lt;br /&gt;
|- &lt;br /&gt;
| Max. Sendeleistung&lt;br /&gt;
| 10 mW&lt;br /&gt;
|- &lt;br /&gt;
| IP-Schutzgrad&lt;br /&gt;
| IP 20&lt;br /&gt;
|- &lt;br /&gt;
| Umgebungstemperaturbereich&lt;br /&gt;
| 5–35 °C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Hinweise zur Hardware-Installation ==&lt;br /&gt;
Der vorhandene Schalter muss ersetzt werden. Dabei sind ein paar Dinge zu beachten:&lt;br /&gt;
&lt;br /&gt;
* Der (neue) Schalter benötigt neben dem L-Leiter auch einen N-Leiter für die Stromversorgung.&lt;br /&gt;
* Die Befestigung ist nicht wie bei dem System z.B. von Merten durch spreizen von Klammern möglich. Der Schalter muss in die Löcher in der Dose geschraubt werden (Schrauben im Lieferumfang enthalten).&lt;br /&gt;
* Die &amp;quot;Frontplatte&amp;quot; bzw. der Befestigungsrahmen ist etwas dicker, als der Rahmen eines normalen Schalters. Dadurch kann es sein, dass der vorhandene Rahmen des Schalters nicht mehr ganz an der Wand anliegt.&lt;br /&gt;
* Um die bereits vorhandene Schalter-Wippe weiter nutzen zu können, muss ein passender Adapter verwendet werden.&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
Das Pairing sollte wie in [[HomeMatic Devices pairen]] beschrieben durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== FHEM Config-Auszug ===&lt;br /&gt;
Ein exemplarischer Auszug aus der [[Konfiguration]]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define LichtWohnzimmer CUL_HM 197764&lt;br /&gt;
attr LichtWohnzimmer devInfo 010100&lt;br /&gt;
attr LichtWohnzimmer firmware 2.1&lt;br /&gt;
attr LichtWohnzimmer hmClass receiver&lt;br /&gt;
attr LichtWohnzimmer model unknown&lt;br /&gt;
attr LichtWohnzimmer room Wohnzimmer&lt;br /&gt;
attr LichtWohnzimmer serialNr JEQ0xxxxxx&lt;br /&gt;
attr LichtWohnzimmer subType switch&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mögliche Schaltoperationen ===&lt;br /&gt;
Der Aktor versteht folgende Aktionen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set &amp;lt;name&amp;gt; on -&amp;gt; Schaltet den Aktor ein&lt;br /&gt;
set &amp;lt;name&amp;gt; off -&amp;gt; Schaltet den Aktor aus&lt;br /&gt;
set &amp;lt;name&amp;gt; toggle -&amp;gt; Ändert den Zustand des Aktors, d.h. ein eingeschalteter Aktor wird ausgeschaltet&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Log-Auszug ===&lt;br /&gt;
In FHEM ist nach dem Schalten des HM-LC-Sw1PBU-FM folgendes Log zu sehen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2012-06-05_00:09:22 LichtWohnzimmer deviceMsg: off&lt;br /&gt;
2012-06-05_00:09:22 LichtWohnzimmer off&lt;br /&gt;
2012-06-05_07:40:51 LichtWohnzimmer on&lt;br /&gt;
2012-06-05_07:40:51 LichtWohnzimmer deviceMsg: on&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beim Einrichten des Schalters kommt folgender Auszug (Stand: 06.2012)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2012.06.04 23:12:27 2: CUL_HM pair: CUL_HM_switch_197764 is a switch, model unknown serialNr JEQ0xxxxxx&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Funktion als Treppenlichtschalter ===&lt;br /&gt;
Um dafür zu sorgen, dass z.B. ein durch den HM-LC-Sw1PBU-FM eingeschaltetes Licht automatisch von FHEM nach 10 Minuten ausgeschaltet wird, kann folgende Definition verwendet werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;define Beleuchtung_an notify Beleuchtung:on* define Beleuchtung_aus at +00:10:00 set Beleuchtung off &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Workaround um den Taster in FHEM zu nutzen ===&lt;br /&gt;
Man kann den Taster in der Originalfirmware nicht mit anderen Geräten peeren. Allerdings kann man mit folgendem Workaround den Taster in FHEM nutzen. Das hat jedoch eine Verzögerung zwischen drei und acht Sekunden. Dabei ist es trotzdem möglich, den Aktor per FHEM oder gepeertem Gerät weiter zu steuern. Der Taster beeinflusst den Aktor nicht mehr. Das ganze funktioniert, weil der HM-LC-Sw1PBU-FM bei jedem Tastendruck das reading für state aktualisiert, auch wenn sich der Wert nicht ändert.&lt;br /&gt;
&lt;br /&gt;
Zuerst setzt man ein event auf event-on-change-reading:&lt;br /&gt;
&lt;br /&gt;
 attr HM-LC-Sw1PBU-FM event-on-change-reading state&lt;br /&gt;
 attr HM-LC-Sw1PBU-FM event-on-update-reading state&lt;br /&gt;
&lt;br /&gt;
Weiterhin wird der Schalter deaktiviert (hier nur für kurzen Tastendruck; mit lgSwJtXXX wird dieser Effekt auch für den langen Tastendruck erzielt):&lt;br /&gt;
 set HM-LC-Sw1PBU-FM regSet intKeyVisib visib&lt;br /&gt;
 set HM-LC-Sw1PBU-FM getConfig&lt;br /&gt;
 set HM-LC-Sw1PBU-FM regSet prep shSwJtOff off self01&lt;br /&gt;
 set HM-LC-Sw1PBU-FM regSet prep shSwJtOn on self01&lt;br /&gt;
 set HM-LC-Sw1PBU-FM regSet prep shSwJtOff off self02&lt;br /&gt;
 set HM-LC-Sw1PBU-FM regSet exec shSwJtOn on self02&lt;br /&gt;
&lt;br /&gt;
Nun setzt man einen Notify auf das Reading:&lt;br /&gt;
:&amp;lt;code&amp;gt;define HM-LC-Sw1PBU-FM-TasterPressed notify HM-LC-Sw1PBU-FM {set YourOtherDevice toggle}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Alternative Firmware ===&lt;br /&gt;
Um die beiden Taster als Remote und den Aktor getrennt zu nutzen gibt es alternative Firmware, deren Funktion und Benutzung auf der Seite [[HM-LC-Sw1PBU-FM Alternative Firmware]] im Detail beschrieben ist.&lt;br /&gt;
&lt;br /&gt;
=== Schalter immer toggeln lassen ===&lt;br /&gt;
Im Werkszustand schaltet die Wippe bei Druck auf der einen Seite ein, auf der anderen Seite aus. Möchte man, dass bei jedem Tastendruck einfach der Zustand geändert wird, kann man das wie folgt erreichen (unten nur für den kurzen Tastendruck dargestellt):&lt;br /&gt;
 set HM-LC-Sw1PBU-FM regSet intKeyVisib visib&lt;br /&gt;
 set HM-LC-Sw1PBU-FM getConfig&lt;br /&gt;
 set HM-LC-Sw1PBU-FM regSet shActionType  jmpToTarget self01&lt;br /&gt;
 set HM-LC-Sw1PBU-FM regSet shSwJtOn      dlyOff      self01&lt;br /&gt;
 set HM-LC-Sw1PBU-FM regSet shSwJtOff     dlyOn       self01&lt;br /&gt;
 set HM-LC-Sw1PBU-FM regSet shSwJtDlyOn   on          self01&lt;br /&gt;
 set HM-LC-Sw1PBU-FM regSet shSwJtDlyOff  off         self01&lt;br /&gt;
 set HM-LC-Sw1PBU-FM regSet shActionType  jmpToTarget self02&lt;br /&gt;
 set HM-LC-Sw1PBU-FM regSet shSwJtOn      dlyOff      self02&lt;br /&gt;
 set HM-LC-Sw1PBU-FM regSet shSwJtOff     dlyOn       self02&lt;br /&gt;
 set HM-LC-Sw1PBU-FM regSet shSwJtDlyOn   on          self02&lt;br /&gt;
 set HM-LC-Sw1PBU-FM regSet shSwJtDlyOff  off         self02&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Anleitung (PDF {{DocLink|elv|/Assets/Produkte/10/1030/103029/Downloads/103029_FunkSchaltaktor_um.pdf}})&lt;br /&gt;
* Produktwebseite bei [http://www.elv.de/output/controller.aspx?cid=74&amp;amp;detail=10&amp;amp;detail2=37991 ELV]&lt;br /&gt;
* [[HM-LC-Sw1PBU-FM Alternative_Firmware|Alternative Firmware]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Schalter (Empfänger)]]&lt;/div&gt;</summary>
		<author><name>Motivierte linke Hände</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=GDS&amp;diff=13075</id>
		<title>GDS</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=GDS&amp;diff=13075"/>
		<updated>2015-11-29T08:59:18Z</updated>

		<summary type="html">&lt;p&gt;Motivierte linke Hände: /* Aktuelle Daten vom Server abrufen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Herunterladen und Auswerten von Daten des Deutschen Wetterdienstes&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Unterstuetzende Dienste&lt;br /&gt;
|ModFTopic=14106&lt;br /&gt;
|ModTechName=55_GDS.pm&lt;br /&gt;
|ModOwner=betateilchen&lt;br /&gt;
}}&lt;br /&gt;
[[GDS]] ist ein Modul, mit dessen Hilfe man sich die Daten des Deutschen Wetterdienstes herunterladen kann und dann Wetterlage, diverse Wetterkarten und/oder Unwettermeldungen anzeigen/auswerten kann.&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
=== Anmeldung beim DWD ===&lt;br /&gt;
Als erstes muss man sich beim Deutschen Wetterdienst zur [http://www.dwd.de/grundversorgung Grundversorgung] kostenlos [http://kunden.dwd.de/gdsRegistration/gdsRegistrationStart.do anmelden].&lt;br /&gt;
&lt;br /&gt;
=== Installation der benötigten Perl-Module ===&lt;br /&gt;
GDS benötigt die Perl-Module Net::FTP, List::MoreUtils, XML::Simple, Text::CSV. &lt;br /&gt;
&lt;br /&gt;
Für Ubuntu und Raspi sollte funktionieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;apt-get install libnet-lite-ftp-perl liblist-moreutils-perl libxml-simple-perl libtext-csv-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das ftp-Modul verursacht manchmal Probleme bei der Installation. Teilweise ist es wohl auch schon in der Grundinstallation vorhanden, ansonsten kann man versuchen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;apt-get install libnet-ftp-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;apt-get install libwww-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
=== Define ===&lt;br /&gt;
&amp;lt;code&amp;gt;define [gdsName] GDS [gdsUsername] [gdsPasswort]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[gdsUsername] und [gdsPasswort] gibt es nach Anmeldung vom DWD.&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
Die vollständige Liste der Attribute ist in der [http://fhem.de/commandref.html#GDS commandref].&lt;br /&gt;
&lt;br /&gt;
Station setzen, für die beim fhem-Start die Daten eingelesen werden sollen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr [gdsName] gdsSetCond [Station]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hilfreich kann u.a. sein, wenn man hinter eine Firewall sitzt und der Datenabruf nicht funktioniert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr [gdsName] gdsPassiveFtp 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
=== Liste der verfügbaren Wetterstationen abrufen ===&lt;br /&gt;
&amp;lt;code&amp;gt;get [gdsName] list stations&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Liste der verfügbaren Zellen für Warnungen abrufen ===&lt;br /&gt;
&amp;lt;code&amp;gt;get [gdsName] list capstations&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Manuelle Aktualisierung der Daten ===&lt;br /&gt;
&lt;br /&gt;
==== Aktuelle Daten vom Server abrufen ====&lt;br /&gt;
&amp;lt;code&amp;gt;get [gdsName] rereadcfg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Readings aus abgerufenen Daten aktualisieren ====&lt;br /&gt;
&amp;lt;code&amp;gt;set [gdsName] update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Station setzen für automatischen, periodischen Abruf ===&lt;br /&gt;
&amp;lt;code&amp;gt;set [gdsName] conditions [Station]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Automatisch abgerufen (alle 20 Minuten) werden nur die mit c_ beginnenden Readings. Die a_ Readings (Warnungen, etc.) müssen manuell aktualisiert werden.&lt;br /&gt;
&lt;br /&gt;
=== Unwetterwarnungen nach Region aus gelesenen Daten raussuchen ===&lt;br /&gt;
&amp;lt;code&amp;gt;set [gdsName] warnings [Region]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
z.B.: &amp;lt;code&amp;gt; set gds warn Nordrhein-Westfalen&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Region kann ausgeschrieben oder mit den [http://www.bmelv-statistik.de/de/daten-tabellen-suche/abkuerzungen-der-bundeslaender/ offiziellen Abkürzungen] bezeichnet werden.&lt;br /&gt;
&lt;br /&gt;
=== Unwetterwarnungen granularer nach Kreis aus gelesenenen Daten raussuchen ===&lt;br /&gt;
&amp;lt;code&amp;gt;set [gdsName] alerts [Warncell-ID]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die passende Warncell-ID kann man sich über &amp;lt;code&amp;gt;get [gdsName] list capstations&amp;lt;/code&amp;gt; heraussuchen.&lt;br /&gt;
&lt;br /&gt;
Ob es passende Warnmeldungen gibt, kann dann über das Reading &amp;lt;code&amp;gt;a_valid&amp;lt;/code&amp;gt; abgefragt werden. Wenn &amp;lt;code&amp;gt;a_valid&amp;lt;/code&amp;gt; 1 ist, gibt &amp;lt;code&amp;gt;a_count&amp;lt;/code&amp;gt; die Anzahl der vorhandenen Warnmeldungen an. Die Warnungen stehen dann in den Readings &amp;lt;code&amp;gt;a_X_...&amp;lt;/code&amp;gt;, wobei X ab 0 hochzählt. D.h. wenn &amp;lt;code&amp;gt;a_count&amp;lt;/code&amp;gt; 2 ist, gibt es a_0_... und a_1_... Ein praktisches Reading ist z.B. &amp;lt;code&amp;gt;a_X_headline&amp;lt;/code&amp;gt;, das die Zusammenfassung der jeweiligen Warnung als kurze Textzusammenfassung enthält.&lt;br /&gt;
&lt;br /&gt;
Alle eingelesenen Warnmeldungen kann man sich über die Funktion &amp;lt;code&amp;gt;gdsHeadlines()&amp;lt;/code&amp;gt; ausgeben lassen. Z.B. einfach in der Befehlszeile von fhem eingeben:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;{gdsHeadlines([gdsName])}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer möchte, kann auch das Trennzeichen bei mehreren Meldungen konfigurieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;{gdsHeadlines([gdsName],&#039;[Trennzeichen]&#039;)}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Z.B. also&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;{gdsHeadlines(gds, &#039;***&#039;)}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Standard für das Trennzeichen ist der senkrechte Strich.&lt;br /&gt;
&lt;br /&gt;
Jedenfalls nach &amp;lt;code&amp;gt;attr [gdsName] gdsLong 1&amp;lt;/code&amp;gt; werden in a_X_description die Langmeldungen zu den Warnungen ausgegeben.&lt;br /&gt;
&lt;br /&gt;
=== Aktuelles Wetter abrufen ===&lt;br /&gt;
&amp;lt;code&amp;gt;get [gdsName] conditions [Station]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Karten abrufen ===&lt;br /&gt;
Wetterlage: &amp;lt;code&amp;gt;get [gdsName] conditionsmap [Station] &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vorhersage: &amp;lt;code&amp;gt;get [gdsName] forecastsmap [Station]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Warnungen: &amp;lt;code&amp;gt;get [gdsName] warningsmap [Station]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Radar: &amp;lt;code&amp;gt;get [gdsName] radarmap [Station]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Readings ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Höhe  : m über NN&lt;br /&gt;
Luftd.: reduzierter Luftdruck auf Meereshöhe in hPa&lt;br /&gt;
TT    : Lufttemperatur in Grad Celsius&lt;br /&gt;
Tn12  : Minimum der Lufttemperatur, 18 UTC Vortag bis 06 UTC heute, Grad Celsius&lt;br /&gt;
Tx12  : Maximum der Lufttemperatur, 18 UTC Vortag bis 06 UTC heute, Grad Celsius&lt;br /&gt;
Tg24  : Temperaturminimum 5cm über Erdboden 00 UTC bis 24 UTC, Grad Celsius&lt;br /&gt;
Tn24  : Minimum der Lufttemperatur, 00 UTC bis 24 UTC, Grad Celsius&lt;br /&gt;
Tm24  : Mittel der Lufttemperatur, 00 UTC bis 24 UTC, Grad Celsius&lt;br /&gt;
Tx24  : Maximum der Lufttemperatur, 00 UTC bis 24 UTC, Grad Celsius&lt;br /&gt;
Tmin  : Minimum der Lufttemperatur, 06 UTC Vortag bis 06 UTC heute, Grad Celsius&lt;br /&gt;
Tmax  : Maximum der Lufttemperatur, 06 UTC Vortag bis 06 UTC heute, Grad Celsius&lt;br /&gt;
RR1   : Niederschlagsmenge, einstündig, mm = l/qm&lt;br /&gt;
RR12  : Niederschlagsmenge, 12stündig, 18 UTC Vortag bis 06 UTC heute, mm = l/qm&lt;br /&gt;
RR24  : Niederschlagsmenge, 24stündig, 06 UTC Vortag bis 06 UTC heute, mm = l/qm&lt;br /&gt;
SSS   : Gesamtschneehöhe in cm&lt;br /&gt;
SSS24 : Sonnenscheindauer in Stunden&lt;br /&gt;
SGLB24: Tagessumme Globalstrahlung in J/qcm &lt;br /&gt;
DD    : Windrichtung &lt;br /&gt;
FF    : Windgeschwindigkeit letztes 10-Minutenmittel in km/h&lt;br /&gt;
FX    : höchste Windspitze im Bezugszeitraum in km/h&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
&lt;br /&gt;
Für GDS sollten die Daten regelmäßig aktualisiert werden. Dafür richtet man am besten &#039;&#039;&#039;zwei&#039;&#039;&#039; zeitlich &#039;&#039;&#039;nacheinander&#039;&#039;&#039; laufende ats ein:&lt;br /&gt;
&lt;br /&gt;
Einen zum Holen aktualisierter Daten vom Server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define readGDS at +*00:10:00 get [gdsName] rereadcfg &lt;br /&gt;
attr readGDS alignTime 22:30:05 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Einen zweiten, der danach läuft, der aus den aktualisierten Serverdaten dann die Readings aktualisiert; z.B. für die Alerts:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define checkGDS at +*00:10:00 get [gdsName] alerts [Region] &lt;br /&gt;
attr checkGDS alignTime 22:35:05&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig ist, dass beide at zeitlich auseinander liegen, im vorstehenden Beispiel durch die unterschiedlichen &amp;quot;alignTime&amp;quot; Attribute um 5 Minuten.&lt;br /&gt;
&lt;br /&gt;
=== Karten regelmäßig vom Server neu laden ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define Karten at +*00:30:00 get [gdsName] radarmap Nordost; get [gdsName] conditionsmap Nordost; get [gdsName] warningsmap Berlin&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hinweis: Die vorstehende Schreibweise ist die Schreibweise im Editiermodus der Weboberfläche von fhem. Wer die Zeile per copy &amp;amp; paste direkt in die Kommandozeile eintragen will, muss die Semikolons verdoppeln, sonst geht alles nach dem ersten Semikolon verloren.&lt;br /&gt;
&lt;br /&gt;
Also:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define Karten at +*00:30:00 get [gdsName] radarmap Nordost;; get [gdsName] conditionsmap Nordost;; get [gdsName] warningsmap Berlin&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
Das eingecheckte GDS-Modul ist nicht auf &amp;quot;non-blocking&amp;quot; umgeschrieben. Das führt dazu, dass FHEM immer mal wieder &amp;quot;einfriert&amp;quot; (nichts macht), während auf die Rückmeldung von, z. B., einem FTP-Transfer (&amp;quot;get [gdsName] conditionsmap&amp;quot; etc.) gewartet wird. Das kann bei Timing-kritischen Bestandteilen zu Problemen führen, weil Events nicht mitbekommen werden, die Ansteuerung von Geräten nicht funktioniert, etc.&lt;br /&gt;
&lt;br /&gt;
Einige dieser FHEM blockierenden Aktivitäten lassen sich mittels cron recht einfach auslagern (z. B. der ftp Transfer), für andere müsste das GDS-Modul umgeschrieben werden. Details dazu gibt es z. B. in [http://forum.fhem.de/index.php/topic,38106.0.html diesem Thread] im Forum.&lt;br /&gt;
&lt;br /&gt;
Nachfolgend noch eine Möglichkeit, das regelmäßige Laden der Karten vom Server in einen - dann FHEM nicht mehr blockierenden - cron-Job auszulagern:&lt;br /&gt;
&lt;br /&gt;
Was Ihr wissen müsst:&lt;br /&gt;
*Wo legt das GDS-Modul die Karten ab? Z. B. im Temporär-Verzeichnis, /tmp. Wenn Ihr eine radarmap gespeichert habt, findet Ihr den Speicherort recht einfach, indem Ihr unter Linux &amp;lt;code&amp;gt;cd / &amp;amp;&amp;amp; find . | grep gds_radarmap.jpg&amp;lt;/code&amp;gt; ausführt.&lt;br /&gt;
*Wo liegen die Karten auf dem DWD-ftp-Server? Die Adresse des Servers ist [ftp://ftp-outgoing2.dwd.de ftp://ftp-outgoing2.dwd.de] und die Karten findet Ihr unterhalb von [ftp://ftp-outgoing2.dwd.de/gds/specials/ ftp://ftp-outgoing2.dwd.de/gds/specials/], z. B. die conditions maps unter [ftp://ftp-outgoing2.dwd.de/gds/specials/observations/maps/germany/ ftp://ftp-outgoing2.dwd.de/gds/specials/observations/maps/germany/], radarmaps unter [ftp://ftp-outgoing2.dwd.de/gds/specials/radar/ ftp://ftp-outgoing2.dwd.de/gds/specials/radar/] und dann dem passenden Unterverzeichnis für Eure Region, etc.&lt;br /&gt;
*Eure Login-Daten für den DWD ftp-server (habt Ihr vom DWD zugeschickt bekommen und in die Definition des GDS-Moduls eingetragen).&lt;br /&gt;
&lt;br /&gt;
Anbei ein Beispielscript, das jeweils die neueste conditions- und Radarmap für Südwest-Deutschland holt und im /tmp-Verzeichnis ablegt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
if [ ! -d &amp;quot;/tmp/gds&amp;quot; ]; then&lt;br /&gt;
  mkdir /tmp/gds&lt;br /&gt;
fi&lt;br /&gt;
# ftp-Server als Verzeichnis mounten:&lt;br /&gt;
curlftpfs ftp-outgoing2.dwd.de /tmp/gds -o user=user:pass&lt;br /&gt;
cd /tmp/gds/gds/specials/radar/southwest&lt;br /&gt;
NEUESTE_DATEI=$(ls -t | head -n 1)&lt;br /&gt;
echo Downloading ${NEUESTE_DATEI}...&lt;br /&gt;
cp &amp;quot;${NEUESTE_DATEI}&amp;quot; &amp;quot;/tmp/gds_radarmap.jpg&amp;quot;&lt;br /&gt;
echo ok.&lt;br /&gt;
chown fhem:dialout /tmp/gds_radarmap.jpg&lt;br /&gt;
cd /tmp/gds/gds/specials/observations/maps/germany&lt;br /&gt;
NEUESTE_DATEI=$(ls -t Suedwest* | head -n 1)&lt;br /&gt;
echo Downloading ${NEUESTE_DATEI}...&lt;br /&gt;
cp &amp;quot;${NEUESTE_DATEI}&amp;quot; &amp;quot;/tmp/gds_conditionsmap.jpg&amp;quot;&lt;br /&gt;
echo ok.&lt;br /&gt;
chown fhem:dialout /tmp/gds_conditionsmap.jpg&lt;br /&gt;
# unmount&lt;br /&gt;
fusermount -u /tmp/gds&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hinweise:&lt;br /&gt;
*user:pass durch Eure Login-Daten für den Server ersetzen.&lt;br /&gt;
*/tmp ggf. anpassen, wenn bei Euch die GDS-Karten in einem anderen Verzeichnis liegen.&lt;br /&gt;
*&amp;quot;Suedwest&amp;quot; durch Eure Region ersetzen. Dateinamen können auf dem ftp-Server eingesehen werden.&lt;br /&gt;
*Die Angabe von user:pass im Klartext im Script ist unsicher. Sicherer wäre die Angabe einer versteckten und in den Rechten beschränkten Konfigurationsdatei.&lt;br /&gt;
*fhem:dialout sind die Rechte unter Debian. Mit einem &amp;lt;code&amp;gt;li -l&amp;lt;/code&amp;gt; im Verzeichnis, in dem GDS die Karten ablegt, könnt Ihr Euch - vor dem Ausführen des Scripts - den Benutzer und die Rechte ansehen, wie das GDS-Modul bei Euch die Karten ablegt.&lt;br /&gt;
*Das Script braucht curlftpfs, das sich i.d.R. problemlos mittels &amp;lt;code&amp;gt;apt-get install curlftpfs&amp;lt;/code&amp;gt; (Debian) o.ä. installieren lassen sollte.&lt;br /&gt;
&lt;br /&gt;
Dann das Script noch regelmäßig über cron ausführen lassen, und schon blockiert Euer FHEM an einer Stelle weniger.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [[Wetter und Wettervorhersagen]]&lt;/div&gt;</summary>
		<author><name>Motivierte linke Hände</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=GDS&amp;diff=12090</id>
		<title>GDS</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=GDS&amp;diff=12090"/>
		<updated>2015-09-06T06:55:20Z</updated>

		<summary type="html">&lt;p&gt;Motivierte linke Hände: Hinweise auf Blocking, Anleitung zum Holen aktueller Karten außerhalb von FHEM&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Herunterladen und Auswerten von Daten des Deutschen Wetterdienstes&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Unterstuetzende Dienste&lt;br /&gt;
|ModFTopic=14106&lt;br /&gt;
|ModTechName=55_GDS.pm&lt;br /&gt;
|ModOwner=betateilchen&lt;br /&gt;
}}&lt;br /&gt;
[[GDS]] ist ein Modul, mit dessen Hilfe man sich die Daten des Deutschen Wetterdienstes herunterladen kann und dann Wetterlage, diverse Wetterkarten und/oder Unwettermeldungen anzeigen/auswerten kann.&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
=== Anmeldung beim DWD ===&lt;br /&gt;
Als erstes muss man sich beim Deutschen Wetterdienst zur [http://www.dwd.de/grundversorgung Grundversorgung] kostenlos [http://kunden.dwd.de/gdsRegistration/gdsRegistrationStart.do anmelden].&lt;br /&gt;
&lt;br /&gt;
=== Installation der benötigten Perl-Module ===&lt;br /&gt;
GDS benötigt die Perl-Module Net::FTP, List::MoreUtils, XML::Simple, Text::CSV. &lt;br /&gt;
&lt;br /&gt;
Für Ubuntu und Raspi sollte funktionieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;apt-get install libnet-lite-ftp-perl liblist-moreutils-perl libxml-simple-perl libtext-csv-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das ftp-Modul verursacht manchmal Probleme bei der Installation. Teilweise ist es wohl auch schon in der Grundinstallation vorhanden, ansonsten kann man versuchen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;apt-get install libnet-ftp-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;apt-get install libwww-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
=== Define ===&lt;br /&gt;
&amp;lt;code&amp;gt;define [gdsName] GDS [gdsUsername] [gdsPasswort]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[gdsUsername] und [gdsPasswort] gibt es nach Anmeldung vom DWD.&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
Die vollständige Liste der Attribute ist in der [http://fhem.de/commandref.html#GDS commandref].&lt;br /&gt;
&lt;br /&gt;
Station setzen, für die beim fhem-Start die Daten eingelesen werden sollen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr [gdsName] gdsSetCond [Station]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hilfreich kann u.a. sein, wenn man hinter eine Firewall sitzt und der Datenabruf nicht funktioniert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr [gdsName] gdsPassiveFtp 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
=== Liste der verfügbaren Wetterstationen abrufen ===&lt;br /&gt;
&amp;lt;code&amp;gt;get [gdsName] list stations&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Liste der verfügbaren Zellen für Warnungen abrufen ===&lt;br /&gt;
&amp;lt;code&amp;gt;get [gdsName] list capstations&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Manuelle Aktualisierung der Daten ===&lt;br /&gt;
&lt;br /&gt;
==== Aktuelle Daten vom Server abrufen ====&lt;br /&gt;
&amp;lt;code&amp;gt;set [gdsName] rereadcfg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Readings aus abgerufenen Daten aktualisieren ====&lt;br /&gt;
&amp;lt;code&amp;gt;set [gdsName] update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Station setzen für automatischen, periodischen Abruf ===&lt;br /&gt;
&amp;lt;code&amp;gt;set [gdsName] conditions [Station]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Automatisch abgerufen (alle 20 Minuten) werden nur die mit c_ beginnenden Readings. Die a_ Readings (Warnungen, etc.) müssen manuell aktualisiert werden.&lt;br /&gt;
&lt;br /&gt;
=== Unwetterwarnungen nach Region aus gelesenen Daten raussuchen ===&lt;br /&gt;
&amp;lt;code&amp;gt;set [gdsName] warnings [Region]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
z.B.: &amp;lt;code&amp;gt; set gds warn Nordrhein-Westfalen&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Region kann ausgeschrieben oder mit den [http://www.bmelv-statistik.de/de/daten-tabellen-suche/abkuerzungen-der-bundeslaender/ offiziellen Abkürzungen] bezeichnet werden.&lt;br /&gt;
&lt;br /&gt;
=== Unwetterwarnungen granularer nach Kreis aus gelesenenen Daten raussuchen ===&lt;br /&gt;
&amp;lt;code&amp;gt;set [gdsName] alerts [Warncell-ID]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die passende Warncell-ID kann man sich über &amp;lt;code&amp;gt;get [gdsName] list capstations&amp;lt;/code&amp;gt; heraussuchen.&lt;br /&gt;
&lt;br /&gt;
Ob es passende Warnmeldungen gibt, kann dann über das Reading &amp;lt;code&amp;gt;a_valid&amp;lt;/code&amp;gt; abgefragt werden. Wenn &amp;lt;code&amp;gt;a_valid&amp;lt;/code&amp;gt; 1 ist, gibt &amp;lt;code&amp;gt;a_count&amp;lt;/code&amp;gt; die Anzahl der vorhandenen Warnmeldungen an. Die Warnungen stehen dann in den Readings &amp;lt;code&amp;gt;a_X_...&amp;lt;/code&amp;gt;, wobei X ab 0 hochzählt. D.h. wenn &amp;lt;code&amp;gt;a_count&amp;lt;/code&amp;gt; 2 ist, gibt es a_0_... und a_1_... Ein praktisches Reading ist z.B. &amp;lt;code&amp;gt;a_X_headline&amp;lt;/code&amp;gt;, das die Zusammenfassung der jeweiligen Warnung als kurze Textzusammenfassung enthält.&lt;br /&gt;
&lt;br /&gt;
Alle eingelesenen Warnmeldungen kann man sich über die Funktion &amp;lt;code&amp;gt;gdsHeadlines()&amp;lt;/code&amp;gt; ausgeben lassen. Z.B. einfach in der Befehlszeile von fhem eingeben:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;{gdsHeadlines([gdsName])}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer möchte, kann auch das Trennzeichen bei mehreren Meldungen konfigurieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;{gdsHeadlines([gdsName],&#039;[Trennzeichen]&#039;)}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Z.B. also&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;{gdsHeadlines(gds, &#039;***&#039;)}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Standard für das Trennzeichen ist der senkrechte Strich.&lt;br /&gt;
&lt;br /&gt;
Jedenfalls nach &amp;lt;code&amp;gt;attr [gdsName] gdsLong 1&amp;lt;/code&amp;gt; werden in a_X_description die Langmeldungen zu den Warnungen ausgegeben.&lt;br /&gt;
&lt;br /&gt;
=== Aktuelles Wetter abrufen ===&lt;br /&gt;
&amp;lt;code&amp;gt;get [gdsName] conditions [Station]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Karten abrufen ===&lt;br /&gt;
Wetterlage: &amp;lt;code&amp;gt;get [gdsName] conditionsmap [Station] &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vorhersage: &amp;lt;code&amp;gt;get [gdsName] forecastsmap [Station]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Warnungen: &amp;lt;code&amp;gt;get [gdsName] warningsmap [Station]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Radar: &amp;lt;code&amp;gt;get [gdsName] radarmap [Station]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Readings ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Höhe  : m über NN&lt;br /&gt;
Luftd.: reduzierter Luftdruck auf Meereshöhe in hPa&lt;br /&gt;
TT    : Lufttemperatur in Grad Celsius&lt;br /&gt;
Tn12  : Minimum der Lufttemperatur, 18 UTC Vortag bis 06 UTC heute, Grad Celsius&lt;br /&gt;
Tx12  : Maximum der Lufttemperatur, 18 UTC Vortag bis 06 UTC heute, Grad Celsius&lt;br /&gt;
Tg24  : Temperaturminimum 5cm über Erdboden 00 UTC bis 24 UTC, Grad Celsius&lt;br /&gt;
Tn24  : Minimum der Lufttemperatur, 00 UTC bis 24 UTC, Grad Celsius&lt;br /&gt;
Tm24  : Mittel der Lufttemperatur, 00 UTC bis 24 UTC, Grad Celsius&lt;br /&gt;
Tx24  : Maximum der Lufttemperatur, 00 UTC bis 24 UTC, Grad Celsius&lt;br /&gt;
Tmin  : Minimum der Lufttemperatur, 06 UTC Vortag bis 06 UTC heute, Grad Celsius&lt;br /&gt;
Tmax  : Maximum der Lufttemperatur, 06 UTC Vortag bis 06 UTC heute, Grad Celsius&lt;br /&gt;
RR1   : Niederschlagsmenge, einstündig, mm = l/qm&lt;br /&gt;
RR12  : Niederschlagsmenge, 12stündig, 18 UTC Vortag bis 06 UTC heute, mm = l/qm&lt;br /&gt;
RR24  : Niederschlagsmenge, 24stündig, 06 UTC Vortag bis 06 UTC heute, mm = l/qm&lt;br /&gt;
SSS   : Gesamtschneehöhe in cm&lt;br /&gt;
SSS24 : Sonnenscheindauer in Stunden&lt;br /&gt;
SGLB24: Tagessumme Globalstrahlung in J/qcm &lt;br /&gt;
DD    : Windrichtung &lt;br /&gt;
FF    : Windgeschwindigkeit letztes 10-Minutenmittel in km/h&lt;br /&gt;
FX    : höchste Windspitze im Bezugszeitraum in km/h&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
&lt;br /&gt;
Für GDS sollten die Daten regelmäßig aktualisiert werden. Dafür richtet man am besten &#039;&#039;&#039;zwei&#039;&#039;&#039; zeitlich &#039;&#039;&#039;nacheinander&#039;&#039;&#039; laufende ats ein:&lt;br /&gt;
&lt;br /&gt;
Einen zum Holen aktualisierter Daten vom Server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define readGDS at +*00:10:00 get [gdsName] rereadcfg &lt;br /&gt;
attr readGDS alignTime 22:30:05 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Einen zweiten, der danach läuft, der aus den aktualisierten Serverdaten dann die Readings aktualisiert; z.B. für die Alerts:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define checkGDS at +*00:10:00 get [gdsName] alerts [Region] &lt;br /&gt;
attr checkGDS alignTime 22:35:05&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig ist, dass beide at zeitlich auseinander liegen, im vorstehenden Beispiel durch die unterschiedlichen &amp;quot;alignTime&amp;quot; Attribute um 5 Minuten.&lt;br /&gt;
&lt;br /&gt;
=== Karten regelmäßig vom Server neu laden ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define Karten at +*00:30:00 get [gdsName] radarmap Nordost; get [gdsName] conditionsmap Nordost; get [gdsName] warningsmap Berlin&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hinweis: Die vorstehende Schreibweise ist die Schreibweise im Editiermodus der Weboberfläche von fhem. Wer die Zeile per copy &amp;amp; paste direkt in die Kommandozeile eintragen will, muss die Semikolons verdoppeln, sonst geht alles nach dem ersten Semikolon verloren.&lt;br /&gt;
&lt;br /&gt;
Also:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define Karten at +*00:30:00 get [gdsName] radarmap Nordost;; get [gdsName] conditionsmap Nordost;; get [gdsName] warningsmap Berlin&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
Das eingecheckte GDS-Modul ist nicht auf &amp;quot;non-blocking&amp;quot; umgeschrieben. Das führt dazu, dass FHEM immer mal wieder &amp;quot;einfriert&amp;quot; (nichts macht), während auf die Rückmeldung von, z. B., einem FTP-Transfer (&amp;quot;get [gdsName] conditionsmap&amp;quot; etc.) gewartet wird. Das kann bei Timing-kritischen Bestandteilen zu Problemen führen, weil Events nicht mitbekommen werden, die Ansteuerung von Geräten nicht funktioniert, etc.&lt;br /&gt;
&lt;br /&gt;
Einige dieser FHEM blockierenden Aktivitäten lassen sich mittels cron recht einfach auslagern (z. B. der ftp Transfer), für andere müsste das GDS-Modul umgeschrieben werden. Details dazu gibt es z. B. in [http://forum.fhem.de/index.php/topic,38106.0.html diesem Thread] im Forum.&lt;br /&gt;
&lt;br /&gt;
Nachfolgend noch eine Möglichkeit, das regelmäßige Laden der Karten vom Server in einen - dann FHEM nicht mehr blockierenden - cron-Job auszulagern:&lt;br /&gt;
&lt;br /&gt;
Was Ihr wissen müsst:&lt;br /&gt;
*Wo legt das GDS-Modul die Karten ab? Z. B. im Temporär-Verzeichnis, /tmp. Wenn Ihr eine radarmap gespeichert habt, findet Ihr den Speicherort recht einfach, indem Ihr unter Linux &amp;lt;code&amp;gt;cd / &amp;amp;&amp;amp; find . | grep gds_radarmap.jpg&amp;lt;/code&amp;gt; ausführt.&lt;br /&gt;
*Wo liegen die Karten auf dem DWD-ftp-Server? Die Adresse des Servers ist [ftp://ftp-outgoing2.dwd.de ftp://ftp-outgoing2.dwd.de] und die Karten findet Ihr unterhalb von [ftp://ftp-outgoing2.dwd.de/gds/specials/ ftp://ftp-outgoing2.dwd.de/gds/specials/], z. B. die conditions maps unter [ftp://ftp-outgoing2.dwd.de/gds/specials/observations/maps/germany/ ftp://ftp-outgoing2.dwd.de/gds/specials/observations/maps/germany/], radarmaps unter [ftp://ftp-outgoing2.dwd.de/gds/specials/radar/ ftp://ftp-outgoing2.dwd.de/gds/specials/radar/] und dann dem passenden Unterverzeichnis für Eure Region, etc.&lt;br /&gt;
*Eure Login-Daten für den DWD ftp-server (habt Ihr vom DWD zugeschickt bekommen und in die Definition des GDS-Moduls eingetragen).&lt;br /&gt;
&lt;br /&gt;
Anbei ein Beispielscript, das jeweils die neueste conditions- und Radarmap für Südwest-Deutschland holt und im /tmp-Verzeichnis ablegt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
if [ ! -d &amp;quot;/tmp/gds&amp;quot; ]; then&lt;br /&gt;
  mkdir /tmp/gds&lt;br /&gt;
fi&lt;br /&gt;
# ftp-Server als Verzeichnis mounten:&lt;br /&gt;
curlftpfs ftp-outgoing2.dwd.de /tmp/gds -o user=user:pass&lt;br /&gt;
cd /tmp/gds/gds/specials/radar/southwest&lt;br /&gt;
NEUESTE_DATEI=$(ls -t | head -n 1)&lt;br /&gt;
echo Downloading ${NEUESTE_DATEI}...&lt;br /&gt;
cp &amp;quot;${NEUESTE_DATEI}&amp;quot; &amp;quot;/tmp/gds_radarmap.jpg&amp;quot;&lt;br /&gt;
echo ok.&lt;br /&gt;
chown fhem:dialout /tmp/gds_radarmap.jpg&lt;br /&gt;
cd /tmp/gds/gds/specials/observations/maps/germany&lt;br /&gt;
NEUESTE_DATEI=$(ls -t Suedwest* | head -n 1)&lt;br /&gt;
echo Downloading ${NEUESTE_DATEI}...&lt;br /&gt;
cp &amp;quot;${NEUESTE_DATEI}&amp;quot; &amp;quot;/tmp/gds_conditionsmap.jpg&amp;quot;&lt;br /&gt;
echo ok.&lt;br /&gt;
chown fhem:dialout /tmp/gds_conditionsmap.jpg&lt;br /&gt;
# unmount&lt;br /&gt;
fusermount -u /tmp/gds&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hinweise:&lt;br /&gt;
*user:pass durch Eure Login-Daten für den Server ersetzen.&lt;br /&gt;
*/tmp ggf. anpassen, wenn bei Euch die GDS-Karten in einem anderen Verzeichnis liegen.&lt;br /&gt;
*&amp;quot;Suedwest&amp;quot; durch Eure Region ersetzen. Dateinamen können auf dem ftp-Server eingesehen werden.&lt;br /&gt;
*Die Angabe von user:pass im Klartext im Script ist unsicher. Sicherer wäre die Angabe einer versteckten und in den Rechten beschränkten Konfigurationsdatei.&lt;br /&gt;
*fhem:dialout sind die Rechte unter Debian. Mit einem &amp;lt;code&amp;gt;li -l&amp;lt;/code&amp;gt; im Verzeichnis, in dem GDS die Karten ablegt, könnt Ihr Euch - vor dem Ausführen des Scripts - den Benutzer und die Rechte ansehen, wie das GDS-Modul bei Euch die Karten ablegt.&lt;br /&gt;
*Das Script braucht curlftpfs, das sich i.d.R. problemlos mittels &amp;lt;code&amp;gt;apt-get install curlftpfs&amp;lt;/code&amp;gt; (Debian) o.ä. installieren lassen sollte.&lt;br /&gt;
&lt;br /&gt;
Dann das Script noch regelmäßig über cron ausführen lassen, und schon blockiert Euer FHEM an einer Stelle weniger.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [[Wetter und Wettervorhersagen]]&lt;/div&gt;</summary>
		<author><name>Motivierte linke Hände</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Hue&amp;diff=12085</id>
		<title>Hue</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Hue&amp;diff=12085"/>
		<updated>2015-09-04T09:55:32Z</updated>

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

		<summary type="html">&lt;p&gt;Motivierte linke Hände: Anwesenheitserkennung per Notify aufgenommen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuerung einer Fritz!Box über Fhem&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=FRITZ!Box&lt;br /&gt;
|ModTechName=72_FRITZBOX.pm&lt;br /&gt;
|ModOwner=tupol/Topos ([http://forum.fhem.de/index.php?action=profile;u=5432 Forum] / [[Benutzer Diskussion:Topos|Wiki]])}}&lt;br /&gt;
&lt;br /&gt;
Das Modul [[FRITZBOX]] ermöglicht die Steuerung einer [[AVM Fritz!Box]] und von AVM FRITZ!WLAN Repeatern durch Fhem. An Fritzboxen können sowohl Geräte abgefragt werden, auf denen FHEM selbst läuft (lokaler Modus), als auch um eine entfernte (externe) Geräte.&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
=== Remote-Zugang ===&lt;br /&gt;
Für den Remote-Zugang müssen die Module JSON:XS, LWP und SOAP::Lite installiert sein; auf einem [[Raspberry Pi]] oder unter Ubuntu z.&amp;amp;nbsp;B. mit dem Befehl&lt;br /&gt;
:::&amp;lt;code&amp;gt;sudo apt-get install libjson-perl libwww-perl libsoap-lite-perl libjson-xs-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Teilweise ist derzeit zusätzlich die Installation der telnet Libraries erforderlich, auch wenn der Telnet-Zugang nicht genutzt werden soll. Siehe dazu den nachfolgenden Abschnitt.&lt;br /&gt;
&lt;br /&gt;
=== Telnet ===&lt;br /&gt;
Das Modul basierte ursprünglich auf dem Zugriff auf die Fritzbox per Telnet. Ab FRITZ!OS 6.2x baut AVM den abgekündigten Telnet-Zugang sowie die webcm-Schnittstelle sukzessive zurück bzw. hat dies, je nach Firmware, schon ganz abgestellt (siehe {{Link2Forum|Topic=38586|LinkText=dieses Forenthema}}). Der zukunftssichere Zugriff auf die Fritzbox sollte also per TR-064 erfolgen. Der Vollständigkeit halber und für ältere Firmwareversionen: &lt;br /&gt;
&lt;br /&gt;
# Wer den Zugang per Telnet (noch) nutzen (kann und) möchte, muss dies zuerst freischalten. Üblicherweise durch Eingabe von #96*7* an einem direkt an der entsprechenden FritzBox angeschlosssenen Telefon&lt;br /&gt;
&lt;br /&gt;
# Auf dem System, auf dem Fhem läuft ([[Systemübersicht#Server|Server]]) muss Telnet installiert sein; auf einem [[Raspberry Pi]] und unter Ubuntu z.&amp;amp;nbsp;B. mit dem Befehl&lt;br /&gt;
:::&amp;lt;code&amp;gt;sudo apt-get install libnet-telnet-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
=== Erste Schritte ===&lt;br /&gt;
Zur Erstinstallation reicht ein einfaches &amp;lt;code&amp;gt;define FritzBox FRITZBOX&amp;lt;/code&amp;gt;, dieses Modul funktioniert lokal (FHEM auf Fritzbox) sowie per Fernzugriff (FHEM auf einem anderen Server im Netz, siehe nächsten Schritt).&lt;br /&gt;
&lt;br /&gt;
==== TR-064: Modul FRITZBOX für Zugriff auf einem externen Server einrichten ====&lt;br /&gt;
Für den Fernzugriff über TR-064 auf eine oder mehrere Fritzboxen und/oder einen FRITZ!WLAN Repeater sind die folgenden Schritte nötig (für jedes Gerät):&lt;br /&gt;
&lt;br /&gt;
Fritzbox definieren:&lt;br /&gt;
:&amp;lt;code&amp;gt;define FritzBox FRITZBOX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn das Login auf der Benutzeroberfläche der FritzBox mit User und Passwort (und nicht nur per Passwort) geschieht, den User konfigurieren:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr FritzBox boxUser &#039;&#039;Benutzername&#039;&#039; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Passwort konfigurieren:&lt;br /&gt;
:&amp;lt;code&amp;gt;set FritzBox password &#039;&#039;Passwort&#039;&#039; &amp;lt;/code&amp;gt; - legt das zugehörige Passwort fest&lt;br /&gt;
&lt;br /&gt;
Manuelle TR-064 Kommandos erlauben (die Abfrage per TR-064 funktioniert auch ohne dieses Attribut):&lt;br /&gt;
:&amp;lt;code&amp;gt;attr FritzBox allowTR064Command 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn die Fritzbox nicht unter http://fritz.box erreichbar ist, IP setzen:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr FritzBox fritzBoxIP 192.168.168.168&amp;lt;/code&amp;gt;&lt;br /&gt;
192.168.168.168 dabei natürlich durch die passende IP ersetzen... Alternativ kann bei fritzBoxIP - trotz des Namens des Attributs - statt der IP auch der Hostname eingegeben werden, eine DNS-Auflösung findet statt.&lt;br /&gt;
&lt;br /&gt;
Manchmal ist ein Neustart von FHEM erforderlich, damit die Fritzbox mit der veränderten IP gefunden wird.&lt;br /&gt;
&lt;br /&gt;
==== Telnet: Modul FRITZBOX für Zugriff auf einem externen Server einrichten ====&lt;br /&gt;
[[Datei:Screenshot_FritzBox_TelnetUser.png|mini|300px|rechts|Anlegen des Attributs telnetUser]]&lt;br /&gt;
Bei Fernzugriff über Telnet sind weitere Schritte nötig:&lt;br /&gt;
# Telnet auf der Fritzbox freischalten (Tastenkombination #96*7* am angeschlossenen Telefon (auch FritzFon)&lt;br /&gt;
# TelnetUser definieren (wie im Screenshot gezeigt)&lt;br /&gt;
# Passwort zum Benutzer auf der Fritzbox definieren&lt;br /&gt;
&lt;br /&gt;
[[Datei:Screenshot_FritzBox_Passwort.png|mini|300px|rechts|Passwort definieren]]&lt;br /&gt;
&lt;br /&gt;
(bitte die Buttons {{Taste|set}} und {{Taste|attr}} bei der Definition der jeweiligen Einträge nicht vergessen)&lt;br /&gt;
&lt;br /&gt;
Wer stattdessen lieber das [[Konfiguration|Befehl-Eingabefeld]] verwendet:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;define FritzBox FRITZBOX&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;attr FritzBox telnetUser &#039;&#039;Benutzername&#039;&#039; &amp;lt;/code&amp;gt; - legt den Benutzer fest&lt;br /&gt;
:&amp;lt;code&amp;gt;set FritzBox password &#039;&#039;Passwort&#039;&#039; &amp;lt;/code&amp;gt; - legt das zugehörige Passwort fest&lt;br /&gt;
&lt;br /&gt;
Wer keinen User konfiguriert hat, kann das Feld &amp;quot;telnetUser&amp;quot; leer lassen.&lt;br /&gt;
&lt;br /&gt;
Wer sicher gehen möchte, dass auch tatsächlich Telnet und nicht andere Zugriffe benutzt werden, sollte außerdem noch setzen:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;attr FritzBox forceTelnetConnection 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== mögliche Fehlermeldungen ===&lt;br /&gt;
Sollte schon bei &amp;lt;code&amp;gt;define FritzBox FRITZBOX&amp;lt;/code&amp;gt; die Fehlermeldung kommen, dass dieses Modul nicht existiert, dann bitte prüfen, ob Fhem auf dem aktuellen Stand ist und ggf. [[Update|aktualisieren]].&lt;br /&gt;
&lt;br /&gt;
Kommt jetzt bei der erneuten Definition die Fehlermeldung &amp;lt;code&amp;gt;Error: Perl modul Net::Telnet is missing on this system&amp;lt;/code&amp;gt; bitte wie oben schon erwähnt den Befehl &lt;br /&gt;
:&amp;lt;code&amp;gt;sudo apt-get install libnet-telnet-perl&amp;lt;/code&amp;gt; &lt;br /&gt;
direkt per Telnet/SSH auf dem FHEM-Server ausführen und neu starten.&lt;br /&gt;
Sollte alles geklappt haben, seht ihr nun eure Fritzbox und könnt diverse Einstellungen manuell vornehmen und/oder automatisch vornehmen lassen.&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
=== Define ===&lt;br /&gt;
Siehe [http://fhem.de/commandref_DE.html#FRITZBOX commandref]&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
Siehe commandref&lt;br /&gt;
&lt;br /&gt;
=== TR-064 ===&lt;br /&gt;
Die offizielle Programmier-Schnittstelle der Fritz!Box läuft über das Protokoll TR-064.&lt;br /&gt;
&lt;br /&gt;
mit dem Attribute&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; allowTR064Command 1&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
kann man den Befehl&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;get &amp;lt;device&amp;gt; tr064Command &amp;lt;service&amp;gt; &amp;lt;control&amp;gt; &amp;lt;action&amp;gt; [[parameterName1 parameterValue1] ...]&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
freischalten und damit auf diese Schnittstelle zugreifen.&lt;br /&gt;
&lt;br /&gt;
AVM hat die Schnittstellenbeschreibung unter [http://avm.de/service/schnittstellen/] veröffentlicht. Ein weitere Einstiegspunkt befindet sich auch auf der Box unter http://fritz.box:49000/tr64desc.xml&lt;br /&gt;
&lt;br /&gt;
Folgende Service und Controls existieren (für den get-Befehl werden nur die fett formatierten Wörter benötigt)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!serviceType!!controlURL!!XML!!Dokument bei AVM&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;DeviceInfo:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;deviceinfo&#039;&#039;&#039;||[http://fritz.box:49000/deviceinfoSCPD.xml deviceinfoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/deviceinfoSCPD.pdf deviceinfoSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;DeviceConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;deviceconfig&#039;&#039;&#039;||[http://fritz.box:49000/deviceconfigSCPD.xml deviceconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/deviceconfigSCPD.pdf deviceconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;Layer3Forwarding:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;layer3forwarding&#039;&#039;&#039;||[http://fritz.box:49000//layer3forwardingSCPD.xml layer3forwardingSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/layer3forwardingSCPD.pdf layer3forwardingSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;LANConfigSecurity:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;lanconfigsecurity&#039;&#039;&#039;||[http://fritz.box:49000//lanconfigsecuritySCPD.xml lanconfigsecuritySCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanconfigsecuritySCPD.pdf lanconfigsecuritySCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;ManagementServer:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;mgmsrv&#039;&#039;&#039;||[http://fritz.box:49000//mgmsrvSCPD.xml mgmsrvSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/mgmsrvSCPD.pdf mgmsrvSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;Time:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;time&#039;&#039;&#039;||[http://fritz.box:49000//timeSCPD.xml timeSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/timeSCPD.pdf timeSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;UserInterface:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;userif&#039;&#039;&#039;||[http://fritz.box:49000//userifSCPD.xml userifSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/userifSCPD.pdf userifSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_VoIP:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_voip&#039;&#039;&#039;||[http://fritz.box:49000//x_voipSCPD.xml x_voipSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_voipSCPD.pdf x_voipSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_Storage:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_storage&#039;&#039;&#039;||[http://fritz.box:49000//x_storageSCPD.xml x_storageSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_storageSCPD.pdf x_storageSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_OnTel:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_contact&#039;&#039;&#039;||[http://fritz.box:49000//x_contactSCPD.xml x_contactSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_contactSCPD.pdf x_contactSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_WebDAVClient:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_webdav&#039;&#039;&#039;||[http://fritz.box:49000//x_webdavSCPD.xml x_webdavSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_webdavSCPD.pdf x_webdavSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_UPnP:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_upnp&#039;&#039;&#039;||[http://fritz.box:49000//x_upnpSCPD.xml x_upnpSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_upnp.pdf x_upnp.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_RemoteAccess:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_remote&#039;&#039;&#039;||[http://fritz.box:49000/x_remoteSCPD.xml x_remoteSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_remoteSCPD.pdf x_remoteSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_MyFritz:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_myfritz&#039;&#039;&#039;||[http://fritz.box:49000/x_myfritzSCPD.xml x_myfritzSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_myfritzSCPD.pdf x_myfritzSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_TAM:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_tam&#039;&#039;&#039;||[http://fritz.box:49000/x_tamSCPD.xml x_tamSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_tam.pdf x_tam.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_AppSetup:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_appsetup&#039;&#039;&#039;||[http://fritz.box:49000/x_homeautoSCPD.xml x_homeautoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_appsetupSCPD.pdf x_appsetupSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_Homeauto:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_homeauto&#039;&#039;&#039;||[http://fritz.box:49000/x_homeautoSCPD.xml x_homeautoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_homeautoSCPD.pdf x_homeautoSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WLANConfiguration:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wlanconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WLANConfiguration:2&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wlanconfig2&#039;&#039;&#039;||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WLANConfiguration:3&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wlanconfig3&#039;&#039;&#039;||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;Hosts:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;hosts&#039;&#039;&#039;||[http://fritz.box:49000/hostsSCPD.xml hostsSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/hostsSCPD.pdf hostsSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;LANEthernetInterfaceConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;lanethernetifcfg&#039;&#039;&#039;||[http://fritz.box:49000/lanifconfigSCPD.xml lanifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanifconfigSCPD.pdf lanifconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;LANHostConfigManagement:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;lanhostconfigmgm&#039;&#039;&#039;||[http://fritz.box:49000/lanhostconfigmgmSCPD.xml lanhostconfigmgmSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanhostconfigmgmSCPD.pdf lanhostconfigmgmSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANCommonInterfaceConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wancommonifconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wancommonifconfigSCPD.xml wancommonifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wancommonifconfigSCPD.pdf wancommonifconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANDSLInterfaceConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wandslifconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wandslifconfigSCPD.xml wandslifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wandslifconfigSCPD.pdf wandslifconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANDSLLinkConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wandsllinkconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wandsllinkconfigSCPD.xml wandsllinkconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wandsllinkconfigSCPD.pdf wandsllinkconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANEthernetLinkConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wanethlinkconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wanethlinkconfigSCPD.xml wanethlinkconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanethlinkconfigSCPD.pdf wanethlinkconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANPPPConnection:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wanpppconn1&#039;&#039;&#039;||[http://fritz.box:49000/wanpppconnSCPD.xml wanpppconnSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanpppconnSCPD.pdf wanpppconnSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANIPConnection:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wanipconnection1&#039;&#039;&#039;||[http://fritz.box:49000/wanipconnSCPD.xml wanipconnSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanipconnSCPD.pdf wanipconnSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Status-Symbol ===&lt;br /&gt;
&amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; devStateIcon .*on.*off:WLAN_on_gWLAN_off .*on.*on.*:WLAN_on_gWLAN_on WLAN..off.*:WLAN_off&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Verzeichnis www/images/default müssen die passenden Dateien &amp;quot;WLAN_on_gWLAN_off.png&amp;quot;, &amp;quot;WLAN_on_gWLAN_on.png&amp;quot; und &amp;quot;WLAN_off.png&amp;quot; liegen. Wenn die PNGs fehlen, können sie hier [http://forum.fhem.de/index.php/topic,29725.msg318113.html#msg318113] heruntergeladen werden.&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
[[Datei:Screenshot_FritzBox1.png|mini|300px|rechts|FRITZBOX Gerät auf der Fhem Oberfläche]]&lt;br /&gt;
Sollte alles geklappt haben, seht ihr nun unter &amp;quot;Unsortiert&amp;quot; den im nebenstehenden Screenshot gezeigten Eintrag für das &amp;quot;Gerät&amp;quot; (hier mit dem Icon &amp;quot;it_router&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== TR-064 Bespiele ===&lt;br /&gt;
&lt;br /&gt;
*Box Reboot: &amp;lt;code&amp;gt;get &amp;lt;device&amp;gt; tr064Command DeviceConfig:1 deviceconfig Reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Klingel- und Sprachausgabe per TR-064 ===&lt;br /&gt;
&lt;br /&gt;
Das geht derzeit nicht, da entsprechende Kommandos per TR-064 nicht verfügbar sind. Da Telnet sukzessive abgestellt wird, sollten sich Interessenten per Feature-Request an AVM wenden, wie hier [http://forum.fhem.de/index.php/topic,38586.0.html] beschrieben.&lt;br /&gt;
&lt;br /&gt;
=== Anwesenheitserkennung per regelmäßiger Abfrage über das PRESENCE Modul ===&lt;br /&gt;
&lt;br /&gt;
Fritzboxen und die FRITZ!WLAN Repeater speichern den Status angemeldeter Geräte. Dieser Status lässt sich mittels des FRITZBOX Moduls über Readings abfragen, die das Format mac_AA_AA_AA_AA_AA_AA haben und die MAC-Adressen der jeweils angemeldeten Geräte (AA:AA:AA:AA:AA:AA) enthalten. Das Reading existiert, wenn das Gerät angemeldet ist. Wenn das Gerät abgemeldet ist, existiert es ist. Es gibt auch noch den Zwischenstatus &amp;quot;inactive&amp;quot;, der anscheinend gesetzt wird, bevor das Reading gelöscht wird.&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe des PRESENCE Moduls (vgl. [[Anwesenheitserkennung]]) kann man auf diese Weise den Anwesenheitsstatus abfragen. Anregungen dazu gibt es im zugehörigen {{Link2Forum|Topic=39433|LinkText=Forenthread}} zur Anwesenheitserkennung und in einem Blogpost: [http://heinz-otto.blogspot.de/2015/07/die-zeiten-andern-sich.html]. Auf dieser Basis könnte eine einfache Implementierung zum Beispiel so aussehen:&lt;br /&gt;
&lt;br /&gt;
Funktion in 99_myUtils.pm:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sub checkFritzMACpresent($$) {&lt;br /&gt;
  # Benötigt: Name der zu testenden Fritzbox ($Device),&lt;br /&gt;
  #           zu suchende MAC ($MAC), &lt;br /&gt;
  # Rückgabe: 1 = Gerät gefunden&lt;br /&gt;
  #           0 = Gerät nicht gefunden&lt;br /&gt;
  my ($Device, $MAC) = @_;&lt;br /&gt;
  my $Status = 0;&lt;br /&gt;
  $MAC =~ tr/:/_/;&lt;br /&gt;
  $MAC = &amp;quot;mac_&amp;quot;.uc($MAC);&lt;br /&gt;
  my $StatusFritz = ReadingsVal($Device, $MAC, &amp;quot;weg&amp;quot;);&lt;br /&gt;
  if ($StatusFritz eq &amp;quot;weg&amp;quot;) {&lt;br /&gt;
    Log 1, (&amp;quot;checkFritzMACpresent ($Device): $MAC nicht gefunden, abwesend.&amp;quot;);&lt;br /&gt;
    $Status = 0;&lt;br /&gt;
  } elsif ($StatusFritz eq &amp;quot;inactive&amp;quot;) {&lt;br /&gt;
    Log 1, (&amp;quot;checkFritzMACpresent ($Device): $MAC ist &amp;gt;inactive&amp;lt;, also abwesend.&amp;quot;);&lt;br /&gt;
    $Status = 0;&lt;br /&gt;
  } else {&lt;br /&gt;
    # Reading existiert, Rückgabewert ist nicht &amp;quot;inactive&amp;quot;, also ist das Gerät per WLAN angemeldet.&lt;br /&gt;
    Log 1, (&amp;quot;checkFritzMACpresent ($Device): $MAC gefunden, Gerät heißt &amp;gt;$StatusFritz&amp;lt;.&amp;quot;);&lt;br /&gt;
    $Status = 1;&lt;br /&gt;
  }&lt;br /&gt;
  return $Status&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nutzung dieser Funktion mit dem PRESENCE Modul definieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;Name&amp;gt; PRESENCE function {checkFritzMACpresent(&amp;quot;Fritzbox&amp;quot;,&amp;quot;AA:BB:CC:DD:EE:FF&amp;quot;)}  60 60&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wobei&lt;br /&gt;
*&amp;lt;Name&amp;gt; ein beliebig zu wählender Name für die PRESENCE-Funktion ist,&lt;br /&gt;
*Fritzbox der Name ist, mit dem ihr die abzufragende Fritzbox als FRITZBOX definiert habt,&lt;br /&gt;
*AA:BB:CC:DD:EE:FF die MAC-Adresse des gesuchten Geräts ist.&lt;br /&gt;
* &amp;quot;60 60&amp;quot; sagt, dass der Anwesenheitsstatus im 60-Sekunden-Takt abgefragt wird. Das macht natürlich nur Sinn, wenn ihr mit &amp;lt;code&amp;gt;attr Fritzbox INTERVAL 60&amp;lt;/code&amp;gt; den Abfrageinterval bei der Fritzbox auch entsprechend hochgesetzt habt. Der Standard ist 300.&lt;br /&gt;
* &amp;quot;Log 1&amp;quot; führt immer zum Loggen. Das ist zum Einrichten praktisch, ohne dass man gleich für das ganze Modul oder ganz FHEM &amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; verbose 5&amp;lt;/code&amp;gt; setzen muss. Wenn es läuft, können die &amp;quot;Log 1&amp;quot;-Zeilen gelöscht, auskommentiert (# an den Zeilenanfang) oder in &amp;quot;Log 5&amp;quot; geändert werden.&lt;br /&gt;
&lt;br /&gt;
==== Mehrere Fritzboxen oder Repeater und Fritzbox (wird noch bearbeitet) ====&lt;br /&gt;
Existiert ein AVM Repeater im Netzwerk, kann der als eigenständiges Gerät mit FRITZBOX definiert werden. WLAN Geräte an der Fritzbox werden in der Instanz der Fritzbox gelistet und WLAN Geräte am Repeater in der Repeater Instanz. Um trotzdem die Anwesenheit im Netzwerk einfach zu erkennen muss die Subroutine in 99_myUtils abgewandelt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;my @fbs = devspec2array(&amp;quot;TYPE=FRITZBOX&amp;quot;); (Nur als Hinweis)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Existiert eine zweite Fritzbox im Accesspointmodus werden die WLAN Geräte im Netzwerk alle in der Hauptfritzbox an einem LAN Anschluss gelistet. D.h. man sieht an der Hauptfritzbox nicht, dass sie im WLAN sind. Eine zweite Instanz mit dem FRITZBOX Modul muss wegen der Anwesenheitserkennung nicht gemacht werden.&lt;br /&gt;
&lt;br /&gt;
Weitere Hinweise zu komplexeren Abfragen mehrere Boxen auf einmal etc. findet ihr auch im {{Link2Forum|Topic=39433|LinkText=Forenthread}}.&lt;br /&gt;
&lt;br /&gt;
=== Anwesenheitserkennung per Notify ===&lt;br /&gt;
Der von Fritzboxen und Fritz!WLAN Repeatern gespeicherte Status zum Status angemeldeter Geräte lässt sich (statt per PRESENCE, s.o.) auch per Notify anfragen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;define &amp;lt;Name&amp;gt; notify Fritzbox:mac_AA_BB_CC_DD_EE_FF:.* {&lt;br /&gt;
  if (ReadingsVal(&amp;quot;Fritzbox&amp;quot;, &amp;quot;mac_AA_BB_CC_DD_EE_FF&amp;quot;, &amp;quot;inactive&amp;quot;) eq &amp;quot;inactive&amp;quot;) {&lt;br /&gt;
    fhem(&amp;quot;set anwesend_smartphone absent&amp;quot;);&lt;br /&gt;
  } else&lt;br /&gt;
    fhem(&amp;quot;set anwesend_smartphone present&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hinweise:&lt;br /&gt;
*[code]fhem(&amp;quot;set anwesend_smartphone absent&amp;quot;);[/code] ist nur ein Beispiel, das einen Dummy auf den Status &amp;quot;absent&amp;quot; bzw. &amp;quot;present&amp;quot; setzt. Man kann hier natürlich auch gleich entsprechende Aktionen durchführen. Wer das Beispiel übernehmen möchte, sollte den Dummy vorher definieren ([code]define anwesend_smartphone dummy[/code]).&lt;br /&gt;
*mac_AA_BB_CC_DD_EE_FF ist die MAC-Adresse des gesuchten Geräts.&lt;br /&gt;
*&amp;quot;Fritzbox&amp;quot; ist der Name, unter dem die Fritzbox als FRITZBOX-Modul definiert wurde.&lt;br /&gt;
*Das Notify funktioniert, weil Geräte, wenn sie sich abgemeldet haben, erst den Status &amp;quot;inactive&amp;quot; erhalten. Ist das Gerät ganz abgemeldet, verschwindet das mac_.*-Reading. Dabei löst das Notify nicht mehr aus. Da das mac-.*-Reading aber vorher auf &amp;quot;inactive&amp;quot; stand, wurde die Abwesend-Aktion schon ausgeführt.&lt;br /&gt;
*Damit der Notify nicht andauernd losgeht, sollte man mittels [code]attr Fritzbox event-on-change-reading mac_AA_BB_CC_DD_EE_FF[/code] Events nur auslösen, wenn sich der Status des Gerätes ändert. Will man mehrere Geräte abfragen, sollte man [code]attr Fritzbox event-on-change-reading mac_AA_BB_CC_DD_EE_FF,mac_GG_HH_II_JJ_KK_LL[/code] setzen, damit bei der Änderung jedes Readings ein Event ausgelöst wird.&lt;br /&gt;
&lt;br /&gt;
=== Vergleich Anwesenheitserkennung PRESENCE/Notify ===&lt;br /&gt;
Die Anwesenheitserkennung per regelmäßiger PRESENCE-Abfrage hat den Vorteil, dass sie im Turnus der regelmäßigen Abfragen immer einen aktuellen Status produziert. Sie hat dafür den Nachteil, dass die PRESENCE-Funktionen regelmäßig abgearbeitet werden müssen, auch wenn sich gar nichts ändert. Außerdem aktualisiert sich der Status nicht sofort, sondern erst bei der nächsten regelmäßigen Abfrage. Durch häufiges Abfragen, kann dieser Nachteil verringert werden (bei entsprechend höherer Systemlast).&lt;br /&gt;
&lt;br /&gt;
Die Anwesenheitserkennung per Notify hat den Vorteil, dass ein sich ändernder Status sofort abgebildet wird. Ändert sich kein Status, werden keine Routinen ausgeführt, was die Systemlast gering hält. Der Nachteil ist, dass - z.B. nach einem Systemstart - die entsprechende Aktion erst bei einer Änderung des Status ausgeführt wird. D.h. ist das zu testende Gerät anwesend, wird dann FHEM beendet, das Gerät entfernt und FHEM wieder gestartet, ist der Status in FHEM immer noch &amp;quot;anwesend&amp;quot;. Da das Reading für das Gerät nicht existiert, wird darauf auch erst wieder ein Notify ausgeführt, wenn sich der Status des Geräts wieder ändert, d.h. es wieder ankommt. Bis dahin ist der Status im System falsch. &lt;br /&gt;
Der Nachteil des Notify kann verringert werden, wenn man statt [code]attr Fritzbox event-on-change-reading mac_AA_BB_CC_DD_EE_FF[/code] ein [code]attr Fritzbox event-on-update-reading mac_AA_BB_CC_DD_EE_FF[/code] setzt. Das erhöht allerdings die Systemlast und funktioniert auch nur für den Status &amp;quot;anwesend&amp;quot;. Bei &amp;quot;abwesend&amp;quot; ist kein Reading vorhanden, so dass auch event-on-update-reading nicht ausgeführt wird.&lt;br /&gt;
Eine weitere Möglichkeit, den Nachteil der Notify-Methode auszugleichen, ist, die Statusabfrage beim Systemstart einmal manuell auszuführen, durch ein notify auf &amp;quot;GLOBAL:initialized&amp;quot;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
global:INITIALIZED {&lt;br /&gt;
  Reset_Variables;&lt;br /&gt;
  if (ReadingsVal(&amp;quot;Fritzbox&amp;quot;, &amp;quot;mac_AA_BB_CC_DD_EE_FF&amp;quot;, &amp;quot;inactive&amp;quot;) eq &amp;quot;inactive&amp;quot;) {&lt;br /&gt;
    fhem(&amp;quot;set anwesend_smartphone absent&amp;quot;);&lt;br /&gt;
  } else&lt;br /&gt;
    fhem(&amp;quot;set anwesend_smartphone present&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Das hilft allerdings nur beim Systemstart. Nicht, wenn FHEM aufgrund irgendwelcher Hänger eine Aktualisierung des Status&#039; verpasst hat.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=29725|LinkText=Forenthread}} zu diesem Modul&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FritzBox]] &lt;br /&gt;
&amp;lt;!-- (Modulkategorie wird automatisch gesetzt) --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Motivierte linke Hände</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Notify&amp;diff=12081</id>
		<title>Notify</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Notify&amp;diff=12081"/>
		<updated>2015-09-04T08:26:34Z</updated>

		<summary type="html">&lt;p&gt;Motivierte linke Hände: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:notify}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Ausführung von Anweisung(en) als Reaktion auf Ereignisse&lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModCmdRef=notify&lt;br /&gt;
|ModForumArea=Automatisierung&lt;br /&gt;
|ModTechName=91_notify.pm&lt;br /&gt;
|ModOwner=rudolfkoenig ({{Link2FU|8|Forum}} / [[Benutzer Diskussion:Rudolfkoenig|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
__TOC__&lt;br /&gt;
{{Todo|generelle Überarbeitung, Fehlerkontrolle, Formatierung}}&lt;br /&gt;
{{Randnotiz|RNTyp=[g|Info|RNText=Weitere grundlegende Informationen/Beispiele zu notify enthält [http://fhem.de/Heimautomatisierung-mit-fhem.pdf Heimautomatisierung mit Fhem]&lt;br /&gt;
&amp;quot;Um Ihren Perlcode zu testen, verwenden Sie das [http://fhem.de/commandref#trigger trigger-Kommando]. [...] Wenn Sie also z.B. ein &amp;lt;code&amp;gt;define Testcode notify Schalter1:on {Perlcode}&amp;lt;/code&amp;gt; testen möchten, können Sie Ihren Code mit &amp;lt;code&amp;gt;trigger Schalter1 on&amp;lt;/code&amp;gt; testen. trigger simuliert das Eintreten eines Ereignisses [...]&amp;quot; (Tipp von S. 38 der Version 4.0)}} &lt;br /&gt;
== Notify, das mächtige Tool ==&lt;br /&gt;
Die nachfolgenden Beispiele beziehen sich hauptsächlich auf [[EIB / KNX|KNX (EIB)]]. Sie sind aber auf alle anderen Systeme übertragbar.&lt;br /&gt;
&lt;br /&gt;
Was ist notify? &lt;br /&gt;
Das Hilfsmodul notify dient dazu, Aktionen abhängig von einem anderen Ereignis/Event (siehe [[Event_monitor|Event monitor]]) auszulösen. Es ist damit möglich, Logikfunktionen im Fhem abzubilden.&lt;br /&gt;
&lt;br /&gt;
Z.B.: das Licht in der Küche wird eingeschaltet ====&amp;amp;gt; draus folgt, dass auch das Radio eingeschaltet wird.&lt;br /&gt;
&lt;br /&gt;
=== Syntax von notify ===&lt;br /&gt;
&lt;br /&gt;
 define &amp;lt;name&amp;gt; notify &amp;lt;Suchmuster&amp;gt; &amp;lt;command&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Das Suchmuster (auch Regexp = regulärer Ausdruck) ist sehr wichtig. Es ist entweder der Name des auslösenden (&amp;quot;triggernden&amp;quot;) Gerätes oder die Kombination aus Gerät und auslösendem Ereignis (Event) Gerätename:Event. Die Events kann man dem [[Event_monitor|Event-Monitor]] entnehmen. Wenn da z.B. Rollo1 steht, dann reagiert notify auf Rollo1 on und off und was es sonst noch alles gibt.&lt;br /&gt;
&lt;br /&gt;
Wenn man mehrere Suchmuster möchte, kann man diese in Klammer schreiben (Rollo1|Rollo2|Steckdose5)&lt;br /&gt;
als Trenner wird dann Pipe (|) genutzt.&lt;br /&gt;
&lt;br /&gt;
Man kann auch mit Platzhaltern arbeiten.&lt;br /&gt;
&lt;br /&gt;
* Rollo. ==&amp;gt; das notify reagiert auf alles was mit Rollo und &#039;&#039;&#039;einem&#039;&#039;&#039; weiteren beliebigen Zeichen anfängt. Also auf Rollo1 wie auch auf RolloG, aber nicht auf Rollo_wischundweg&lt;br /&gt;
* Rollo.* ==&amp;gt; das notify reagiert auf alles das mit Rollo beginnt.&lt;br /&gt;
* .*isch ==&amp;gt;; Reagiere auf alles das mit isch aufhört (Tisch, Fisch)&lt;br /&gt;
&lt;br /&gt;
Suchmuster/Regex kann man im Internet beispielsweise auf [http://regexpal.com/| http://regexpal.com/] testen.&lt;br /&gt;
&lt;br /&gt;
=== Regexp wizard - FHEMWEB-unterstützte Anlage eines notify ===&lt;br /&gt;
&amp;lt;!-- Warum Regex&#039;&#039;&#039;p&#039;&#039;&#039; wizard und nicht Regex wizard--&amp;gt;&lt;br /&gt;
Die Erstellung eines notify und insbesondere die korrekte Angabe des Suchmusters (Regex) führt gerade bei Einsteigern immer wieder zu Schwierigkeiten. Zur Fehlerminimierung empfiehlt es sich einmal die [[Konfiguration]] nicht direkt zu bearbeiten, sondern die &amp;quot;Befehl-Eingabezeile&amp;quot; und die &amp;quot;Objektdetails&amp;quot; zur Bearbeitung zu nutzen. Zudem enthält Fhem einen Regexp wizard mit dem Regex anhand der in Fhem vorhandenen Devices und deren Events aus einer Auswahlbox selektiert werden können. Voraussetzungen sind:&lt;br /&gt;
* Aktivierung des Hilfsmoduls [[eventTypes]] (bei allen Neuinstallationen Standard) &lt;br /&gt;
* das gesuchte Ereignis (Event) ist nach Aktivierung des Hilfsmoduls bereits mindestens einmal eingetreten&lt;br /&gt;
&lt;br /&gt;
Schrittweise Darstellung der Nutzung des Regexp wizard zur Anlage eines &amp;quot;notify&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
In das [[Konfiguration#Befehl-Eingabefeld|Befehls-Eingabefeld]] eingeben und mit {{Taste|Enter}} bestätigen:&lt;br /&gt;
 define ntest notify a b&lt;br /&gt;
Als Beispiel wird ein notify mit &amp;lt;name&amp;gt; &amp;quot;ntest&amp;quot; angelegt. &amp;quot;a&amp;quot; und &amp;quot;b&amp;quot; sind beliebige Platzhalter für &amp;lt;Suchmuster&amp;gt; und &amp;lt;Command&amp;gt;, die bei der weiteren Bearbeitung mit dem endgültigen Werten ersetzt werden.&lt;br /&gt;
Der Regexp wizard öffnet sich:&lt;br /&gt;
[[Datei:Regexp wizard1.JPG|400px|thumb|center]]&lt;br /&gt;
Nun in der Auswahlbox das auslösende Event (Ereignis) auswählen; zunächst das Device und dann das gewünschte Regex. Hier soll das notify bei jeder Veränderung der Temperatur (temperature.*) des Device BTHR918N reagieren. Abschließend mit einem Mausklick auf {{Taste|set}} bestätigen. Wählt man mehrere Regex in dieser Weise aus, so wird das &amp;quot;notify&amp;quot; bei Eintritt jedes dieser Events ausgeführt:&lt;br /&gt;
[[Datei:Regexp wizard2.JPG|400px|thumb|center]]&lt;br /&gt;
Anschließend den Platzhalter &amp;quot;a&amp;quot; mit Klick auf den Link &amp;quot;removeRegexpPart&amp;quot; löschen:&lt;br /&gt;
[[Datei:Regexp wizard3.JPG|400px|thumb|center]]&lt;br /&gt;
Den Link &amp;quot;DEF&amp;quot; anklicken, damit sich der DEF-Editor öffnet:&lt;br /&gt;
[[Datei:Regexp wizard4.JPG|400px|thumb|center]]&lt;br /&gt;
Jetzt den auszuführenden Befehl im &amp;quot;DEF&amp;quot;-Bereich durch Überschreiben des Platzhalters &amp;quot;a&amp;quot; eintragen und mit Klick auf {{Taste|modify ntest}} abschließen:&lt;br /&gt;
[[Datei:Regexp wizard5.JPG|400px|thumb|center]]&lt;br /&gt;
Das fertige und sofort aktive &amp;quot;notify&amp;quot; sieht abschließend folgendermaßen aus:&lt;br /&gt;
[[Datei:Regexp wizard6.JPG|400px|thumb|center]]&lt;br /&gt;
Am Schluss das Speichern über {{Taste|Save config}} nicht vergessen.&lt;br /&gt;
&lt;br /&gt;
=== Etwas schalten, wenn ein anderes Gerät geschaltet wird ===&lt;br /&gt;
Wenn man das obige mit KNX abbilden möchte, benötigt man auf der KNX Seite:&lt;br /&gt;
&lt;br /&gt;
==== Vorbereitung ====&lt;br /&gt;
* Gruppenadresse (GA) für die Steckdose vom Radio (0/0/10)&lt;br /&gt;
* GA vom Licht (0/0/20)&lt;br /&gt;
&lt;br /&gt;
Auf der Fhem Seite wird benötigt:&lt;br /&gt;
&lt;br /&gt;
 define RadioKueche EIB 0/0/10&lt;br /&gt;
 define LichtKueche EIB 0/0/20&lt;br /&gt;
&lt;br /&gt;
==== notify Befehl ====&lt;br /&gt;
 define LichtamRadioan notify LichtKueche { fhem &amp;quot;set RadioKueche $EVENT&amp;quot; } &lt;br /&gt;
oder &#039;&#039;&#039;besser&#039;&#039;&#039;&lt;br /&gt;
 define LichtamRadioan notify LichtKueche set RadioKueche $EVENT &lt;br /&gt;
&lt;br /&gt;
==== Erklärung ====&lt;br /&gt;
* Der Begriff &amp;quot;LichtamRadioan&amp;quot; ist nur ein Platzhalter, damit das notify in Fhem verwaltet werden kann.&lt;br /&gt;
* &amp;quot;$EVENT&amp;quot; ist ein Platzhalter für den Zustand vom Pattern. $EVENT enthält ein &amp;quot;off&amp;quot; wenn das LichtKueche aus ist und ein &amp;quot;on&amp;quot; wenn das Licht eingeschaltet ist.&lt;br /&gt;
* &amp;quot;{ &amp;amp;lt;perlcode&amp;amp;gt; }&amp;quot; alles was zwischen {} steht ist Perl code. Perl kennt das Schlüsselwort Fhem. Das Schlüsselwort Fhem dient dazu, Fhem Befehle auszuführen. Es wird also der Fhem Befehl &amp;quot;set RadioKueche on/off&amp;quot; ausgeführt. on oder off ist abhängig vom Pattern. Der eigentliche Fhem Befehl muss in &amp;quot; &amp;quot; stehen.&lt;br /&gt;
* Warum ist die 2. Variante besser? In der 1. Variante wechselt man von Fhem-Ebene des notify mittels {} auf Perl-Ebene, wo man mit dem Schlüsselwort Fhem &amp;quot;&amp;quot; wieder einen Befehl auf Fhem-Ebene ausführt. In der 2. Variante werden diese unnötigen, resourcenverschwendenden Ebenen-Wechsel vermieden. Alles wird auf der Fhem-Ebene ausgeführt.&lt;br /&gt;
&lt;br /&gt;
=== Einschalten von mehreren Geräten/Lampen, wenn das Licht eingeschaltet wird ===&lt;br /&gt;
==== Vorbereitung ====&lt;br /&gt;
KNX:&lt;br /&gt;
* 3 GAs für drei Geräten bzw Lampen (0/0/30 0/0/31 0/0/32)&lt;br /&gt;
&lt;br /&gt;
Fhem:&lt;br /&gt;
 define LichtWZ EIB 0/0/30&lt;br /&gt;
 define Steckdose1 EIB 0/0/31&lt;br /&gt;
 define Steckdose2 EIB 0/0/32&lt;br /&gt;
&lt;br /&gt;
==== notify Befehl ====&lt;br /&gt;
 define SteckdoseWZein notify LichtWZ { fhem &amp;quot;set Steckdose1 $EVENT;;set Steckdose2 $EVENT &amp;quot; } &lt;br /&gt;
oder &#039;&#039;&#039;besser&#039;&#039;&#039;&lt;br /&gt;
 define SteckdoseWZein notify LichtWZ set Steckdose1,Steckdose2 $EVENT&lt;br /&gt;
&lt;br /&gt;
==== Erklärung ====&lt;br /&gt;
Wenn das LichtWZ eingeschaltet wird, dann werden auch die Steckdosen (1 und 2) eingeschaltet.&lt;br /&gt;
&lt;br /&gt;
=== Einfache ODER Funktion ===&lt;br /&gt;
Eine einfache ODER Funktion kann sehr einfach realisiert werden&lt;br /&gt;
&lt;br /&gt;
==== Vorbereitung ====&lt;br /&gt;
KNX:&lt;br /&gt;
* 3x GAs der abzufragende Werte (0/0/40 0/0/41 0/0/42)&lt;br /&gt;
&lt;br /&gt;
Fhem:&lt;br /&gt;
 define Licht1 EIB 0/0/40&lt;br /&gt;
 define Licht2 EIB 0/0/41&lt;br /&gt;
 define Steckdose EIB 0/0/42&lt;br /&gt;
&lt;br /&gt;
==== notify Befehl ====&lt;br /&gt;
 define SteckdoseWZein notify (Licht1|Licht2) set Steckdose $EVENT &lt;br /&gt;
oder&lt;br /&gt;
 define SteckdoseWZein notify (Licht.) set Steckdose $EVENT&lt;br /&gt;
&lt;br /&gt;
==== Erklärung ====&lt;br /&gt;
Die Werte in der Klammer (wichtig ist das »|«) sind die Rückgabewerte. Alternativ kann in diesem Beispiel auch »Licht.«  (zu beachten ist der Punkt) geschrieben werden. Der Punkt ist ein Platzhalter für (genau) ein beliebiges Zeichen.&lt;br /&gt;
&lt;br /&gt;
Danach folgt der set Befehl.&lt;br /&gt;
Wenn also das Licht1 oder Licht2 den Wert &amp;quot;on&amp;quot; hat, dann hat auch die Steckdose den Wert &amp;quot;on&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Alternative: [[structure]]&lt;br /&gt;
&lt;br /&gt;
=== Einfache UND Funktion ===&lt;br /&gt;
Ob man dieses Konstrukt noch als einfach bezeichnen kann, wage ich mal zu bezeifeln. In Fhem fehlen Loggingfunktionen, die man alle selber mit Perl Code erstellen kann (Danke an MAZ).&lt;br /&gt;
Dadurch ist Fhem zwar mächtig, wird aber für viele sehr kompliziert.&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel soll - wenn drei Rollos geschlossen sind - am Taster eine LED eingeschaltet werden.&lt;br /&gt;
&lt;br /&gt;
==== Vorbereitung ====&lt;br /&gt;
KNX:&lt;br /&gt;
* 3x GDs für die Rückgabewert Rollo geschlossen == 1 (0/0/50 0/0/51 0/0/52)&lt;br /&gt;
* GD LED am Lichtschalter (0/0/106)&lt;br /&gt;
&lt;br /&gt;
Fhem:&lt;br /&gt;
 define R1ZU EIB 0/0/50&lt;br /&gt;
 attr R1ZU dummy 1&lt;br /&gt;
 define R2ZU EIB 0/0/51&lt;br /&gt;
 attr R1ZU dummy 1&lt;br /&gt;
 define R3ZU EIB 0/0/52&lt;br /&gt;
 attr R1ZU dummy 1&lt;br /&gt;
 define LEDalleRolloZu EIB 0/0/106&lt;br /&gt;
Durch das Atribut dummy werden keine Schaltfunktion angeboten. Es kann nur Werte anzeigen.&lt;br /&gt;
&lt;br /&gt;
==== notify Befehl ====&lt;br /&gt;
 define nt.allerolloszu notify (R1ZU|R2ZU|R6ZU) {&lt;br /&gt;
 my $r1 = Value(&amp;quot;R1ZU&amp;quot;);;&lt;br /&gt;
 my $r2 = Value(&amp;quot;R2ZU&amp;quot;);;&lt;br /&gt;
 my $r3 = Value(&amp;quot;R6ZU&amp;quot;);;&lt;br /&gt;
 if ($r1 eq &amp;quot;on&amp;quot; &amp;amp;amp;&amp;amp;amp; $r2 eq &amp;quot;on&amp;quot; &amp;amp;amp;&amp;amp;amp; $r3 eq &amp;quot;on&amp;quot;) {&lt;br /&gt;
   fhem &amp;quot;set LEDalleRolloZu on&amp;quot;&lt;br /&gt;
 } else {&lt;br /&gt;
   fhem &amp;quot;set LEDalleRolloZu off&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== Erklärung ====&lt;br /&gt;
Es werden die drei Rückgabewerte R1ZU, R2ZU und R3ZU ausgewertet. Danach folgt Perl Code, deswegen beginnt das ganze mit einer { und endet mit }&lt;br /&gt;
&lt;br /&gt;
my $r1 =&amp;amp;gt; Variable $r1 definieren&lt;br /&gt;
= Value(&amp;quot;R1ZU&amp;quot;);; ==&amp;amp;gt; weist den Rückgabewert (on oder off) von R1ZU der Variable $r1 zu &lt;br /&gt;
&lt;br /&gt;
Der doppelte ;; ist ein Fhem Thema. Eigentlich würde für Perl ein ; reichen. Aber Fhem nutzt selbst das ; und daher wird ein ;; benötigt. Mit den ersten drei my Zeilen werden die Rückgabewerte den Variabeln zugewiesen.&lt;br /&gt;
&lt;br /&gt;
Danach erfolgt ein normales &amp;quot;if then else&amp;quot; Konstrukt. Die Zeile »($r1 eq &amp;quot;on&amp;quot; &amp;amp;amp;&amp;amp;amp; $r2 eq &amp;quot;on&amp;quot; &amp;amp;amp;&amp;amp;amp; $r3 eq &amp;quot;on&amp;quot;)«&amp;amp;#160;kann man so lesen: Wenn $r1 den Wert &amp;quot;on&amp;quot; und (&amp;amp;amp;&amp;amp;amp;) $r2 den Wert &amp;quot;on&amp;quot; und $r3 den Wert &amp;quot;on&amp;quot; dann schalte die LEDalleRolloZu ein {fhem(&amp;quot;set LEDalleRolloZu on&amp;quot;)}&lt;br /&gt;
ansonsten else schalte die LED aus. {fhem(&amp;quot;set LEDalleRolloZu off&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Alternative: [[structure]]&lt;br /&gt;
&lt;br /&gt;
=== Zeitverzögert schalten ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Aufgabe:&#039;&#039;&#039; || Zeitverzögert schalten&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;Beschreibung:&#039;&#039;&#039; || Mit einem Notify zeitverzögert eine Aktion auslösen.&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;Vorbereitung:&#039;&#039;&#039; || Gerät &amp;quot;Lampe&amp;quot; ist definiert und es gibt eine Situation, die ein Ereignis &amp;quot;Fernbedienung:.*&amp;quot; generiert.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Befehl:&#039;&#039;&#039; || &amp;lt;code&amp;gt;define ntfy1 notify Fernbedienung:.* sleep 7.5;; set Lampe $EVENT&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Erläuterungen:&#039;&#039;&#039; || Bei Eintreten eines Ereignisses &amp;quot;Fernbedienung*&amp;quot; wird nach einer Pause von siebeneinhalb Sekunden der Befehl &amp;lt;set Lampe ??&amp;gt; ausgeführt, wobei der eigentliche Befehl aus dem auslösenden Ereignis übernommen wird.&lt;br /&gt;
:&#039;&#039;Quelle: [http://forum.fhem.de/index.php/topic,17161.0.html Fhem Forum]&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Eine PV-Anlage (Solarstrom) zur Steuerung der Rollos nutzen (optional Zeit und Datums abhängig) ===&lt;br /&gt;
Hier ein kleines Beispiel, wie man mit Hilfe einer PV-Anlage die Sonneneinstrahlung auf der Südseite ermittelt und dies zur Rolladensteuerung nutzt.&lt;br /&gt;
Optional: Die Funktion soll allerdings nur zwischen 9:30 und 17:00 stattfinden. (zweites Beispiel)&lt;br /&gt;
Optional: Die Funktion soll nur zwischen dem 6. und 9. Monat funktioneren. (drittes Beispiel)&lt;br /&gt;
&lt;br /&gt;
==== Vorbereitung ====&lt;br /&gt;
PV Anlage mit SolarView abfragen.&lt;br /&gt;
Per Hand ermitteln, ab wieviel erzeugtem Strom es sinnvoll ist die Rollos zu schließen.&lt;br /&gt;
&lt;br /&gt;
==== notify Syntax ====&lt;br /&gt;
Fhem:&lt;br /&gt;
&lt;br /&gt;
 define sv SolarView solarview 15000 wr1 wr2 wr3 wr4                           &amp;lt;----vier Wechselrichter&lt;br /&gt;
 attr sv event-on-change-reading currentPower                                &lt;br /&gt;
&lt;br /&gt;
 define nt.sonnenlichtpersolar notify (sv:currentPower.*) { &lt;br /&gt;
  if ($EVTPART1 &amp;amp;lt; 3000 ) {&lt;br /&gt;
  fhem(&#039;set Flur1 Auf&#039;);&lt;br /&gt;
 }else {&lt;br /&gt;
  if ($EVTPART1 &amp;amp;gt; 5000 ) {&lt;br /&gt;
  fhem(&#039;set Flur1 Ab&#039;);&lt;br /&gt;
  } &lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Optional 1: Zeitabhängig&lt;br /&gt;
&lt;br /&gt;
 (sv:currentPower.*) { &lt;br /&gt;
  my $hm = sprintf(&amp;quot;%%02d:%%02d&amp;quot;, $hour, $min);&lt;br /&gt;
   if ( $hm gt &amp;quot;09:30&amp;quot; &amp;amp;amp;&amp;amp;amp; $hm lt &amp;quot;17:00&amp;quot;) { &lt;br /&gt;
   if ($EVTPART1 &amp;amp;lt; 5000 ) {&lt;br /&gt;
    fhem(&#039;set Flur1 Auf&#039;);&lt;br /&gt;
    }else {&lt;br /&gt;
    if ($EVTPART1 &amp;amp;gt; 8000 ) {&lt;br /&gt;
    fhem(&#039;set Flur1 Ab&#039;);&lt;br /&gt;
    } &lt;br /&gt;
    }&lt;br /&gt;
   }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
Optional 2: Zeit und Datum&lt;br /&gt;
&lt;br /&gt;
 (sv:currentPower.*) { &lt;br /&gt;
  my $hm = sprintf(&amp;quot;%%02d:%%02d&amp;quot;, $hour, $min);&lt;br /&gt;
  if ($month &amp;gt;= 6 &amp;amp;amp;&amp;amp;amp; $month &amp;lt;= 9) {&lt;br /&gt;
   if ( $hm gt &amp;quot;09:30&amp;quot; &amp;amp;amp;&amp;amp;amp; $hm lt &amp;quot;17:00&amp;quot;) { &lt;br /&gt;
   if ($EVTPART1 &amp;amp;lt; 5000 ) {&lt;br /&gt;
    fhem(&#039;set Flur1,RBUERO1,RBUERO2 Auf&#039;);&lt;br /&gt;
    }else {&lt;br /&gt;
    if ($EVTPART1 &amp;amp;gt; 8000 ) {&lt;br /&gt;
    fhem(&#039;set Flur1,Flur2,RBUERO1,RBUERO2 Ab&#039;);&lt;br /&gt;
    } &lt;br /&gt;
    }&lt;br /&gt;
   }&lt;br /&gt;
   }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
==== Erklärung ====&lt;br /&gt;
* Das define wird in der Kommandozeile im Webbrowser eingegeben.&lt;br /&gt;
* Anschliessend wird im Webbrowser die DEF bearbeitet, das erspart uns Probleme mit Perl&lt;br /&gt;
* define sv SolarView ... &amp;lt;==== ist die Schnittstelle vom SolarView&lt;br /&gt;
* define nt.sonnenlichtpersolar notify (sv:currentPower.*) { &amp;lt;==== hier wird ein notify angelegt, der auf das &amp;quot;define sv&amp;quot; Wert &amp;quot;currentPower.*&amp;quot; (.* ist irgendwas) reagiert&lt;br /&gt;
  if ($EVTPART1 &amp;amp;lt; 3000 ) {&lt;br /&gt;
    fhem(&#039;set Flur1 Auf&#039;);&lt;br /&gt;
  }else {&lt;br /&gt;
   if ($EVTPART1 &amp;amp;gt; 5000 ) {&lt;br /&gt;
    fhem(&#039;set Flur1 Ab&#039;);&lt;br /&gt;
  } &lt;br /&gt;
   }&lt;br /&gt;
  }&lt;br /&gt;
Diese if-Funktion wertet den Rückgabewert von currentPower aus. Hierbei muss man wissen, dass $EVTPART1 das Splitergebnis vom Rückgabewert ist&lt;br /&gt;
&lt;br /&gt;
Beispiel: Der Rückgabewert (wie im Beispiel) ist &amp;quot;currentPower: 6000&amp;quot;.&lt;br /&gt;
Jetzt steht im &amp;quot;$EVTPART0 == currentPower:&amp;quot; und im &amp;quot;$EVTPART1 == 6000&amp;quot;&lt;br /&gt;
Das bedeutet, dass man sich nicht selbst den richtigen split (Perl Befehl) Aufruf ausdenken muss, dies übernimmt vielmehr Fhem.&lt;br /&gt;
&lt;br /&gt;
Ergebnis: &lt;br /&gt;
Das Rollo wird abhängig von der erzeugten IST_Strommenge auf und zu gefahren.&lt;br /&gt;
Damit dies nicht dauernd hin und her pendelt, wurde der Auf Wert sehr klein und den Ab Wert sehr groß gewählt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Optional 1:&#039;&#039;&#039; Der Block &amp;quot;my $hm = sprintf(&amp;quot;%%02d:%%02d&amp;quot;, $hour, $min);&amp;quot; erzeugt die String-Variable $hm mit dem Inhalt $hour:$min. %02d (wegen Fhem Besonderheit: %%02d) begrenzt die Ausgabe auf zwei Stellen.&lt;br /&gt;
Danach wird mit &amp;quot;if ( $hm gt &amp;quot;09:30&amp;quot; &amp;amp;&amp;amp; $hm lt &amp;quot;17:00&amp;quot;)&amp;quot; mit stringvergleichende Operatoren geprüft, ob die Uhrzeit zwischen 9:30 und 17:00 liegt (lt = kleiner als; gt = größer als). Es wäre auch ein le und ge möglich: le =  kleiner/gleich als, ge =  größer/gleich als.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Optional 2:&#039;&#039;&#039;if( $month &amp;gt;= 6 &amp;amp;&amp;amp; $month &amp;lt;= 9) {&lt;br /&gt;
&lt;br /&gt;
Hier wird die numerische Fhem-Standard-Variable $month (Monat) auf größer/gleich bzw kleiner/gleich mit den binären Operatoren überprüft.&lt;br /&gt;
Die Funktion arbeitet also nur zwischen dem 6. und dem 9. Monat und dann auch nur zwischen 9:31 und 16:59.&lt;br /&gt;
&lt;br /&gt;
=== Hinweise ===&lt;br /&gt;
* Entsprechend zu $EVENT gibt es auch noch $NAME und $TYPE. $NAME und $TYPE enthalten den Namen bzw. Typ des Ereignis auslösenden Gerätes.&lt;br /&gt;
* Wird der Perl-Code in einem &amp;lt;code&amp;gt;notify&amp;lt;/code&amp;gt; immer länger, lagere den Code wegen der Übersichtlichkeit in eine eigene Programmdatei aus, wie in [[99_myUtils anlegen]] beschrieben.&lt;br /&gt;
* Achtung! Wenn man das Skript für den notify-Befehl über mehrere Zeilen schreibt, muss man anscheinend darauf achten, dass keine abschliessende Leerzeile mitgespeichert wird. Sonst wird der notify-Befehl ignoriert.&lt;br /&gt;
* Dieser {{Link2Forum|Topic=38520|Message=307325}} enthält Vorschläge zur Vorgehensweise bei der Erstellung von komplexen &#039;&#039;notify&#039;&#039; Definitionen bzw. bei deren Fehlerbehebung.&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Links ==&lt;br /&gt;
* [[Escapen in Perlbefehlen]]&lt;br /&gt;
* [[Klammerebenen]]&lt;br /&gt;
* [[DOIF]] als Alternative vereinigt die Funktionalität des notify-, at-, watchdog-Befehls in Kombination mit logischen Abfragen unter einem Dach&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Hilfsmodul]]&lt;/div&gt;</summary>
		<author><name>Motivierte linke Hände</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FRITZBOX&amp;diff=12042</id>
		<title>FRITZBOX</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FRITZBOX&amp;diff=12042"/>
		<updated>2015-08-21T16:13:33Z</updated>

		<summary type="html">&lt;p&gt;Motivierte linke Hände: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuerung einer Fritz!Box über Fhem&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=FRITZ!Box&lt;br /&gt;
|ModTechName=72_FRITZBOX.pm&lt;br /&gt;
|ModOwner=tupol/Topos ([http://forum.fhem.de/index.php?action=profile;u=5432 Forum] / [[Benutzer Diskussion:Topos|Wiki]])}}&lt;br /&gt;
&lt;br /&gt;
Das Modul [[FRITZBOX]] ermöglicht die Steuerung einer [[AVM Fritz!Box]] und von AVM FRITZ!WLAN Repeatern durch Fhem. An Fritzboxen können sowohl Geräte abgefragt werden, auf denen FHEM selbst läuft (lokaler Modus), als auch um eine entfernte (externe) Geräte.&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
=== Remote-Zugang ===&lt;br /&gt;
Für den Remote-Zugang müssen die Module JSON:XS, LWP und SOAP::Lite installiert sein; auf einem [[Raspberry Pi]] oder unter Ubuntu z.&amp;amp;nbsp;B. mit dem Befehl&lt;br /&gt;
:::&amp;lt;code&amp;gt;sudo apt-get install libjson-perl libwww-perl libsoap-lite-perl libjson-xs-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Teilweise ist derzeit zusätzlich die Installation der telnet Libraries erforderlich, auch wenn der Telnet-Zugang nicht genutzt werden soll. Siehe dazu den nachfolgenden Abschnitt.&lt;br /&gt;
&lt;br /&gt;
=== Telnet ===&lt;br /&gt;
Das Modul basierte ursprünglich auf dem Zugriff auf die Fritzbox per Telnet. Ab FRITZ!OS 6.2x baut AVM den abgekündigten Telnet-Zugang sowie die webcm-Schnittstelle sukzessive zurück bzw. hat dies, je nach Firmware, schon ganz abgestellt (siehe {{Link2Forum|Topic=38586|LinkText=dieses Forenthema}}). Der zukunftssichere Zugriff auf die Fritzbox sollte also per TR-064 erfolgen. Der Vollständigkeit halber und für ältere Firmwareversionen: &lt;br /&gt;
&lt;br /&gt;
# Wer den Zugang per Telnet (noch) nutzen (kann und) möchte, muss dies zuerst freischalten. Üblicherweise durch Eingabe von #96*7* an einem direkt an der entsprechenden FritzBox angeschlosssenen Telefon&lt;br /&gt;
&lt;br /&gt;
# Auf dem System, auf dem Fhem läuft ([[Systemübersicht#Server|Server]]) muss Telnet installiert sein; auf einem [[Raspberry Pi]] und unter Ubuntu z.&amp;amp;nbsp;B. mit dem Befehl&lt;br /&gt;
:::&amp;lt;code&amp;gt;sudo apt-get install libnet-telnet-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
=== Erste Schritte ===&lt;br /&gt;
Zur Erstinstallation reicht ein einfaches &amp;lt;code&amp;gt;define FritzBox FRITZBOX&amp;lt;/code&amp;gt;, dieses Modul funktioniert lokal (FHEM auf Fritzbox) sowie per Fernzugriff (FHEM auf einem anderen Server im Netz, siehe nächsten Schritt).&lt;br /&gt;
&lt;br /&gt;
==== TR-064: Modul FRITZBOX für Zugriff auf einem externen Server einrichten ====&lt;br /&gt;
Für den Fernzugriff über TR-064 auf eine oder mehrere Fritzboxen und/oder einen FRITZ!WLAN Repeater sind die folgenden Schritte nötig (für jedes Gerät):&lt;br /&gt;
&lt;br /&gt;
Fritzbox definieren:&lt;br /&gt;
:&amp;lt;code&amp;gt;define FritzBox FRITZBOX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn das Login auf der Benutzeroberfläche der FritzBox mit User und Passwort (und nicht nur per Passwort) geschieht, den User konfigurieren:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr FritzBox boxUser &#039;&#039;Benutzername&#039;&#039; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Passwort konfigurieren:&lt;br /&gt;
:&amp;lt;code&amp;gt;set FritzBox password &#039;&#039;Passwort&#039;&#039; &amp;lt;/code&amp;gt; - legt das zugehörige Passwort fest&lt;br /&gt;
&lt;br /&gt;
Manuelle TR-064 Kommandos erlauben (die Abfrage per TR-064 funktioniert auch ohne dieses Attribut):&lt;br /&gt;
:&amp;lt;code&amp;gt;attr FritzBox allowTR064Command 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn die Fritzbox nicht unter http://fritz.box erreichbar ist, IP setzen:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr FritzBox fritzBoxIP 192.168.168.168&amp;lt;/code&amp;gt;&lt;br /&gt;
192.168.168.168 dabei natürlich durch die passende IP ersetzen... Alternativ kann bei fritzBoxIP - trotz des Namens des Attributs - statt der IP auch der Hostname eingegeben werden, eine DNS-Auflösung findet statt.&lt;br /&gt;
&lt;br /&gt;
Manchmal ist ein Neustart von FHEM erforderlich, damit die Fritzbox mit der veränderten IP gefunden wird.&lt;br /&gt;
&lt;br /&gt;
==== Telnet: Modul FRITZBOX für Zugriff auf einem externen Server einrichten ====&lt;br /&gt;
[[Datei:Screenshot_FritzBox_TelnetUser.png|mini|300px|rechts|Anlegen des Attributs telnetUser]]&lt;br /&gt;
Bei Fernzugriff über Telnet sind weitere Schritte nötig:&lt;br /&gt;
# Telnet auf der Fritzbox freischalten (Tastenkombination #96*7* am angeschlossenen Telefon (auch FritzFon)&lt;br /&gt;
# TelnetUser definieren (wie im Screenshot gezeigt)&lt;br /&gt;
# Passwort zum Benutzer auf der Fritzbox definieren&lt;br /&gt;
&lt;br /&gt;
[[Datei:Screenshot_FritzBox_Passwort.png|mini|300px|rechts|Passwort definieren]]&lt;br /&gt;
&lt;br /&gt;
(bitte die Buttons {{Taste|set}} und {{Taste|attr}} bei der Definition der jeweiligen Einträge nicht vergessen)&lt;br /&gt;
&lt;br /&gt;
Wer stattdessen lieber das [[Konfiguration|Befehl-Eingabefeld]] verwendet:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;define FritzBox FRITZBOX&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;attr FritzBox telnetUser &#039;&#039;Benutzername&#039;&#039; &amp;lt;/code&amp;gt; - legt den Benutzer fest&lt;br /&gt;
:&amp;lt;code&amp;gt;set FritzBox password &#039;&#039;Passwort&#039;&#039; &amp;lt;/code&amp;gt; - legt das zugehörige Passwort fest&lt;br /&gt;
&lt;br /&gt;
Wer keinen User konfiguriert hat, kann das Feld &amp;quot;telnetUser&amp;quot; leer lassen.&lt;br /&gt;
&lt;br /&gt;
Wer sicher gehen möchte, dass auch tatsächlich Telnet und nicht andere Zugriffe benutzt werden, sollte außerdem noch setzen:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;attr FritzBox forceTelnetConnection 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== mögliche Fehlermeldungen ===&lt;br /&gt;
Sollte schon bei &amp;lt;code&amp;gt;define FritzBox FRITZBOX&amp;lt;/code&amp;gt; die Fehlermeldung kommen, dass dieses Modul nicht existiert, dann bitte prüfen, ob Fhem auf dem aktuellen Stand ist und ggf. [[Update|aktualisieren]].&lt;br /&gt;
&lt;br /&gt;
Kommt jetzt bei der erneuten Definition die Fehlermeldung &amp;lt;code&amp;gt;Error: Perl modul Net::Telnet is missing on this system&amp;lt;/code&amp;gt; bitte wie oben schon erwähnt den Befehl &lt;br /&gt;
:&amp;lt;code&amp;gt;sudo apt-get install libnet-telnet-perl&amp;lt;/code&amp;gt; &lt;br /&gt;
direkt per Telnet/SSH auf dem FHEM-Server ausführen und neu starten.&lt;br /&gt;
Sollte alles geklappt haben, seht ihr nun eure Fritzbox und könnt diverse Einstellungen manuell vornehmen und/oder automatisch vornehmen lassen.&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
=== Define ===&lt;br /&gt;
Siehe [http://fhem.de/commandref_DE.html#FRITZBOX commandref]&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
Siehe commandref&lt;br /&gt;
&lt;br /&gt;
=== TR-064 ===&lt;br /&gt;
Die offizielle Programmier-Schnittstelle der Fritz!Box läuft über das Protokoll TR-064.&lt;br /&gt;
&lt;br /&gt;
mit dem Attribute&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; allowTR064Command 1&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
kann man den Befehl&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;get &amp;lt;device&amp;gt; tr064Command &amp;lt;service&amp;gt; &amp;lt;control&amp;gt; &amp;lt;action&amp;gt; [[parameterName1 parameterValue1] ...]&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
freischalten und damit auf diese Schnittstelle zugreifen.&lt;br /&gt;
&lt;br /&gt;
AVM hat die Schnittstellenbeschreibung unter [http://avm.de/service/schnittstellen/] veröffentlicht. Ein weitere Einstiegspunkt befindet sich auch auf der Box unter http://fritz.box:49000/tr64desc.xml&lt;br /&gt;
&lt;br /&gt;
Folgende Service und Controls existieren (für den get-Befehl werden nur die fett formatierten Wörter benötigt)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!serviceType!!controlURL!!XML!!Dokument bei AVM&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;DeviceInfo:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;deviceinfo&#039;&#039;&#039;||[http://fritz.box:49000/deviceinfoSCPD.xml deviceinfoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/deviceinfoSCPD.pdf deviceinfoSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;DeviceConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;deviceconfig&#039;&#039;&#039;||[http://fritz.box:49000/deviceconfigSCPD.xml deviceconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/deviceconfigSCPD.pdf deviceconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;Layer3Forwarding:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;layer3forwarding&#039;&#039;&#039;||[http://fritz.box:49000//layer3forwardingSCPD.xml layer3forwardingSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/layer3forwardingSCPD.pdf layer3forwardingSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;LANConfigSecurity:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;lanconfigsecurity&#039;&#039;&#039;||[http://fritz.box:49000//lanconfigsecuritySCPD.xml lanconfigsecuritySCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanconfigsecuritySCPD.pdf lanconfigsecuritySCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;ManagementServer:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;mgmsrv&#039;&#039;&#039;||[http://fritz.box:49000//mgmsrvSCPD.xml mgmsrvSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/mgmsrvSCPD.pdf mgmsrvSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;Time:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;time&#039;&#039;&#039;||[http://fritz.box:49000//timeSCPD.xml timeSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/timeSCPD.pdf timeSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;UserInterface:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;userif&#039;&#039;&#039;||[http://fritz.box:49000//userifSCPD.xml userifSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/userifSCPD.pdf userifSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_VoIP:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_voip&#039;&#039;&#039;||[http://fritz.box:49000//x_voipSCPD.xml x_voipSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_voipSCPD.pdf x_voipSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_Storage:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_storage&#039;&#039;&#039;||[http://fritz.box:49000//x_storageSCPD.xml x_storageSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_storageSCPD.pdf x_storageSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_OnTel:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_contact&#039;&#039;&#039;||[http://fritz.box:49000//x_contactSCPD.xml x_contactSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_contactSCPD.pdf x_contactSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_WebDAVClient:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_webdav&#039;&#039;&#039;||[http://fritz.box:49000//x_webdavSCPD.xml x_webdavSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_webdavSCPD.pdf x_webdavSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_UPnP:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_upnp&#039;&#039;&#039;||[http://fritz.box:49000//x_upnpSCPD.xml x_upnpSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_upnp.pdf x_upnp.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_RemoteAccess:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_remote&#039;&#039;&#039;||[http://fritz.box:49000/x_remoteSCPD.xml x_remoteSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_remoteSCPD.pdf x_remoteSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_MyFritz:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_myfritz&#039;&#039;&#039;||[http://fritz.box:49000/x_myfritzSCPD.xml x_myfritzSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_myfritzSCPD.pdf x_myfritzSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_TAM:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_tam&#039;&#039;&#039;||[http://fritz.box:49000/x_tamSCPD.xml x_tamSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_tam.pdf x_tam.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_AppSetup:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_appsetup&#039;&#039;&#039;||[http://fritz.box:49000/x_homeautoSCPD.xml x_homeautoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_appsetupSCPD.pdf x_appsetupSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_Homeauto:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_homeauto&#039;&#039;&#039;||[http://fritz.box:49000/x_homeautoSCPD.xml x_homeautoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_homeautoSCPD.pdf x_homeautoSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WLANConfiguration:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wlanconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WLANConfiguration:2&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wlanconfig2&#039;&#039;&#039;||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WLANConfiguration:3&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wlanconfig3&#039;&#039;&#039;||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;Hosts:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;hosts&#039;&#039;&#039;||[http://fritz.box:49000/hostsSCPD.xml hostsSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/hostsSCPD.pdf hostsSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;LANEthernetInterfaceConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;lanethernetifcfg&#039;&#039;&#039;||[http://fritz.box:49000/lanifconfigSCPD.xml lanifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanifconfigSCPD.pdf lanifconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;LANHostConfigManagement:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;lanhostconfigmgm&#039;&#039;&#039;||[http://fritz.box:49000/lanhostconfigmgmSCPD.xml lanhostconfigmgmSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanhostconfigmgmSCPD.pdf lanhostconfigmgmSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANCommonInterfaceConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wancommonifconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wancommonifconfigSCPD.xml wancommonifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wancommonifconfigSCPD.pdf wancommonifconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANDSLInterfaceConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wandslifconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wandslifconfigSCPD.xml wandslifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wandslifconfigSCPD.pdf wandslifconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANDSLLinkConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wandsllinkconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wandsllinkconfigSCPD.xml wandsllinkconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wandsllinkconfigSCPD.pdf wandsllinkconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANEthernetLinkConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wanethlinkconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wanethlinkconfigSCPD.xml wanethlinkconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanethlinkconfigSCPD.pdf wanethlinkconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANPPPConnection:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wanpppconn1&#039;&#039;&#039;||[http://fritz.box:49000/wanpppconnSCPD.xml wanpppconnSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanpppconnSCPD.pdf wanpppconnSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANIPConnection:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wanipconnection1&#039;&#039;&#039;||[http://fritz.box:49000/wanipconnSCPD.xml wanipconnSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanipconnSCPD.pdf wanipconnSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Status-Symbol ===&lt;br /&gt;
&amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; devStateIcon .*on.*off:WLAN_on_gWLAN_off .*on.*on.*:WLAN_on_gWLAN_on WLAN..off.*:WLAN_off&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Verzeichnis www/images/default müssen die passenden Dateien &amp;quot;WLAN_on_gWLAN_off.png&amp;quot;, &amp;quot;WLAN_on_gWLAN_on.png&amp;quot; und &amp;quot;WLAN_off.png&amp;quot; liegen. Wenn die PNGs fehlen, können sie hier [http://forum.fhem.de/index.php/topic,29725.msg318113.html#msg318113] heruntergeladen werden.&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
[[Datei:Screenshot_FritzBox1.png|mini|300px|rechts|FRITZBOX Gerät auf der Fhem Oberfläche]]&lt;br /&gt;
Sollte alles geklappt haben, seht ihr nun unter &amp;quot;Unsortiert&amp;quot; den im nebenstehenden Screenshot gezeigten Eintrag für das &amp;quot;Gerät&amp;quot; (hier mit dem Icon &amp;quot;it_router&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== TR-064 Bespiele ===&lt;br /&gt;
&lt;br /&gt;
*Box Reboot: &amp;lt;code&amp;gt;get &amp;lt;device&amp;gt; tr064Command DeviceConfig:1 deviceconfig Reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Klingel- und Sprachausgabe per TR-064 ===&lt;br /&gt;
&lt;br /&gt;
Das geht derzeit nicht, da entsprechende Kommandos per TR-064 nicht verfügbar sind. Da Telnet sukzessive abgestellt wird, sollten sich Interessenten per Feature-Request an AVM wenden, wie hier [http://forum.fhem.de/index.php/topic,38586.0.html] beschrieben.&lt;br /&gt;
&lt;br /&gt;
=== Anwesenheitserkennung ===&lt;br /&gt;
&lt;br /&gt;
Fritzboxen und die FRITZ!WLAN Repeater speichern den Status angemeldeter Geräte. Dieser Status lässt sich mittels des FRITZBOX Moduls über Readings abfragen, die das Format mac_AA_AA_AA_AA_AA_AA haben und die MAC-Adressen der jeweils angemeldeten Geräte (AA:AA:AA:AA:AA:AA) enthalten. Das Reading existiert, wenn das Gerät angemeldet ist. Wenn das Gerät abgemeldet ist, existiert es ist. Es gibt auch noch den Zwischenstatus &amp;quot;inactive&amp;quot;, der anscheinend gesetzt wird, bevor das Reading gelöscht wird.&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe des PRESENCE Moduls (vgl. [[Anwesenheitserkennung]]) kann man auf diese Weise den Anwesenheitsstatus abfragen. Anregungen dazu gibt es im zugehörigen {{Link2Forum|Topic=39433|LinkText=Forenthread}} zur Anwesenheitserkennung und in einem Blogpost: [http://heinz-otto.blogspot.de/2015/07/die-zeiten-andern-sich.html]. Auf dieser Basis könnte eine einfache Implementierung zum Beispiel so aussehen:&lt;br /&gt;
&lt;br /&gt;
Funktion in 99_myUtils.pm:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sub checkFritzMACpresent($$) {&lt;br /&gt;
  # Benötigt: Name der zu testenden Fritzbox ($Device),&lt;br /&gt;
  #           zu suchende MAC ($MAC), &lt;br /&gt;
  # Rückgabe: 1 = Gerät gefunden&lt;br /&gt;
  #           0 = Gerät nicht gefunden&lt;br /&gt;
  my ($Device, $MAC) = @_;&lt;br /&gt;
  my $Status = 0;&lt;br /&gt;
  $MAC =~ tr/:/_/;&lt;br /&gt;
  $MAC = &amp;quot;mac_&amp;quot;.uc($MAC);&lt;br /&gt;
  my $StatusFritz = ReadingsVal($Device, $MAC, &amp;quot;weg&amp;quot;);&lt;br /&gt;
  if ($StatusFritz eq &amp;quot;weg&amp;quot;) {&lt;br /&gt;
    Log 1, (&amp;quot;checkFritzMACpresent ($Device): $MAC nicht gefunden, abwesend.&amp;quot;);&lt;br /&gt;
    $Status = 0;&lt;br /&gt;
  } elsif ($StatusFritz eq &amp;quot;inactive&amp;quot;) {&lt;br /&gt;
    Log 1, (&amp;quot;checkFritzMACpresent ($Device): $MAC ist &amp;gt;inactive&amp;lt;, also abwesend.&amp;quot;);&lt;br /&gt;
    $Status = 0;&lt;br /&gt;
  } else {&lt;br /&gt;
    # Reading existiert, Rückgabewert ist nicht &amp;quot;inactive&amp;quot;, also ist das Gerät per WLAN angemeldet.&lt;br /&gt;
    Log 1, (&amp;quot;checkFritzMACpresent ($Device): $MAC gefunden, Gerät heißt &amp;gt;$StatusFritz&amp;lt;.&amp;quot;);&lt;br /&gt;
    $Status = 1;&lt;br /&gt;
  }&lt;br /&gt;
  return $Status&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nutzung dieser Funktion mit dem PRESENCE Modul definieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;Name&amp;gt; PRESENCE function {checkFritzMACpresent(&amp;quot;Fritzbox&amp;quot;,&amp;quot;AA:BB:CC:DD:EE:FF&amp;quot;)}  60 60&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wobei&lt;br /&gt;
*&amp;lt;Name&amp;gt; ein beliebig zu wählender Name für die PRESENCE-Funktion ist,&lt;br /&gt;
*Fritzbox der Name ist, mit dem ihr die abzufragende Fritzbox als FRITZBOX definiert habt,&lt;br /&gt;
*AA:BB:CC:DD:EE:FF die MAC-Adresse des gesuchten Geräts ist.&lt;br /&gt;
* &amp;quot;60 60&amp;quot; sagt, dass der Anwesenheitsstatus im 60-Sekunden-Takt abgefragt wird. Das macht natürlich nur Sinn, wenn ihr mit &amp;lt;code&amp;gt;attr Fritzbox INTERVAL 60&amp;lt;/code&amp;gt; den Abfrageinterval bei der Fritzbox auch entsprechend hochgesetzt habt. Der Standard ist 300.&lt;br /&gt;
* &amp;quot;Log 1&amp;quot; führt immer zum Loggen. Das ist zum Einrichten praktisch, ohne dass man gleich für das ganze Modul oder ganz FHEM &amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; verbose 5&amp;lt;/code&amp;gt; setzen muss. Wenn es läuft, können die &amp;quot;Log 1&amp;quot;-Zeilen gelöscht, auskommentiert (# an den Zeilenanfang) oder in &amp;quot;Log 5&amp;quot; geändert werden.&lt;br /&gt;
&lt;br /&gt;
Weitere Hinweise zu komplexeren Abfragen mehrere Boxen auf einmal etc. findet ihr auch im {{Link2Forum|Topic=39433|LinkText=Forenthread}}.&lt;br /&gt;
&lt;br /&gt;
=== Mehrere Fritzboxen oder Repeater und Fritzbox (wird noch bearbeitet) ===&lt;br /&gt;
Existiert ein AVM Repeater im Netzwerk, kann der als eigenständiges Gerät mit FRITZBOX definiert werden. WLAN Geräte an der Fritzbox werden in der Instanz der Fritzbox gelistet und WLAN Geräte am Repeater in der Repeater Instanz. Um trotzdem die Anwesenheit im Netzwerk einfach zu erkennen muss die Subroutine in 99_myUtils abgewandelt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;my @fbs = devspec2array(&amp;quot;TYPE=FRITZBOX&amp;quot;); (Nur als Hinweis)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Existiert eine zweite Fritzbox im Accesspointmodus werden die WLAN Geräte im Netzwerk alle in der Hauptfritzbox an einem LAN Anschluss gelistet. D.h. man sieht an der Hauptfritzbox nicht, dass sie im WLAN sind. Eine zweite Instanz mit dem FRITZBOX Modul muss wegen der Anwesenheitserkennung nicht gemacht werden.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=29725|LinkText=Forenthread}} zu diesem Modul&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FritzBox]] &lt;br /&gt;
&amp;lt;!-- (Modulkategorie wird automatisch gesetzt) --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Motivierte linke Hände</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FRITZBOX&amp;diff=12036</id>
		<title>FRITZBOX</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FRITZBOX&amp;diff=12036"/>
		<updated>2015-08-21T07:45:16Z</updated>

		<summary type="html">&lt;p&gt;Motivierte linke Hände: Anwesenheitserkennung aufgenommen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuerung einer Fritz!Box über Fhem&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=FRITZ!Box&lt;br /&gt;
|ModTechName=72_FRITZBOX.pm&lt;br /&gt;
|ModOwner=tupol/Topos ([http://forum.fhem.de/index.php?action=profile;u=5432 Forum] / [[Benutzer Diskussion:Topos|Wiki]])}}&lt;br /&gt;
&lt;br /&gt;
Das Modul [[FRITZBOX]] ermöglicht die Steuerung einer [[AVM Fritz!Box]] und von AVM FRITZ!WLAN Repeatern durch Fhem. An Fritzboxen können sowohl Geräte abgefragt werden, auf denen FHEM selbst läuft (lokaler Modus), als auch um eine entfernte (externe) Geräte.&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
=== Remote-Zugang ===&lt;br /&gt;
Für den Remote-Zugang müssen die Module JSON:XS, LWP und SOAP::Lite installiert sein; auf einem [[Raspberry Pi]] oder unter Ubuntu z.&amp;amp;nbsp;B. mit dem Befehl&lt;br /&gt;
:::&amp;lt;code&amp;gt;sudo apt-get install libjson-perl libwww-perl libsoap-lite-perl libjson-xs-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Teilweise ist derzeit zusätzlich die Installation der telnet Libraries erforderlich, auch wenn der Telnet-Zugang nicht genutzt werden soll. Siehe dazu den nachfolgenden Abschnitt.&lt;br /&gt;
&lt;br /&gt;
=== Telnet ===&lt;br /&gt;
Das Modul basierte ursprünglich auf dem Zugriff auf die Fritzbox per Telnet. Ab FRITZ!OS 6.2x baut AVM den abgekündigten Telnet-Zugang sowie die webcm-Schnittstelle sukzessive zurück bzw. hat dies, je nach Firmware, schon ganz abgestellt (siehe {{Link2Forum|Topic=38586|LinkText=dieses Forenthema}}). Der zukunftssichere Zugriff auf die Fritzbox sollte also per TR-064 erfolgen. Der Vollständigkeit halber und für ältere Firmwareversionen: &lt;br /&gt;
&lt;br /&gt;
# Wer den Zugang per Telnet (noch) nutzen (kann und) möchte, muss dies zuerst freischalten. Üblicherweise durch Eingabe von #96*7* an einem direkt an der entsprechenden FritzBox angeschlosssenen Telefon&lt;br /&gt;
&lt;br /&gt;
# Auf dem System, auf dem Fhem läuft ([[Systemübersicht#Server|Server]]) muss Telnet installiert sein; auf einem [[Raspberry Pi]] und unter Ubuntu z.&amp;amp;nbsp;B. mit dem Befehl&lt;br /&gt;
:::&amp;lt;code&amp;gt;sudo apt-get install libnet-telnet-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
=== Erste Schritte ===&lt;br /&gt;
Zur Erstinstallation reicht ein einfaches &amp;lt;code&amp;gt;define FritzBox FRITZBOX&amp;lt;/code&amp;gt;, dieses Modul funktioniert lokal (FHEM auf Fritzbox) sowie per Fernzugriff (FHEM auf einem anderen Server im Netz, siehe nächsten Schritt).&lt;br /&gt;
&lt;br /&gt;
==== TR-064: Modul FRITZBOX für Zugriff auf einem externen Server einrichten ====&lt;br /&gt;
Für den Fernzugriff über TR-064 auf eine oder mehrere Fritzboxen und/oder einen FRITZ!WLAN Repeater sind die folgenden Schritte nötig (für jedes Gerät):&lt;br /&gt;
&lt;br /&gt;
Fritzbox definieren:&lt;br /&gt;
:&amp;lt;code&amp;gt;define FritzBox FRITZBOX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn das Login auf der Benutzeroberfläche der FritzBox mit User und Passwort (und nicht nur per Passwort) geschieht, den User konfigurieren:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr FritzBox boxUser &#039;&#039;Benutzername&#039;&#039; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Passwort konfigurieren:&lt;br /&gt;
:&amp;lt;code&amp;gt;set FritzBox password &#039;&#039;Passwort&#039;&#039; &amp;lt;/code&amp;gt; - legt das zugehörige Passwort fest&lt;br /&gt;
&lt;br /&gt;
Manuelle TR-064 Kommandos erlauben (die Abfrage per TR-064 funktioniert auch ohne dieses Attribut):&lt;br /&gt;
:&amp;lt;code&amp;gt;attr FritzBox allowTR064Command 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn die Fritzbox nicht unter http://fritz.box erreichbar ist, IP setzen:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr FritzBox fritzBoxIP 192.168.168.168&amp;lt;/code&amp;gt;&lt;br /&gt;
(192.168.168.168 natürlich durch die passende IP ersetzen...) Manchmal ist ein Neustart von FHEM erforderlich, damit die Fritzbox mit der veränderten IP gefunden wird.&lt;br /&gt;
&lt;br /&gt;
==== Telnet: Modul FRITZBOX für Zugriff auf einem externen Server einrichten ====&lt;br /&gt;
[[Datei:Screenshot_FritzBox_TelnetUser.png|mini|300px|rechts|Anlegen des Attributs telnetUser]]&lt;br /&gt;
Bei Fernzugriff über Telnet sind weitere Schritte nötig:&lt;br /&gt;
# Telnet auf der Fritzbox freischalten (Tastenkombination #96*7* am angeschlossenen Telefon (auch FritzFon)&lt;br /&gt;
# TelnetUser definieren (wie im Screenshot gezeigt)&lt;br /&gt;
# Passwort zum Benutzer auf der Fritzbox definieren&lt;br /&gt;
&lt;br /&gt;
[[Datei:Screenshot_FritzBox_Passwort.png|mini|300px|rechts|Passwort definieren]]&lt;br /&gt;
&lt;br /&gt;
(bitte die Buttons {{Taste|set}} und {{Taste|attr}} bei der Definition der jeweiligen Einträge nicht vergessen)&lt;br /&gt;
&lt;br /&gt;
Wer stattdessen lieber das [[Konfiguration|Befehl-Eingabefeld]] verwendet:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;define FritzBox FRITZBOX&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;attr FritzBox telnetUser &#039;&#039;Benutzername&#039;&#039; &amp;lt;/code&amp;gt; - legt den Benutzer fest&lt;br /&gt;
:&amp;lt;code&amp;gt;set FritzBox password &#039;&#039;Passwort&#039;&#039; &amp;lt;/code&amp;gt; - legt das zugehörige Passwort fest&lt;br /&gt;
&lt;br /&gt;
Wer keinen User konfiguriert hat, kann das Feld &amp;quot;telnetUser&amp;quot; leer lassen.&lt;br /&gt;
&lt;br /&gt;
Wer sicher gehen möchte, dass auch tatsächlich Telnet und nicht andere Zugriffe benutzt werden, sollte außerdem noch setzen:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;attr FritzBox forceTelnetConnection 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== mögliche Fehlermeldungen ===&lt;br /&gt;
Sollte schon bei &amp;lt;code&amp;gt;define FritzBox FRITZBOX&amp;lt;/code&amp;gt; die Fehlermeldung kommen, dass dieses Modul nicht existiert, dann bitte prüfen, ob Fhem auf dem aktuellen Stand ist und ggf. [[Update|aktualisieren]].&lt;br /&gt;
&lt;br /&gt;
Kommt jetzt bei der erneuten Definition die Fehlermeldung &amp;lt;code&amp;gt;Error: Perl modul Net::Telnet is missing on this system&amp;lt;/code&amp;gt; bitte wie oben schon erwähnt den Befehl &lt;br /&gt;
:&amp;lt;code&amp;gt;sudo apt-get install libnet-telnet-perl&amp;lt;/code&amp;gt; &lt;br /&gt;
direkt per Telnet/SSH auf dem FHEM-Server ausführen und neu starten.&lt;br /&gt;
Sollte alles geklappt haben, seht ihr nun eure Fritzbox und könnt diverse Einstellungen manuell vornehmen und/oder automatisch vornehmen lassen.&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
=== Define ===&lt;br /&gt;
Siehe [http://fhem.de/commandref_DE.html#FRITZBOX commandref]&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
Siehe commandref&lt;br /&gt;
&lt;br /&gt;
=== TR-064 ===&lt;br /&gt;
Die offizielle Programmier-Schnittstelle der Fritz!Box läuft über das Protokoll TR-064.&lt;br /&gt;
&lt;br /&gt;
mit dem Attribute&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; allowTR064Command 1&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
kann man den Befehl&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;get &amp;lt;device&amp;gt; tr064Command &amp;lt;service&amp;gt; &amp;lt;control&amp;gt; &amp;lt;action&amp;gt; [[parameterName1 parameterValue1] ...]&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
freischalten und damit auf diese Schnittstelle zugreifen.&lt;br /&gt;
&lt;br /&gt;
AVM hat die Schnittstellenbeschreibung unter [http://avm.de/service/schnittstellen/] veröffentlicht. Ein weitere Einstiegspunkt befindet sich auch auf der Box unter http://fritz.box:49000/tr64desc.xml&lt;br /&gt;
&lt;br /&gt;
Folgende Service und Controls existieren (für den get-Befehl werden nur die fett formatierten Wörter benötigt)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!serviceType!!controlURL!!XML!!Dokument bei AVM&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;DeviceInfo:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;deviceinfo&#039;&#039;&#039;||[http://fritz.box:49000/deviceinfoSCPD.xml deviceinfoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/deviceinfoSCPD.pdf deviceinfoSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;DeviceConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;deviceconfig&#039;&#039;&#039;||[http://fritz.box:49000/deviceconfigSCPD.xml deviceconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/deviceconfigSCPD.pdf deviceconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;Layer3Forwarding:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;layer3forwarding&#039;&#039;&#039;||[http://fritz.box:49000//layer3forwardingSCPD.xml layer3forwardingSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/layer3forwardingSCPD.pdf layer3forwardingSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;LANConfigSecurity:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;lanconfigsecurity&#039;&#039;&#039;||[http://fritz.box:49000//lanconfigsecuritySCPD.xml lanconfigsecuritySCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanconfigsecuritySCPD.pdf lanconfigsecuritySCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;ManagementServer:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;mgmsrv&#039;&#039;&#039;||[http://fritz.box:49000//mgmsrvSCPD.xml mgmsrvSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/mgmsrvSCPD.pdf mgmsrvSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;Time:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;time&#039;&#039;&#039;||[http://fritz.box:49000//timeSCPD.xml timeSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/timeSCPD.pdf timeSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;UserInterface:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;userif&#039;&#039;&#039;||[http://fritz.box:49000//userifSCPD.xml userifSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/userifSCPD.pdf userifSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_VoIP:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_voip&#039;&#039;&#039;||[http://fritz.box:49000//x_voipSCPD.xml x_voipSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_voipSCPD.pdf x_voipSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_Storage:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_storage&#039;&#039;&#039;||[http://fritz.box:49000//x_storageSCPD.xml x_storageSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_storageSCPD.pdf x_storageSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_OnTel:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_contact&#039;&#039;&#039;||[http://fritz.box:49000//x_contactSCPD.xml x_contactSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_contactSCPD.pdf x_contactSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_WebDAVClient:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_webdav&#039;&#039;&#039;||[http://fritz.box:49000//x_webdavSCPD.xml x_webdavSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_webdavSCPD.pdf x_webdavSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_UPnP:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_upnp&#039;&#039;&#039;||[http://fritz.box:49000//x_upnpSCPD.xml x_upnpSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_upnp.pdf x_upnp.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_RemoteAccess:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_remote&#039;&#039;&#039;||[http://fritz.box:49000/x_remoteSCPD.xml x_remoteSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_remoteSCPD.pdf x_remoteSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_MyFritz:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_myfritz&#039;&#039;&#039;||[http://fritz.box:49000/x_myfritzSCPD.xml x_myfritzSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_myfritzSCPD.pdf x_myfritzSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_TAM:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_tam&#039;&#039;&#039;||[http://fritz.box:49000/x_tamSCPD.xml x_tamSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_tam.pdf x_tam.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_AppSetup:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_appsetup&#039;&#039;&#039;||[http://fritz.box:49000/x_homeautoSCPD.xml x_homeautoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_appsetupSCPD.pdf x_appsetupSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_Homeauto:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_homeauto&#039;&#039;&#039;||[http://fritz.box:49000/x_homeautoSCPD.xml x_homeautoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_homeautoSCPD.pdf x_homeautoSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WLANConfiguration:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wlanconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WLANConfiguration:2&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wlanconfig2&#039;&#039;&#039;||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WLANConfiguration:3&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wlanconfig3&#039;&#039;&#039;||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;Hosts:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;hosts&#039;&#039;&#039;||[http://fritz.box:49000/hostsSCPD.xml hostsSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/hostsSCPD.pdf hostsSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;LANEthernetInterfaceConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;lanethernetifcfg&#039;&#039;&#039;||[http://fritz.box:49000/lanifconfigSCPD.xml lanifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanifconfigSCPD.pdf lanifconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;LANHostConfigManagement:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;lanhostconfigmgm&#039;&#039;&#039;||[http://fritz.box:49000/lanhostconfigmgmSCPD.xml lanhostconfigmgmSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanhostconfigmgmSCPD.pdf lanhostconfigmgmSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANCommonInterfaceConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wancommonifconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wancommonifconfigSCPD.xml wancommonifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wancommonifconfigSCPD.pdf wancommonifconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANDSLInterfaceConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wandslifconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wandslifconfigSCPD.xml wandslifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wandslifconfigSCPD.pdf wandslifconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANDSLLinkConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wandsllinkconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wandsllinkconfigSCPD.xml wandsllinkconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wandsllinkconfigSCPD.pdf wandsllinkconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANEthernetLinkConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wanethlinkconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wanethlinkconfigSCPD.xml wanethlinkconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanethlinkconfigSCPD.pdf wanethlinkconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANPPPConnection:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wanpppconn1&#039;&#039;&#039;||[http://fritz.box:49000/wanpppconnSCPD.xml wanpppconnSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanpppconnSCPD.pdf wanpppconnSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANIPConnection:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wanipconnection1&#039;&#039;&#039;||[http://fritz.box:49000/wanipconnSCPD.xml wanipconnSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanipconnSCPD.pdf wanipconnSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Status-Symbol ===&lt;br /&gt;
&amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; devStateIcon .*on.*off:WLAN_on_gWLAN_off .*on.*on.*:WLAN_on_gWLAN_on WLAN..off.*:WLAN_off&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Verzeichnis www/images/default müssen die passenden Dateien &amp;quot;WLAN_on_gWLAN_off.png&amp;quot;, &amp;quot;WLAN_on_gWLAN_on.png&amp;quot; und &amp;quot;WLAN_off.png&amp;quot; liegen. Wenn die PNGs fehlen, können sie hier [http://forum.fhem.de/index.php/topic,29725.msg318113.html#msg318113] heruntergeladen werden.&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
[[Datei:Screenshot_FritzBox1.png|mini|300px|rechts|FRITZBOX Gerät auf der Fhem Oberfläche]]&lt;br /&gt;
Sollte alles geklappt haben, seht ihr nun unter &amp;quot;Unsortiert&amp;quot; den im nebenstehenden Screenshot gezeigten Eintrag für das &amp;quot;Gerät&amp;quot; (hier mit dem Icon &amp;quot;it_router&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== TR-064 Bespiele ===&lt;br /&gt;
&lt;br /&gt;
*Box Reboot: &amp;lt;code&amp;gt;get &amp;lt;device&amp;gt; tr064Command DeviceConfig:1 deviceconfig Reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Klingel- und Sprachausgabe per TR-064 ===&lt;br /&gt;
&lt;br /&gt;
Das geht derzeit nicht, da entsprechende Kommandos per TR-064 nicht verfügbar sind. Da Telnet sukzessive abgestellt wird, sollten sich Interessenten per Feature-Request an AVM wenden, wie hier [http://forum.fhem.de/index.php/topic,38586.0.html] beschrieben.&lt;br /&gt;
&lt;br /&gt;
=== Anwesenheitserkennung ===&lt;br /&gt;
&lt;br /&gt;
Fritzboxen und die FRITZ!WLAN Repeater speichern den Status angemeldeter Geräte. Dieser Status lässt sich mittels des FRITZBOX Moduls über Readings abfragen, die das Format mac_AA_AA_AA_AA_AA_AA haben und die MAC-Adressen der jeweils angemeldeten Geräte (AA:AA:AA:AA:AA:AA) enthalten. Das Reading existiert, wenn das Gerät angemeldet ist. Wenn das Gerät abgemeldet ist, existiert es ist. Es gibt auch noch den Zwischenstatus &amp;quot;inactive&amp;quot;, der anscheinend gesetzt wird, bevor das Reading gelöscht wird.&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe des PRESENCE Moduls (vgl. [[Anwesenheitserkennung]]) kann man auf diese Weise den Anwesenheitsstatus abfragen. Anregungen dazu gibt es im zugehörigen {{Link2Forum|Topic=39422|LinkText=Forenthread}} zur Anwesenheitserkennung und in einem Blogpost: [http://heinz-otto.blogspot.de/2015/07/die-zeiten-andern-sich.html]. Auf dieser Basis könnte eine einfache Implementierung zum Beispiel so aussehen:&lt;br /&gt;
&lt;br /&gt;
Funktion in 99_myUtils.pm:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sub checkFritzMACpresent($$) {&lt;br /&gt;
  # Benötigt: Name der zu testenden Fritzbox ($Device),&lt;br /&gt;
  #           zu suchende MAC ($MAC), &lt;br /&gt;
  # Rückgabe: 1 = Gerät gefunden&lt;br /&gt;
  #           0 = Gerät nicht gefunden&lt;br /&gt;
  my ($Device, $MAC) = @_;&lt;br /&gt;
  my $Status = 0;&lt;br /&gt;
  $MAC =~ tr/:/_/;&lt;br /&gt;
  $MAC = &amp;quot;mac_&amp;quot;.uc($MAC);&lt;br /&gt;
  my $StatusFritz = ReadingsVal($Device, $MAC, &amp;quot;weg&amp;quot;);&lt;br /&gt;
  if ($StatusFritz eq &amp;quot;weg&amp;quot;) {&lt;br /&gt;
    Log 1, (&amp;quot;checkFritzMACpresent ($Device): $MAC nicht gefunden, abwesend.&amp;quot;);&lt;br /&gt;
    $Status = 0;&lt;br /&gt;
  } elsif ($StatusFritz eq &amp;quot;inactive&amp;quot;) {&lt;br /&gt;
    Log 1, (&amp;quot;checkFritzMACpresent ($Device): $MAC ist &amp;gt;inactive&amp;lt;, also abwesend.&amp;quot;);&lt;br /&gt;
    $Status = 0;&lt;br /&gt;
  } else {&lt;br /&gt;
    # Reading existiert, Rückgabewert ist nicht &amp;quot;inactive&amp;quot;, also ist das Gerät per WLAN angemeldet.&lt;br /&gt;
    Log 1, (&amp;quot;checkFritzMACpresent ($Device): $MAC gefunden, Gerät heißt &amp;gt;$StatusFritz&amp;lt;.&amp;quot;);&lt;br /&gt;
    $Status = 1;&lt;br /&gt;
  }&lt;br /&gt;
  return $Status&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nutzung dieser Funktion mit dem PRESENCE Modul definieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;Name&amp;gt; PRESENCE function {checkFritzMACpresent(&amp;quot;Fritzbox&amp;quot;,&amp;quot;AA:BB:CC:DD:EE:FF&amp;quot;)}  60 60&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wobei&lt;br /&gt;
*&amp;lt;Name&amp;gt; ein beliebig zu wählender Name für die PRESENCE-Funktion ist,&lt;br /&gt;
*Fritzbox der Name ist, mit dem ihr die abzufragende Fritzbox als FRITZBOX definiert habt,&lt;br /&gt;
*AA:BB:CC:DD:EE:FF die MAC-Adresse des gesuchten Geräts ist.&lt;br /&gt;
* &amp;quot;60 60&amp;quot; sagt, dass der Anwesenheitsstatus im 60-Sekunden-Takt abgefragt wird. Das macht natürlich nur Sinn, wenn ihr mit &amp;lt;code&amp;gt;attr Fritzbox INTERVAL 60&amp;lt;/code&amp;gt; den Abfrageinterval bei der Fritzbox auch entsprechend hochgesetzt habt. Der Standard ist 300.&lt;br /&gt;
&lt;br /&gt;
Weitere Hinweise zu komplexeren Abfragen mehrere Boxen auf einmal etc. findet ihr auch im {{Link2Forum|Topic=39422|LinkText=Forenthread}}.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=29725|LinkText=Forenthread}} zu diesem Modul&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FritzBox]] &lt;br /&gt;
&amp;lt;!-- (Modulkategorie wird automatisch gesetzt) --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Motivierte linke Hände</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FRITZBOX&amp;diff=12035</id>
		<title>FRITZBOX</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FRITZBOX&amp;diff=12035"/>
		<updated>2015-08-21T06:40:29Z</updated>

		<summary type="html">&lt;p&gt;Motivierte linke Hände: Einheitliche Schreibweise Fritz*B*ox statt Fritz*b*ox im Code, kleinere Ergänzungen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuerung einer Fritz!Box über Fhem&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=FRITZ!Box&lt;br /&gt;
|ModTechName=72_FRITZBOX.pm&lt;br /&gt;
|ModOwner=tupol/Topos ([http://forum.fhem.de/index.php?action=profile;u=5432 Forum] / [[Benutzer Diskussion:Topos|Wiki]])}}&lt;br /&gt;
&lt;br /&gt;
Das Modul [[FRITZBOX]] ermöglicht die Steuerung einer [[AVM Fritz!Box]] und von AVM FRITZ!WLAN Repeatern durch Fhem. An Fritzboxen können sowohl Geräte abgefragt werden, auf denen FHEM selbst läuft (lokaler Modus), als auch um eine entfernte (externe) Geräte.&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
=== Remote-Zugang ===&lt;br /&gt;
Für den Remote-Zugang müssen die Module JSON:XS, LWP und SOAP::Lite installiert sein; auf einem [[Raspberry Pi]] oder unter Ubuntu z.&amp;amp;nbsp;B. mit dem Befehl&lt;br /&gt;
:::&amp;lt;code&amp;gt;sudo apt-get install libjson-perl libwww-perl libsoap-lite-perl libjson-xs-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Teilweise ist derzeit zusätzlich die Installation der telnet Libraries erforderlich, auch wenn der Telnet-Zugang nicht genutzt werden soll. Siehe dazu den nachfolgenden Abschnitt.&lt;br /&gt;
&lt;br /&gt;
=== Telnet ===&lt;br /&gt;
Das Modul basierte ursprünglich auf dem Zugriff auf die Fritzbox per Telnet. Ab FRITZ!OS 6.2x baut AVM den abgekündigten Telnet-Zugang sowie die webcm-Schnittstelle sukzessive zurück bzw. hat dies, je nach Firmware, schon ganz abgestellt (siehe {{Link2Forum|Topic=38586|LinkText=dieses Forenthema}}). Der zukunftssichere Zugriff auf die Fritzbox sollte also per TR-064 erfolgen. Der Vollständigkeit halber und für ältere Firmwareversionen: &lt;br /&gt;
&lt;br /&gt;
# Wer den Zugang per Telnet (noch) nutzen (kann und) möchte, muss dies zuerst freischalten. Üblicherweise durch Eingabe von #96*7* an einem direkt an der entsprechenden FritzBox angeschlosssenen Telefon&lt;br /&gt;
&lt;br /&gt;
# Auf dem System, auf dem Fhem läuft ([[Systemübersicht#Server|Server]]) muss Telnet installiert sein; auf einem [[Raspberry Pi]] und unter Ubuntu z.&amp;amp;nbsp;B. mit dem Befehl&lt;br /&gt;
:::&amp;lt;code&amp;gt;sudo apt-get install libnet-telnet-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
=== Erste Schritte ===&lt;br /&gt;
Zur Erstinstallation reicht ein einfaches &amp;lt;code&amp;gt;define FritzBox FRITZBOX&amp;lt;/code&amp;gt;, dieses Modul funktioniert lokal (FHEM auf Fritzbox) sowie per Fernzugriff (FHEM auf einem anderen Server im Netz, siehe nächsten Schritt).&lt;br /&gt;
&lt;br /&gt;
==== TR-064: Modul FRITZBOX für Zugriff auf einem externen Server einrichten ====&lt;br /&gt;
Für den Fernzugriff über TR-064 auf eine oder mehrere Fritzboxen und/oder einen FRITZ!WLAN Repeater sind die folgenden Schritte nötig (für jedes Gerät):&lt;br /&gt;
&lt;br /&gt;
Fritzbox definieren:&lt;br /&gt;
:&amp;lt;code&amp;gt;define FritzBox FRITZBOX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn das Login auf der Benutzeroberfläche der FritzBox mit User und Passwort (und nicht nur per Passwort) geschieht, den User konfigurieren:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr FritzBox boxUser &#039;&#039;Benutzername&#039;&#039; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Passwort konfigurieren:&lt;br /&gt;
:&amp;lt;code&amp;gt;set FritzBox password &#039;&#039;Passwort&#039;&#039; &amp;lt;/code&amp;gt; - legt das zugehörige Passwort fest&lt;br /&gt;
&lt;br /&gt;
Manuelle TR-064 Kommandos erlauben (die Abfrage per TR-064 funktioniert auch ohne dieses Attribut):&lt;br /&gt;
:&amp;lt;code&amp;gt;attr FritzBox allowTR064Command 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn die Fritzbox nicht unter http://fritz.box erreichbar ist, IP setzen:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr FritzBox fritzBoxIP 192.168.168.168&amp;lt;/code&amp;gt;&lt;br /&gt;
(192.168.168.168 natürlich durch die passende IP ersetzen...) Manchmal ist ein Neustart von FHEM erforderlich, damit die Fritzbox mit der veränderten IP gefunden wird.&lt;br /&gt;
&lt;br /&gt;
==== Telnet: Modul FRITZBOX für Zugriff auf einem externen Server einrichten ====&lt;br /&gt;
[[Datei:Screenshot_FritzBox_TelnetUser.png|mini|300px|rechts|Anlegen des Attributs telnetUser]]&lt;br /&gt;
Bei Fernzugriff über Telnet sind weitere Schritte nötig:&lt;br /&gt;
# Telnet auf der Fritzbox freischalten (Tastenkombination #96*7* am angeschlossenen Telefon (auch FritzFon)&lt;br /&gt;
# TelnetUser definieren (wie im Screenshot gezeigt)&lt;br /&gt;
# Passwort zum Benutzer auf der Fritzbox definieren&lt;br /&gt;
&lt;br /&gt;
[[Datei:Screenshot_FritzBox_Passwort.png|mini|300px|rechts|Passwort definieren]]&lt;br /&gt;
&lt;br /&gt;
(bitte die Buttons {{Taste|set}} und {{Taste|attr}} bei der Definition der jeweiligen Einträge nicht vergessen)&lt;br /&gt;
&lt;br /&gt;
Wer stattdessen lieber das [[Konfiguration|Befehl-Eingabefeld]] verwendet:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;define FritzBox FRITZBOX&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;attr FritzBox telnetUser &#039;&#039;Benutzername&#039;&#039; &amp;lt;/code&amp;gt; - legt den Benutzer fest&lt;br /&gt;
:&amp;lt;code&amp;gt;set FritzBox password &#039;&#039;Passwort&#039;&#039; &amp;lt;/code&amp;gt; - legt das zugehörige Passwort fest&lt;br /&gt;
&lt;br /&gt;
Wer keinen User konfiguriert hat, kann das Feld &amp;quot;telnetUser&amp;quot; leer lassen.&lt;br /&gt;
&lt;br /&gt;
Wer sicher gehen möchte, dass auch tatsächlich Telnet und nicht andere Zugriffe benutzt werden, sollte außerdem noch setzen:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;attr FritzBox forceTelnetConnection 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== mögliche Fehlermeldungen ===&lt;br /&gt;
Sollte schon bei &amp;lt;code&amp;gt;define FritzBox FRITZBOX&amp;lt;/code&amp;gt; die Fehlermeldung kommen, dass dieses Modul nicht existiert, dann bitte prüfen, ob Fhem auf dem aktuellen Stand ist und ggf. [[Update|aktualisieren]].&lt;br /&gt;
&lt;br /&gt;
Kommt jetzt bei der erneuten Definition die Fehlermeldung &amp;lt;code&amp;gt;Error: Perl modul Net::Telnet is missing on this system&amp;lt;/code&amp;gt; bitte wie oben schon erwähnt den Befehl &lt;br /&gt;
:&amp;lt;code&amp;gt;sudo apt-get install libnet-telnet-perl&amp;lt;/code&amp;gt; &lt;br /&gt;
direkt per Telnet/SSH auf dem FHEM-Server ausführen und neu starten.&lt;br /&gt;
Sollte alles geklappt haben, seht ihr nun eure Fritzbox und könnt diverse Einstellungen manuell vornehmen und/oder automatisch vornehmen lassen.&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
=== Define ===&lt;br /&gt;
Siehe [http://fhem.de/commandref_DE.html#FRITZBOX commandref]&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
Siehe commandref&lt;br /&gt;
&lt;br /&gt;
=== TR-064 ===&lt;br /&gt;
Die offizielle Programmier-Schnittstelle der Fritz!Box läuft über das Protokoll TR-064.&lt;br /&gt;
&lt;br /&gt;
mit dem Attribute&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; allowTR064Command 1&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
kann man den Befehl&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;get &amp;lt;device&amp;gt; tr064Command &amp;lt;service&amp;gt; &amp;lt;control&amp;gt; &amp;lt;action&amp;gt; [[parameterName1 parameterValue1] ...]&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
freischalten und damit auf diese Schnittstelle zugreifen.&lt;br /&gt;
&lt;br /&gt;
AVM hat die Schnittstellenbeschreibung unter [http://avm.de/service/schnittstellen/] veröffentlicht. Ein weitere Einstiegspunkt befindet sich auch auf der Box unter http://fritz.box:49000/tr64desc.xml&lt;br /&gt;
&lt;br /&gt;
Folgende Service und Controls existieren (für den get-Befehl werden nur die fett formatierten Wörter benötigt)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!serviceType!!controlURL!!XML!!Dokument bei AVM&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;DeviceInfo:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;deviceinfo&#039;&#039;&#039;||[http://fritz.box:49000/deviceinfoSCPD.xml deviceinfoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/deviceinfoSCPD.pdf deviceinfoSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;DeviceConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;deviceconfig&#039;&#039;&#039;||[http://fritz.box:49000/deviceconfigSCPD.xml deviceconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/deviceconfigSCPD.pdf deviceconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;Layer3Forwarding:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;layer3forwarding&#039;&#039;&#039;||[http://fritz.box:49000//layer3forwardingSCPD.xml layer3forwardingSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/layer3forwardingSCPD.pdf layer3forwardingSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;LANConfigSecurity:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;lanconfigsecurity&#039;&#039;&#039;||[http://fritz.box:49000//lanconfigsecuritySCPD.xml lanconfigsecuritySCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanconfigsecuritySCPD.pdf lanconfigsecuritySCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;ManagementServer:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;mgmsrv&#039;&#039;&#039;||[http://fritz.box:49000//mgmsrvSCPD.xml mgmsrvSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/mgmsrvSCPD.pdf mgmsrvSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;Time:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;time&#039;&#039;&#039;||[http://fritz.box:49000//timeSCPD.xml timeSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/timeSCPD.pdf timeSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;UserInterface:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;userif&#039;&#039;&#039;||[http://fritz.box:49000//userifSCPD.xml userifSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/userifSCPD.pdf userifSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_VoIP:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_voip&#039;&#039;&#039;||[http://fritz.box:49000//x_voipSCPD.xml x_voipSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_voipSCPD.pdf x_voipSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_Storage:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_storage&#039;&#039;&#039;||[http://fritz.box:49000//x_storageSCPD.xml x_storageSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_storageSCPD.pdf x_storageSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_OnTel:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_contact&#039;&#039;&#039;||[http://fritz.box:49000//x_contactSCPD.xml x_contactSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_contactSCPD.pdf x_contactSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_WebDAVClient:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_webdav&#039;&#039;&#039;||[http://fritz.box:49000//x_webdavSCPD.xml x_webdavSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_webdavSCPD.pdf x_webdavSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_UPnP:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_upnp&#039;&#039;&#039;||[http://fritz.box:49000//x_upnpSCPD.xml x_upnpSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_upnp.pdf x_upnp.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_RemoteAccess:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_remote&#039;&#039;&#039;||[http://fritz.box:49000/x_remoteSCPD.xml x_remoteSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_remoteSCPD.pdf x_remoteSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_MyFritz:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_myfritz&#039;&#039;&#039;||[http://fritz.box:49000/x_myfritzSCPD.xml x_myfritzSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_myfritzSCPD.pdf x_myfritzSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_TAM:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_tam&#039;&#039;&#039;||[http://fritz.box:49000/x_tamSCPD.xml x_tamSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_tam.pdf x_tam.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_AppSetup:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_appsetup&#039;&#039;&#039;||[http://fritz.box:49000/x_homeautoSCPD.xml x_homeautoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_appsetupSCPD.pdf x_appsetupSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_Homeauto:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_homeauto&#039;&#039;&#039;||[http://fritz.box:49000/x_homeautoSCPD.xml x_homeautoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_homeautoSCPD.pdf x_homeautoSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WLANConfiguration:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wlanconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WLANConfiguration:2&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wlanconfig2&#039;&#039;&#039;||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WLANConfiguration:3&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wlanconfig3&#039;&#039;&#039;||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;Hosts:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;hosts&#039;&#039;&#039;||[http://fritz.box:49000/hostsSCPD.xml hostsSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/hostsSCPD.pdf hostsSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;LANEthernetInterfaceConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;lanethernetifcfg&#039;&#039;&#039;||[http://fritz.box:49000/lanifconfigSCPD.xml lanifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanifconfigSCPD.pdf lanifconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;LANHostConfigManagement:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;lanhostconfigmgm&#039;&#039;&#039;||[http://fritz.box:49000/lanhostconfigmgmSCPD.xml lanhostconfigmgmSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanhostconfigmgmSCPD.pdf lanhostconfigmgmSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANCommonInterfaceConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wancommonifconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wancommonifconfigSCPD.xml wancommonifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wancommonifconfigSCPD.pdf wancommonifconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANDSLInterfaceConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wandslifconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wandslifconfigSCPD.xml wandslifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wandslifconfigSCPD.pdf wandslifconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANDSLLinkConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wandsllinkconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wandsllinkconfigSCPD.xml wandsllinkconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wandsllinkconfigSCPD.pdf wandsllinkconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANEthernetLinkConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wanethlinkconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wanethlinkconfigSCPD.xml wanethlinkconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanethlinkconfigSCPD.pdf wanethlinkconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANPPPConnection:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wanpppconn1&#039;&#039;&#039;||[http://fritz.box:49000/wanpppconnSCPD.xml wanpppconnSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanpppconnSCPD.pdf wanpppconnSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANIPConnection:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wanipconnection1&#039;&#039;&#039;||[http://fritz.box:49000/wanipconnSCPD.xml wanipconnSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanipconnSCPD.pdf wanipconnSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Status-Symbol ===&lt;br /&gt;
&amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; devStateIcon .*on.*off:WLAN_on_gWLAN_off .*on.*on.*:WLAN_on_gWLAN_on WLAN..off.*:WLAN_off&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Verzeichnis www/images/default müssen die passenden Dateien &amp;quot;WLAN_on_gWLAN_off.png&amp;quot;, &amp;quot;WLAN_on_gWLAN_on.png&amp;quot; und &amp;quot;WLAN_off.png&amp;quot; liegen. Wenn die PNGs fehlen, können sie hier [http://forum.fhem.de/index.php/topic,29725.msg318113.html#msg318113] heruntergeladen werden.&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
[[Datei:Screenshot_FritzBox1.png|mini|300px|rechts|FRITZBOX Gerät auf der Fhem Oberfläche]]&lt;br /&gt;
Sollte alles geklappt haben, seht ihr nun unter &amp;quot;Unsortiert&amp;quot; den im nebenstehenden Screenshot gezeigten Eintrag für das &amp;quot;Gerät&amp;quot; (hier mit dem Icon &amp;quot;it_router&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== TR-064 Bespiele ===&lt;br /&gt;
&lt;br /&gt;
*Box Reboot: &amp;lt;code&amp;gt;get &amp;lt;device&amp;gt; tr064Command DeviceConfig:1 deviceconfig Reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Klingel- und Sprachausgabe per TR-064 ===&lt;br /&gt;
&lt;br /&gt;
Das geht derzeit nicht, da entsprechende Kommandos per TR-064 nicht verfügbar sind. Da Telnet sukzessive abgestellt wird, sollten sich Interessenten per Feature-Request an AVM wenden, wie hier [http://forum.fhem.de/index.php/topic,38586.0.html] beschrieben.&lt;br /&gt;
&lt;br /&gt;
=== Anwesenheitserkennung per TR-064 ===&lt;br /&gt;
&lt;br /&gt;
Siehe Links.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=29725|LinkText=Forenthread}} zu diesem Modul&lt;br /&gt;
* {{Link2Forum|Topic=39422|LinkText=Forenthread}} zur Anwesenheitserkennung mit diesem Modul&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FritzBox]] &lt;br /&gt;
&amp;lt;!-- (Modulkategorie wird automatisch gesetzt) --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Motivierte linke Hände</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Apptime&amp;diff=12026</id>
		<title>Apptime</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Apptime&amp;diff=12026"/>
		<updated>2015-08-20T12:26:20Z</updated>

		<summary type="html">&lt;p&gt;Motivierte linke Hände: Erklärungen der Ausgabewerte ergänzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:apptime}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Ausführungszeit von Applikationen (Modulen) protokollieren&lt;br /&gt;
|ModType=cmd&lt;br /&gt;
|ModCmdRef=apptime&lt;br /&gt;
|ModForumArea=Sonstiges&lt;br /&gt;
|ModTechName=98_apptime.pm&lt;br /&gt;
|ModOwner=Martin/martinp876 ({{Link2FU|251|Forum}}/[[Benutzer Diskussion:Martinp876|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Mit dem Befehl [[apptime]] wird das Protokollieren von Ausführungszeiten von Modulen und Funktionen gestartet. apptime hilft rauszufinden WER blockiert; [[perfmon]] ist der Indikator DASS ETWAS blockiert ({{Link2Forum|Topic=39253|Message=314155}}).&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
Keine.&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
=== Aktivieren ===&lt;br /&gt;
Die Überwachung der Ausführungszeiten wird mit dem Befehl &#039;&#039;apptime&#039;&#039; (einzugeben in das [[Konfiguration|Befehlseingabefeld]]) gestartet.&lt;br /&gt;
&lt;br /&gt;
=== Beenden ===&lt;br /&gt;
Um &#039;&#039;apptime&#039;&#039; zu beenden, muss Fhem neu gestartet werden.&lt;br /&gt;
&lt;br /&gt;
Die aufgelaufenen protokollierten Werte können mit dem Befehl &lt;br /&gt;
:&amp;lt;code&amp;gt;apptime clear&amp;lt;/code&amp;gt;&lt;br /&gt;
zurückgesetzt werden.&lt;br /&gt;
&lt;br /&gt;
=== Auswertung ===&lt;br /&gt;
Die von &#039;&#039;apptime&#039;&#039; protokollierten Informationen können durch Eingabe des Befehls&lt;br /&gt;
:&amp;lt;code&amp;gt;apptime&amp;lt;/code&amp;gt;&lt;br /&gt;
abgerufen werden. Ein (Beispiel!) Auszug aus der resultierenden Tabelle:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 name             function     max  count    total  average      maxDly &lt;br /&gt;
 myJee            JeeLink_Read 139     20      298    14.90      0 HASH(myJee) &lt;br /&gt;
 myCUL            CUL_Read      76      6      233    38.83      0 HASH(myCUL) &lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die Felder haben folgende Bedeutung:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 name:           Entity, für die es ausgeführt wird&lt;br /&gt;
                 Wenn &#039;tmr-&#039; vor dem Namen steht ist es durch einen Timer (InternalTimer) aufgerufen worden. &lt;br /&gt;
 funktion:       Name der Funktion, die ausgeführt wird&lt;br /&gt;
 param max call: Input-Parameter an die Funktion beim längsten Aufruf&lt;br /&gt;
 max:            maximale Laufzeit in ms&lt;br /&gt;
 count:          Anzahl der Aufrufe&lt;br /&gt;
 total:          akkumulierte Laufzeit der Funktion in ms&lt;br /&gt;
 average:        durchschnittliche Laufzeit (total/count) in ms. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Bitte beachten: der Parameter für die Sortierung nach Spalte &#039;&#039;function&#039;&#039; lautet &#039;&#039;fun&#039;&#039;&#039;k&#039;&#039;&#039;tion&#039;&#039;!}}&lt;br /&gt;
Durch Angabe eines Parameters &lt;br /&gt;
:&amp;lt;code&amp;gt;apptime [count|funktion|average|max|name|total]&amp;lt;/code&amp;gt;&lt;br /&gt;
wird die Tabelle nach den Werten der entsprechenden Spalte sortiert.&lt;br /&gt;
&lt;br /&gt;
Soll die komplette Tabelle ausgegeben werden, muss zusätzlich zum Spaltennamen noch der Parameter &#039;&#039;all&#039;&#039; angegeben werden (z.B.):&lt;br /&gt;
:&amp;lt;code&amp;gt;apptime count all&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Download von apptime.pm: [http://forum.fhem.de/index.php/topic,16103.msg111482.html#msg111482]&lt;/div&gt;</summary>
		<author><name>Motivierte linke Hände</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FRITZBOX&amp;diff=12025</id>
		<title>FRITZBOX</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FRITZBOX&amp;diff=12025"/>
		<updated>2015-08-20T10:25:12Z</updated>

		<summary type="html">&lt;p&gt;Motivierte linke Hände: Weitere Anpassung Migration telnet -&amp;gt; TR-064&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuerung einer Fritz!Box über Fhem&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=FRITZ!Box&lt;br /&gt;
|ModTechName=72_FRITZBOX.pm&lt;br /&gt;
|ModOwner=tupol/Topos ([http://forum.fhem.de/index.php?action=profile;u=5432 Forum] / [[Benutzer Diskussion:Topos|Wiki]])}}&lt;br /&gt;
&lt;br /&gt;
Das Modul [[FRITZBOX]] ermöglicht die Steuerung einer [[AVM Fritz!Box]] durch Fhem. Dabei kann es sich sowohl um eine FritzBox handeln, auf der Fhem selbst läuft (lokaler Modus), als auch um eine entfernte (externe) FritzBox.&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
=== Remote-Zugang ===&lt;br /&gt;
Für den Remote-Zugang müssen die Module JSON:XS, LWP und SOAP::Lite installiert sein; auf einem [[Raspberry Pi]] oder unter Ubuntu z.&amp;amp;nbsp;B. mit dem Befehl&lt;br /&gt;
:::&amp;lt;code&amp;gt;sudo apt-get install libjson-perl libwww-perl libsoap-lite-perl libjson-xs-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Teilweise ist derzeit zusätzlich die Installation der telnet Libraries erforderlich, auch wenn der Telnet-Zugang nicht genutzt werden soll. Siehe dazu den nachfolgenden Abschnitt.&lt;br /&gt;
&lt;br /&gt;
=== Telnet ===&lt;br /&gt;
Das Modul basierte ursprünglich auf dem Zugriff auf die Fritzbox per Telnet. Ab FRITZ!OS 6.2x baut AVM den abgekündigten Telnet-Zugang sowie die webcm-Schnittstelle sukzessive zurück bzw. hat dies, je nach Firmware, schon ganz abgestellt (siehe {{Link2Forum|Topic=38586|LinkText=dieses Forenthema}}). Der zukunftssichere Zugriff auf die Fritzbox sollte also per TR-064 erfolgen. Der Vollständigkeit halber und für ältere Firmwareversionen: &lt;br /&gt;
&lt;br /&gt;
# Wer den Zugang per Telnet (noch) nutzen (kann und) möchte, muss dies zuerst freischalten. Üblicherweise durch Eingabe von #96*7* an einem direkt an der entsprechenden FritzBox angeschlosssenen Telefon&lt;br /&gt;
&lt;br /&gt;
# Auf dem System, auf dem Fhem läuft ([[Systemübersicht#Server|Server]]) muss Telnet installiert sein; auf einem [[Raspberry Pi]] und unter Ubuntu z.&amp;amp;nbsp;B. mit dem Befehl&lt;br /&gt;
:::&amp;lt;code&amp;gt;sudo apt-get install libnet-telnet-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
=== Erste Schritte ===&lt;br /&gt;
Zur Erstinstallation reicht ein einfaches &amp;lt;code&amp;gt;define FritzBox FRITZBOX&amp;lt;/code&amp;gt;, dieses Modul funktioniert lokal (FHEM auf Fritzbox) sowie per Fernzugriff (FHEM auf einem anderen Server im Netz, siehe nächsten Schritt).&lt;br /&gt;
&lt;br /&gt;
==== TR-064: Modul FRITZBOX für Zugriff auf einem externen Server einrichten ====&lt;br /&gt;
Für den Fernzugriff über TR-064 sind die folgenden Schritte nötig:&lt;br /&gt;
&lt;br /&gt;
Fritzbox definieren:&lt;br /&gt;
:&amp;lt;code&amp;gt;define FritzBox FRITZBOX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn das Login auf der Benutzeroberfläche der FritzBox mit User und Passwort (und nicht nur per Passwort) geschieht, den User konfigurieren:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr Fritzbox boxUser &#039;&#039;Benutzername&#039;&#039; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Passwort konfigurieren:&lt;br /&gt;
:&amp;lt;code&amp;gt;set Fritzbox password &#039;&#039;Passwort&#039;&#039; &amp;lt;/code&amp;gt; - legt das zugehörige Passwort fest&lt;br /&gt;
&lt;br /&gt;
TR-064 Kommandos erlauben:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr Fritzbox allowTR064Command 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn die Fritzbox nicht unter http://fritz.box erreichbar ist, IP setzen:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr Fritzbox fritzBoxIP 192.168.168.168&amp;lt;/code&amp;gt;&lt;br /&gt;
(192.168.168.168 natürlich durch die passende IP ersetzen...) Manchmal ist ein Neustart von FHEM erforderlich, damit die Fritzbox mit der veränderten IP gefunden wird.&lt;br /&gt;
&lt;br /&gt;
==== Telnet: Modul FRITZBOX für Zugriff auf einem externen Server einrichten ====&lt;br /&gt;
[[Datei:Screenshot_FritzBox_TelnetUser.png|mini|300px|rechts|Anlegen des Attributs telnetUser]]&lt;br /&gt;
Bei Fernzugriff über Telnet sind weitere Schritte nötig:&lt;br /&gt;
# Telnet auf der Fritzbox freischalten (Tastenkombination #96*7* am angeschlossenen Telefon (auch FritzFon)&lt;br /&gt;
# TelnetUser definieren (wie im Screenshot gezeigt)&lt;br /&gt;
# Passwort zum Benutzer auf der Fritzbox definieren&lt;br /&gt;
&lt;br /&gt;
[[Datei:Screenshot_FritzBox_Passwort.png|mini|300px|rechts|Passwort definieren]]&lt;br /&gt;
&lt;br /&gt;
(bitte die Buttons {{Taste|set}} und {{Taste|attr}} bei der Definition der jeweiligen Einträge nicht vergessen)&lt;br /&gt;
&lt;br /&gt;
Wer stattdessen lieber das [[Konfiguration|Befehl-Eingabefeld]] verwendet:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;define FritzBox FRITZBOX&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;attr Fritzbox telnetUser &#039;&#039;Benutzername&#039;&#039; &amp;lt;/code&amp;gt; - legt den Benutzer fest&lt;br /&gt;
:&amp;lt;code&amp;gt;set Fritzbox password &#039;&#039;Passwort&#039;&#039; &amp;lt;/code&amp;gt; - legt das zugehörige Passwort fest&lt;br /&gt;
&lt;br /&gt;
Wer keinen User konfiguriert hat, kann das Feld &amp;quot;telnetUser&amp;quot; leer lassen.&lt;br /&gt;
&lt;br /&gt;
=== mögliche Fehlermeldungen ===&lt;br /&gt;
Sollte schon bei &amp;lt;code&amp;gt;define FritzBox FRITZBOX&amp;lt;/code&amp;gt; die Fehlermeldung kommen, dass dieses Modul nicht existiert, dann bitte prüfen, ob Fhem auf dem aktuellen Stand ist und ggf. [[Update|aktualisieren]].&lt;br /&gt;
&lt;br /&gt;
Kommt jetzt bei der erneuten Definition die Fehlermeldung &amp;lt;code&amp;gt;Error: Perl modul Net::Telnet is missing on this system&amp;lt;/code&amp;gt; bitte wie oben schon erwähnt den Befehl &lt;br /&gt;
:&amp;lt;code&amp;gt;sudo apt-get install libnet-telnet-perl&amp;lt;/code&amp;gt; &lt;br /&gt;
direkt per Telnet/SSH auf dem FHEM-Server ausführen und neu starten.&lt;br /&gt;
Sollte alles geklappt haben, seht ihr nun eure Fritzbox und könnt diverse Einstellungen manuell vornehmen und/oder automatisch vornehmen lassen.&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
=== Define ===&lt;br /&gt;
Siehe [http://fhem.de/commandref_DE.html#FRITZBOX commandref]&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
Siehe commandref&lt;br /&gt;
&lt;br /&gt;
=== TR-064 ===&lt;br /&gt;
Die offizielle Programmier-Schnittstelle der Fritz!Box läuft über das Protokoll TR-064.&lt;br /&gt;
&lt;br /&gt;
mit dem Attribute&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; allowTR064Command 1&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
kann man den Befehl&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;get &amp;lt;device&amp;gt; tr064Command &amp;lt;service&amp;gt; &amp;lt;control&amp;gt; &amp;lt;action&amp;gt; [[parameterName1 parameterValue1] ...]&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
freischalten und damit auf diese Schnittstelle zugreifen.&lt;br /&gt;
&lt;br /&gt;
AVM hat die Schnittstellenbeschreibung unter [http://avm.de/service/schnittstellen/] veröffentlicht. Ein weitere Einstiegspunkt befindet sich auch auf der Box unter http://fritz.box:49000/tr64desc.xml&lt;br /&gt;
&lt;br /&gt;
Folgende Service und Controls existieren (für den get-Befehl werden nur die fett formatierten Wörter benötigt)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!serviceType!!controlURL!!XML!!Dokument bei AVM&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;DeviceInfo:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;deviceinfo&#039;&#039;&#039;||[http://fritz.box:49000/deviceinfoSCPD.xml deviceinfoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/deviceinfoSCPD.pdf deviceinfoSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;DeviceConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;deviceconfig&#039;&#039;&#039;||[http://fritz.box:49000/deviceconfigSCPD.xml deviceconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/deviceconfigSCPD.pdf deviceconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;Layer3Forwarding:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;layer3forwarding&#039;&#039;&#039;||[http://fritz.box:49000//layer3forwardingSCPD.xml layer3forwardingSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/layer3forwardingSCPD.pdf layer3forwardingSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;LANConfigSecurity:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;lanconfigsecurity&#039;&#039;&#039;||[http://fritz.box:49000//lanconfigsecuritySCPD.xml lanconfigsecuritySCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanconfigsecuritySCPD.pdf lanconfigsecuritySCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;ManagementServer:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;mgmsrv&#039;&#039;&#039;||[http://fritz.box:49000//mgmsrvSCPD.xml mgmsrvSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/mgmsrvSCPD.pdf mgmsrvSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;Time:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;time&#039;&#039;&#039;||[http://fritz.box:49000//timeSCPD.xml timeSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/timeSCPD.pdf timeSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;UserInterface:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;userif&#039;&#039;&#039;||[http://fritz.box:49000//userifSCPD.xml userifSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/userifSCPD.pdf userifSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_VoIP:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_voip&#039;&#039;&#039;||[http://fritz.box:49000//x_voipSCPD.xml x_voipSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_voipSCPD.pdf x_voipSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_Storage:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_storage&#039;&#039;&#039;||[http://fritz.box:49000//x_storageSCPD.xml x_storageSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_storageSCPD.pdf x_storageSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_OnTel:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_contact&#039;&#039;&#039;||[http://fritz.box:49000//x_contactSCPD.xml x_contactSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_contactSCPD.pdf x_contactSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_WebDAVClient:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_webdav&#039;&#039;&#039;||[http://fritz.box:49000//x_webdavSCPD.xml x_webdavSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_webdavSCPD.pdf x_webdavSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_UPnP:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_upnp&#039;&#039;&#039;||[http://fritz.box:49000//x_upnpSCPD.xml x_upnpSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_upnp.pdf x_upnp.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_RemoteAccess:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_remote&#039;&#039;&#039;||[http://fritz.box:49000/x_remoteSCPD.xml x_remoteSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_remoteSCPD.pdf x_remoteSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_MyFritz:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_myfritz&#039;&#039;&#039;||[http://fritz.box:49000/x_myfritzSCPD.xml x_myfritzSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_myfritzSCPD.pdf x_myfritzSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_TAM:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_tam&#039;&#039;&#039;||[http://fritz.box:49000/x_tamSCPD.xml x_tamSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_tam.pdf x_tam.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_AppSetup:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_appsetup&#039;&#039;&#039;||[http://fritz.box:49000/x_homeautoSCPD.xml x_homeautoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_appsetupSCPD.pdf x_appsetupSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_Homeauto:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_homeauto&#039;&#039;&#039;||[http://fritz.box:49000/x_homeautoSCPD.xml x_homeautoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_homeautoSCPD.pdf x_homeautoSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WLANConfiguration:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wlanconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WLANConfiguration:2&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wlanconfig2&#039;&#039;&#039;||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WLANConfiguration:3&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wlanconfig3&#039;&#039;&#039;||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;Hosts:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;hosts&#039;&#039;&#039;||[http://fritz.box:49000/hostsSCPD.xml hostsSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/hostsSCPD.pdf hostsSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;LANEthernetInterfaceConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;lanethernetifcfg&#039;&#039;&#039;||[http://fritz.box:49000/lanifconfigSCPD.xml lanifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanifconfigSCPD.pdf lanifconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;LANHostConfigManagement:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;lanhostconfigmgm&#039;&#039;&#039;||[http://fritz.box:49000/lanhostconfigmgmSCPD.xml lanhostconfigmgmSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanhostconfigmgmSCPD.pdf lanhostconfigmgmSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANCommonInterfaceConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wancommonifconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wancommonifconfigSCPD.xml wancommonifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wancommonifconfigSCPD.pdf wancommonifconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANDSLInterfaceConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wandslifconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wandslifconfigSCPD.xml wandslifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wandslifconfigSCPD.pdf wandslifconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANDSLLinkConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wandsllinkconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wandsllinkconfigSCPD.xml wandsllinkconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wandsllinkconfigSCPD.pdf wandsllinkconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANEthernetLinkConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wanethlinkconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wanethlinkconfigSCPD.xml wanethlinkconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanethlinkconfigSCPD.pdf wanethlinkconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANPPPConnection:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wanpppconn1&#039;&#039;&#039;||[http://fritz.box:49000/wanpppconnSCPD.xml wanpppconnSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanpppconnSCPD.pdf wanpppconnSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANIPConnection:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wanipconnection1&#039;&#039;&#039;||[http://fritz.box:49000/wanipconnSCPD.xml wanipconnSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanipconnSCPD.pdf wanipconnSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Status-Symbol ===&lt;br /&gt;
&amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; devStateIcon .*on.*off:WLAN_on_gWLAN_off .*on.*on.*:WLAN_on_gWLAN_on WLAN..off.*:WLAN_off&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Verzeichnis www/images/default müssen die passenden Dateien &amp;quot;WLAN_on_gWLAN_off.png&amp;quot;, &amp;quot;WLAN_on_gWLAN_on.png&amp;quot; und &amp;quot;WLAN_off.png&amp;quot; liegen. Wenn die PNGs fehlen, können sie hier [http://forum.fhem.de/index.php/topic,29725.msg318113.html#msg318113] heruntergeladen werden.&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
[[Datei:Screenshot_FritzBox1.png|mini|300px|rechts|FRITZBOX Gerät auf der Fhem Oberfläche]]&lt;br /&gt;
Sollte alles geklappt haben, seht ihr nun unter &amp;quot;Unsortiert&amp;quot; den im nebenstehenden Screenshot gezeigten Eintrag für das &amp;quot;Gerät&amp;quot; (hier mit dem Icon &amp;quot;it_router&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== TR-064 Bespiele ===&lt;br /&gt;
&lt;br /&gt;
*Box Reboot: &amp;lt;code&amp;gt;get &amp;lt;device&amp;gt; tr064Command DeviceConfig:1 deviceconfig Reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Klingel- und Sprachausgabe per TR-064 ===&lt;br /&gt;
&lt;br /&gt;
Das geht derzeit nicht, da entsprechende Kommandos per TR-064 nicht verfügbar sind. Da Telnet sukzessive abgestellt wird, sollten sich Interessenten per Feature-Request an AVM wenden, wie hier [http://forum.fhem.de/index.php/topic,38586.0.html] beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=29725|LinkText=Forenthread}} zu diesem Modul&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FritzBox]] &lt;br /&gt;
&amp;lt;!-- (Modulkategorie wird automatisch gesetzt) --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Motivierte linke Hände</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FRITZBOX&amp;diff=12024</id>
		<title>FRITZBOX</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FRITZBOX&amp;diff=12024"/>
		<updated>2015-08-20T08:24:22Z</updated>

		<summary type="html">&lt;p&gt;Motivierte linke Hände: IP-Konfiguration bei nicht standardmäßiger Fritzbox-Konfiguration ergänzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuerung einer Fritz!Box über Fhem&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=FRITZ!Box&lt;br /&gt;
|ModTechName=72_FRITZBOX.pm&lt;br /&gt;
|ModOwner=tupol/Topos ([http://forum.fhem.de/index.php?action=profile;u=5432 Forum] / [[Benutzer Diskussion:Topos|Wiki]])}}&lt;br /&gt;
&lt;br /&gt;
Das Modul [[FRITZBOX]] ermöglicht die Steuerung einer [[AVM Fritz!Box]] durch Fhem. Dabei kann es sich sowohl um eine FritzBox handeln, auf der Fhem selbst läuft (lokaler Modus), als auch um eine entfernte (externe) FritzBox.&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
{{Randnotiz|RNTyp=Info|RNText=Bitte Einschränkungen des Moduls ab FRITZ!OS 6.25 und höher durch den Wegfall des Telnet-Zugangs und der webcm-Schnittstelle beachten (siehe {{Link2Forum|Topic=38586|LinkText=dieses Forenthema}})!}}&lt;br /&gt;
&lt;br /&gt;
Um das Modul für den Zugriff auf eine externe FritzBox benutzen zu können, muss &lt;br /&gt;
# Telnet auf der entsprechenden FritzBox erlaubt/freigeschaltet sein (üblicherweise durch Eingabe von #96*7* an einem direkt an der entsprechenden FritzBox angeschlosssenen Telefon) &lt;br /&gt;
# Auf dem System, auf dem Fhem läuft ([[Systemübersicht#Server|Server]]) muss Telnet installiert sein; auf einem [[Raspberry Pi]] und unter Ubuntu z.&amp;amp;nbsp;B. mit dem Befehl&lt;br /&gt;
:::&amp;lt;code&amp;gt;sudo apt-get install libnet-telnet-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
Für einen (begrenzten) Remote-Zugang ohne Telnet müssen die Module JSON:XS, LWP und SOAP::Lite installiert sein; auf einem [[Raspberry Pi]] oder unter Ubuntu z.&amp;amp;nbsp;B. mit dem Befehl&lt;br /&gt;
:::&amp;lt;code&amp;gt;sudo apt-get install libjson-perl libwww-perl libsoap-lite-perl libjson-xs-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
=== Erste Schritte ===&lt;br /&gt;
Zur Erstinstallation reicht ein einfaches &amp;lt;code&amp;gt;define FritzBox FRITZBOX&amp;lt;/code&amp;gt;, dieses Modul funktioniert lokal (FHEM auf Fritzbox) sowie per Fernzugriff(FHEM auf einem anderen Server im Netz, siehe nächsten Schritt).&lt;br /&gt;
&lt;br /&gt;
HINWEIS: Wie inzwischen schon an vielen Stellen zu lesen, wird mit neueren Firmware-Versionen für die FritzBox (seit ca. 6.2x) der Telnet-Zugang immer weiter eingeschränkt. Der zukunftssicherste Weg zum Zugriff auf die Fritzbox ist daher der Zugriff TR-064 (siehe unten).&lt;br /&gt;
&lt;br /&gt;
==== TR-064: Modul FRITZBOX für Zugriff auf einem externen Server einrichten ====&lt;br /&gt;
Für den Fernzugriff über TR-064 sind die folgenden Schritte nötig:&lt;br /&gt;
&lt;br /&gt;
Fritzbox definieren:&lt;br /&gt;
:&amp;lt;code&amp;gt;define FritzBox FRITZBOX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn das Login auf der Benutzeroberfläche der FritzBox mit User und Passwort (und nicht nur per Passwort) geschieht, den User konfigurieren:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr Fritzbox boxUser &#039;&#039;Benutzername&#039;&#039; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Passwort konfigurieren:&lt;br /&gt;
:&amp;lt;code&amp;gt;set Fritzbox password &#039;&#039;Passwort&#039;&#039; &amp;lt;/code&amp;gt; - legt das zugehörige Passwort fest&lt;br /&gt;
&lt;br /&gt;
TR-064 Kommandos erlauben:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr Fritzbox allowTR064Command 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn die Fritzbox nicht unter http://fritz.box erreichbar ist, IP setzen:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr Fritzbox fritzBoxIP 192.168.168.168&amp;lt;/code&amp;gt;&lt;br /&gt;
(192.168.168.168 natürlich durch die passende IP ersetzen...)&lt;br /&gt;
&lt;br /&gt;
==== Telnet: Modul FRITZBOX für Zugriff auf einem externen Server einrichten ====&lt;br /&gt;
[[Datei:Screenshot_FritzBox_TelnetUser.png|mini|300px|rechts|Anlegen des Attributs telnetUser]]&lt;br /&gt;
Bei Fernzugriff über Telnet sind weitere Schritte nötig:&lt;br /&gt;
# Telnet auf der Fritzbox freischalten (Tastenkombination #96*7* am angeschlossenen Telefon (auch FritzFon)&lt;br /&gt;
# TelnetUser definieren (wie im Screenshot gezeigt)&lt;br /&gt;
# Passwort zum Benutzer auf der Fritzbox definieren&lt;br /&gt;
&lt;br /&gt;
[[Datei:Screenshot_FritzBox_Passwort.png|mini|300px|rechts|Passwort definieren]]&lt;br /&gt;
&lt;br /&gt;
(bitte die Buttons {{Taste|set}} und {{Taste|attr}} bei der Definition der jeweiligen Einträge nicht vergessen)&lt;br /&gt;
&lt;br /&gt;
==== Telnet: ...für die Profis ====&lt;br /&gt;
(die Telnet auf ihrer FritzBox vermutlich ohnehin längst aktiviert haben)&lt;br /&gt;
&lt;br /&gt;
hier die Befehle für das [[Konfiguration|Befehl-Eingabefeld]]:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;define FritzBox FRITZBOX&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;attr Fritzbox telnetUser &#039;&#039;Benutzername&#039;&#039; &amp;lt;/code&amp;gt; - legt den Benutzer fest&lt;br /&gt;
:&amp;lt;code&amp;gt;set Fritzbox password &#039;&#039;Passwort&#039;&#039; &amp;lt;/code&amp;gt; - legt das zugehörige Passwort fest&lt;br /&gt;
&lt;br /&gt;
Wer keinen User konfiguriert hat, kann das Feld &amp;quot;telnetUser&amp;quot; leer lassen.&lt;br /&gt;
&lt;br /&gt;
=== mögliche Fehlermeldungen ===&lt;br /&gt;
Sollte schon bei &amp;lt;code&amp;gt;define FritzBox FRITZBOX&amp;lt;/code&amp;gt; die Fehlermeldung kommen, dass dieses Modul nicht existiert, dann bitte prüfen, ob Fhem auf dem aktuellen Stand ist und ggf. [[Update|aktualisieren]].&lt;br /&gt;
&lt;br /&gt;
Kommt jetzt bei der erneuten Definition die Fehlermeldung &amp;lt;code&amp;gt;Error: Perl modul Net::Telnet is missing on this system&amp;lt;/code&amp;gt; bitte wie oben schon erwähnt den Befehl &lt;br /&gt;
:&amp;lt;code&amp;gt;sudo apt-get install libnet-telnet-perl&amp;lt;/code&amp;gt; &lt;br /&gt;
direkt per Telnet/SSH auf dem FHEM-Server ausführen und neu starten.&lt;br /&gt;
Sollte alles geklappt haben, seht ihr nun eure Fritzbox und könnt diverse Einstellungen manuell vornehmen und/oder automatisch vornehmen lassen.&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
=== Define ===&lt;br /&gt;
Siehe [http://fhem.de/commandref_DE.html#FRITZBOX commandref]&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
Siehe commandref&lt;br /&gt;
&lt;br /&gt;
====Status-Symbol====&lt;br /&gt;
&amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; devStateIcon .*on.*off:WLAN_on_gWLAN_off .*on.*on.*:WLAN_on_gWLAN_on WLAN..off.*:WLAN_off&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Verzeichnis www/images/default müssen die passenden Dateien &amp;quot;WLAN_on_gWLAN_off.png&amp;quot;, &amp;quot;WLAN_on_gWLAN_on.png&amp;quot; und &amp;quot;WLAN_off.png&amp;quot; liegen. Wenn die PNGs fehlen, können sie hier [http://forum.fhem.de/index.php/topic,29725.msg318113.html#msg318113] heruntergeladen werden.&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
[[Datei:Screenshot_FritzBox1.png|mini|300px|rechts|FRITZBOX Gerät auf der Fhem Oberfläche]]&lt;br /&gt;
Sollte alles geklappt haben, seht ihr nun unter &amp;quot;Unsortiert&amp;quot; den im nebenstehenden Screenshot gezeigten Eintrag für das &amp;quot;Gerät&amp;quot; (hier mit dem Icon &amp;quot;it_router&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== TR-064 ==&lt;br /&gt;
Die offizielle Programmier-Schnittstelle der Fritz!Box läuft über das Protokoll TR-064.&lt;br /&gt;
&lt;br /&gt;
mit dem Attribute&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; allowTR064Command 1&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
kann man den Befehl&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;get &amp;lt;device&amp;gt; tr064Command &amp;lt;service&amp;gt; &amp;lt;control&amp;gt; &amp;lt;action&amp;gt; [[parameterName1 parameterValue1] ...]&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
freischalten und damit auf diese Schnittstelle zugreifen.&lt;br /&gt;
&lt;br /&gt;
AVM hat die Schnittstellenbeschreibung unter [http://avm.de/service/schnittstellen/] veröffentlicht. Ein weitere Einstiegspunkt befindet sich auch auf der Box unter http://fritz.box:49000/tr64desc.xml&lt;br /&gt;
&lt;br /&gt;
Folgende Service und Controls existieren (für den get-Befehl werden nur die fett formatierten Wörter benötigt)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!serviceType!!controlURL!!XML!!Dokument bei AVM&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;DeviceInfo:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;deviceinfo&#039;&#039;&#039;||[http://fritz.box:49000/deviceinfoSCPD.xml deviceinfoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/deviceinfoSCPD.pdf deviceinfoSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;DeviceConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;deviceconfig&#039;&#039;&#039;||[http://fritz.box:49000/deviceconfigSCPD.xml deviceconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/deviceconfigSCPD.pdf deviceconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;Layer3Forwarding:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;layer3forwarding&#039;&#039;&#039;||[http://fritz.box:49000//layer3forwardingSCPD.xml layer3forwardingSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/layer3forwardingSCPD.pdf layer3forwardingSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;LANConfigSecurity:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;lanconfigsecurity&#039;&#039;&#039;||[http://fritz.box:49000//lanconfigsecuritySCPD.xml lanconfigsecuritySCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanconfigsecuritySCPD.pdf lanconfigsecuritySCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;ManagementServer:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;mgmsrv&#039;&#039;&#039;||[http://fritz.box:49000//mgmsrvSCPD.xml mgmsrvSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/mgmsrvSCPD.pdf mgmsrvSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;Time:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;time&#039;&#039;&#039;||[http://fritz.box:49000//timeSCPD.xml timeSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/timeSCPD.pdf timeSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;UserInterface:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;userif&#039;&#039;&#039;||[http://fritz.box:49000//userifSCPD.xml userifSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/userifSCPD.pdf userifSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_VoIP:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_voip&#039;&#039;&#039;||[http://fritz.box:49000//x_voipSCPD.xml x_voipSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_voipSCPD.pdf x_voipSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_Storage:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_storage&#039;&#039;&#039;||[http://fritz.box:49000//x_storageSCPD.xml x_storageSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_storageSCPD.pdf x_storageSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_OnTel:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_contact&#039;&#039;&#039;||[http://fritz.box:49000//x_contactSCPD.xml x_contactSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_contactSCPD.pdf x_contactSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_WebDAVClient:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_webdav&#039;&#039;&#039;||[http://fritz.box:49000//x_webdavSCPD.xml x_webdavSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_webdavSCPD.pdf x_webdavSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_UPnP:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_upnp&#039;&#039;&#039;||[http://fritz.box:49000//x_upnpSCPD.xml x_upnpSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_upnp.pdf x_upnp.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_RemoteAccess:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_remote&#039;&#039;&#039;||[http://fritz.box:49000/x_remoteSCPD.xml x_remoteSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_remoteSCPD.pdf x_remoteSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_MyFritz:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_myfritz&#039;&#039;&#039;||[http://fritz.box:49000/x_myfritzSCPD.xml x_myfritzSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_myfritzSCPD.pdf x_myfritzSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_TAM:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_tam&#039;&#039;&#039;||[http://fritz.box:49000/x_tamSCPD.xml x_tamSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_tam.pdf x_tam.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_AppSetup:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_appsetup&#039;&#039;&#039;||[http://fritz.box:49000/x_homeautoSCPD.xml x_homeautoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_appsetupSCPD.pdf x_appsetupSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_Homeauto:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_homeauto&#039;&#039;&#039;||[http://fritz.box:49000/x_homeautoSCPD.xml x_homeautoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_homeautoSCPD.pdf x_homeautoSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WLANConfiguration:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wlanconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WLANConfiguration:2&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wlanconfig2&#039;&#039;&#039;||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WLANConfiguration:3&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wlanconfig3&#039;&#039;&#039;||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;Hosts:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;hosts&#039;&#039;&#039;||[http://fritz.box:49000/hostsSCPD.xml hostsSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/hostsSCPD.pdf hostsSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;LANEthernetInterfaceConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;lanethernetifcfg&#039;&#039;&#039;||[http://fritz.box:49000/lanifconfigSCPD.xml lanifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanifconfigSCPD.pdf lanifconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;LANHostConfigManagement:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;lanhostconfigmgm&#039;&#039;&#039;||[http://fritz.box:49000/lanhostconfigmgmSCPD.xml lanhostconfigmgmSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanhostconfigmgmSCPD.pdf lanhostconfigmgmSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANCommonInterfaceConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wancommonifconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wancommonifconfigSCPD.xml wancommonifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wancommonifconfigSCPD.pdf wancommonifconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANDSLInterfaceConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wandslifconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wandslifconfigSCPD.xml wandslifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wandslifconfigSCPD.pdf wandslifconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANDSLLinkConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wandsllinkconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wandsllinkconfigSCPD.xml wandsllinkconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wandsllinkconfigSCPD.pdf wandsllinkconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANEthernetLinkConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wanethlinkconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wanethlinkconfigSCPD.xml wanethlinkconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanethlinkconfigSCPD.pdf wanethlinkconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANPPPConnection:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wanpppconn1&#039;&#039;&#039;||[http://fritz.box:49000/wanpppconnSCPD.xml wanpppconnSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanpppconnSCPD.pdf wanpppconnSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANIPConnection:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wanipconnection1&#039;&#039;&#039;||[http://fritz.box:49000/wanipconnSCPD.xml wanipconnSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanipconnSCPD.pdf wanipconnSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TR-064 Bespiele ==&lt;br /&gt;
&lt;br /&gt;
*Box Reboot: &amp;lt;code&amp;gt;get &amp;lt;device&amp;gt; tr064Command DeviceConfig:1 deviceconfig Reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Klingel- und Sprachausgabe per TR-064 ==&lt;br /&gt;
&lt;br /&gt;
Das geht derzeit nicht, da entsprechende Kommandos per TR-064 nicht verfügbar sind. Da Telnet sukzessive abgestellt wird, sollten sich Interessenten per Feature-Request an AVM wenden, wie hier [http://forum.fhem.de/index.php/topic,38586.0.html] beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=29725|LinkText=Forenthread}} zu diesem Modul&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FritzBox]] &lt;br /&gt;
&amp;lt;!-- (Modulkategorie wird automatisch gesetzt) --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Motivierte linke Hände</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FRITZBOX&amp;diff=12023</id>
		<title>FRITZBOX</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FRITZBOX&amp;diff=12023"/>
		<updated>2015-08-20T07:42:22Z</updated>

		<summary type="html">&lt;p&gt;Motivierte linke Hände: Installationshinweise Ubuntu ergänzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuerung einer Fritz!Box über Fhem&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=FRITZ!Box&lt;br /&gt;
|ModTechName=72_FRITZBOX.pm&lt;br /&gt;
|ModOwner=tupol/Topos ([http://forum.fhem.de/index.php?action=profile;u=5432 Forum] / [[Benutzer Diskussion:Topos|Wiki]])}}&lt;br /&gt;
&lt;br /&gt;
Das Modul [[FRITZBOX]] ermöglicht die Steuerung einer [[AVM Fritz!Box]] durch Fhem. Dabei kann es sich sowohl um eine FritzBox handeln, auf der Fhem selbst läuft (lokaler Modus), als auch um eine entfernte (externe) FritzBox.&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
{{Randnotiz|RNTyp=Info|RNText=Bitte Einschränkungen des Moduls ab FRITZ!OS 6.25 und höher durch den Wegfall des Telnet-Zugangs und der webcm-Schnittstelle beachten (siehe {{Link2Forum|Topic=38586|LinkText=dieses Forenthema}})!}}&lt;br /&gt;
&lt;br /&gt;
Um das Modul für den Zugriff auf eine externe FritzBox benutzen zu können, muss &lt;br /&gt;
# Telnet auf der entsprechenden FritzBox erlaubt/freigeschaltet sein (üblicherweise durch Eingabe von #96*7* an einem direkt an der entsprechenden FritzBox angeschlosssenen Telefon) &lt;br /&gt;
# Auf dem System, auf dem Fhem läuft ([[Systemübersicht#Server|Server]]) muss Telnet installiert sein; auf einem [[Raspberry Pi]] und unter Ubuntu z.&amp;amp;nbsp;B. mit dem Befehl&lt;br /&gt;
:::&amp;lt;code&amp;gt;sudo apt-get install libnet-telnet-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
Für einen (begrenzten) Remote-Zugang ohne Telnet müssen die Module JSON:XS, LWP und SOAP::Lite installiert sein; auf einem [[Raspberry Pi]] oder unter Ubuntu z.&amp;amp;nbsp;B. mit dem Befehl&lt;br /&gt;
:::&amp;lt;code&amp;gt;sudo apt-get install libjson-perl libwww-perl libsoap-lite-perl libjson-xs-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
=== Erste Schritte ===&lt;br /&gt;
Zur Erstinstallation reicht ein einfaches &amp;lt;code&amp;gt;define FritzBox FRITZBOX&amp;lt;/code&amp;gt;, dieses Modul funktioniert lokal (FHEM auf Fritzbox) sowie per Fernzugriff(FHEM auf einem anderen Server im Netz, siehe nächsten Schritt).&lt;br /&gt;
&lt;br /&gt;
HINWEIS: Wie inzwischen schon an vielen Stellen zu lesen, wird mit neueren Firmware-Versionen für die FritzBox (seit ca. 6.2x) der Telnet-Zugang immer weiter eingeschränkt. Der zukunftssicherste Weg zum Zugriff auf die Fritzbox ist daher der Zugriff TR-064 (siehe unten).&lt;br /&gt;
&lt;br /&gt;
==== TR-064: Modul FRITZBOX für Zugriff auf einem externen Server einrichten ====&lt;br /&gt;
Für den Fernzugriff über TR-064 sind die folgenden Schritte nötig:&lt;br /&gt;
&lt;br /&gt;
Fritzbox definieren:&lt;br /&gt;
:&amp;lt;code&amp;gt;define FritzBox FRITZBOX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn das Login auf der Benutzeroberfläche der FritzBox mit User und Passwort (und nicht nur per Passwort) geschieht, den User konfigurieren:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr Fritzbox boxUser &#039;&#039;Benutzername&#039;&#039; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Passwort konfigurieren:&lt;br /&gt;
:&amp;lt;code&amp;gt;set Fritzbox password &#039;&#039;Passwort&#039;&#039; &amp;lt;/code&amp;gt; - legt das zugehörige Passwort fest&lt;br /&gt;
&lt;br /&gt;
TR-064 Kommandos erlauben:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr Fritzbox allowTR064Command 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Telnet: Modul FRITZBOX für Zugriff auf einem externen Server einrichten ====&lt;br /&gt;
[[Datei:Screenshot_FritzBox_TelnetUser.png|mini|300px|rechts|Anlegen des Attributs telnetUser]]&lt;br /&gt;
Bei Fernzugriff über Telnet sind weitere Schritte nötig:&lt;br /&gt;
# Telnet auf der Fritzbox freischalten (Tastenkombination #96*7* am angeschlossenen Telefon (auch FritzFon)&lt;br /&gt;
# TelnetUser definieren (wie im Screenshot gezeigt)&lt;br /&gt;
# Passwort zum Benutzer auf der Fritzbox definieren&lt;br /&gt;
&lt;br /&gt;
[[Datei:Screenshot_FritzBox_Passwort.png|mini|300px|rechts|Passwort definieren]]&lt;br /&gt;
&lt;br /&gt;
(bitte die Buttons {{Taste|set}} und {{Taste|attr}} bei der Definition der jeweiligen Einträge nicht vergessen)&lt;br /&gt;
&lt;br /&gt;
==== Telnet: ...für die Profis ====&lt;br /&gt;
(die Telnet auf ihrer FritzBox vermutlich ohnehin längst aktiviert haben)&lt;br /&gt;
&lt;br /&gt;
hier die Befehle für das [[Konfiguration|Befehl-Eingabefeld]]:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;define FritzBox FRITZBOX&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;attr Fritzbox telnetUser &#039;&#039;Benutzername&#039;&#039; &amp;lt;/code&amp;gt; - legt den Benutzer fest&lt;br /&gt;
:&amp;lt;code&amp;gt;set Fritzbox password &#039;&#039;Passwort&#039;&#039; &amp;lt;/code&amp;gt; - legt das zugehörige Passwort fest&lt;br /&gt;
&lt;br /&gt;
Wer keinen User konfiguriert hat, kann das Feld &amp;quot;telnetUser&amp;quot; leer lassen.&lt;br /&gt;
&lt;br /&gt;
=== mögliche Fehlermeldungen ===&lt;br /&gt;
Sollte schon bei &amp;lt;code&amp;gt;define FritzBox FRITZBOX&amp;lt;/code&amp;gt; die Fehlermeldung kommen, dass dieses Modul nicht existiert, dann bitte prüfen, ob Fhem auf dem aktuellen Stand ist und ggf. [[Update|aktualisieren]].&lt;br /&gt;
&lt;br /&gt;
Kommt jetzt bei der erneuten Definition die Fehlermeldung &amp;lt;code&amp;gt;Error: Perl modul Net::Telnet is missing on this system&amp;lt;/code&amp;gt; bitte wie oben schon erwähnt den Befehl &lt;br /&gt;
:&amp;lt;code&amp;gt;sudo apt-get install libnet-telnet-perl&amp;lt;/code&amp;gt; &lt;br /&gt;
direkt per Telnet/SSH auf dem FHEM-Server ausführen und neu starten.&lt;br /&gt;
Sollte alles geklappt haben, seht ihr nun eure Fritzbox und könnt diverse Einstellungen manuell vornehmen und/oder automatisch vornehmen lassen.&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
=== Define ===&lt;br /&gt;
Siehe [http://fhem.de/commandref_DE.html#FRITZBOX commandref]&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
Siehe commandref&lt;br /&gt;
&lt;br /&gt;
====Status-Symbol====&lt;br /&gt;
&amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; devStateIcon .*on.*off:WLAN_on_gWLAN_off .*on.*on.*:WLAN_on_gWLAN_on WLAN..off.*:WLAN_off&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Verzeichnis www/images/default müssen die passenden Dateien &amp;quot;WLAN_on_gWLAN_off.png&amp;quot;, &amp;quot;WLAN_on_gWLAN_on.png&amp;quot; und &amp;quot;WLAN_off.png&amp;quot; liegen. Wenn die PNGs fehlen, können sie hier [http://forum.fhem.de/index.php/topic,29725.msg318113.html#msg318113] heruntergeladen werden.&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
[[Datei:Screenshot_FritzBox1.png|mini|300px|rechts|FRITZBOX Gerät auf der Fhem Oberfläche]]&lt;br /&gt;
Sollte alles geklappt haben, seht ihr nun unter &amp;quot;Unsortiert&amp;quot; den im nebenstehenden Screenshot gezeigten Eintrag für das &amp;quot;Gerät&amp;quot; (hier mit dem Icon &amp;quot;it_router&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== TR-064 ==&lt;br /&gt;
Die offizielle Programmier-Schnittstelle der Fritz!Box läuft über das Protokoll TR-064.&lt;br /&gt;
&lt;br /&gt;
mit dem Attribute&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; allowTR064Command 1&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
kann man den Befehl&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;get &amp;lt;device&amp;gt; tr064Command &amp;lt;service&amp;gt; &amp;lt;control&amp;gt; &amp;lt;action&amp;gt; [[parameterName1 parameterValue1] ...]&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
freischalten und damit auf diese Schnittstelle zugreifen.&lt;br /&gt;
&lt;br /&gt;
AVM hat die Schnittstellenbeschreibung unter [http://avm.de/service/schnittstellen/] veröffentlicht. Ein weitere Einstiegspunkt befindet sich auch auf der Box unter http://fritz.box:49000/tr64desc.xml&lt;br /&gt;
&lt;br /&gt;
Folgende Service und Controls existieren (für den get-Befehl werden nur die fett formatierten Wörter benötigt)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!serviceType!!controlURL!!XML!!Dokument bei AVM&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;DeviceInfo:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;deviceinfo&#039;&#039;&#039;||[http://fritz.box:49000/deviceinfoSCPD.xml deviceinfoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/deviceinfoSCPD.pdf deviceinfoSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;DeviceConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;deviceconfig&#039;&#039;&#039;||[http://fritz.box:49000/deviceconfigSCPD.xml deviceconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/deviceconfigSCPD.pdf deviceconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;Layer3Forwarding:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;layer3forwarding&#039;&#039;&#039;||[http://fritz.box:49000//layer3forwardingSCPD.xml layer3forwardingSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/layer3forwardingSCPD.pdf layer3forwardingSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;LANConfigSecurity:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;lanconfigsecurity&#039;&#039;&#039;||[http://fritz.box:49000//lanconfigsecuritySCPD.xml lanconfigsecuritySCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanconfigsecuritySCPD.pdf lanconfigsecuritySCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;ManagementServer:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;mgmsrv&#039;&#039;&#039;||[http://fritz.box:49000//mgmsrvSCPD.xml mgmsrvSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/mgmsrvSCPD.pdf mgmsrvSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;Time:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;time&#039;&#039;&#039;||[http://fritz.box:49000//timeSCPD.xml timeSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/timeSCPD.pdf timeSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;UserInterface:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;userif&#039;&#039;&#039;||[http://fritz.box:49000//userifSCPD.xml userifSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/userifSCPD.pdf userifSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_VoIP:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_voip&#039;&#039;&#039;||[http://fritz.box:49000//x_voipSCPD.xml x_voipSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_voipSCPD.pdf x_voipSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_Storage:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_storage&#039;&#039;&#039;||[http://fritz.box:49000//x_storageSCPD.xml x_storageSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_storageSCPD.pdf x_storageSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_OnTel:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_contact&#039;&#039;&#039;||[http://fritz.box:49000//x_contactSCPD.xml x_contactSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_contactSCPD.pdf x_contactSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_WebDAVClient:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_webdav&#039;&#039;&#039;||[http://fritz.box:49000//x_webdavSCPD.xml x_webdavSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_webdavSCPD.pdf x_webdavSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_UPnP:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_upnp&#039;&#039;&#039;||[http://fritz.box:49000//x_upnpSCPD.xml x_upnpSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_upnp.pdf x_upnp.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_RemoteAccess:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_remote&#039;&#039;&#039;||[http://fritz.box:49000/x_remoteSCPD.xml x_remoteSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_remoteSCPD.pdf x_remoteSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_MyFritz:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_myfritz&#039;&#039;&#039;||[http://fritz.box:49000/x_myfritzSCPD.xml x_myfritzSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_myfritzSCPD.pdf x_myfritzSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_TAM:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_tam&#039;&#039;&#039;||[http://fritz.box:49000/x_tamSCPD.xml x_tamSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_tam.pdf x_tam.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_AppSetup:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_appsetup&#039;&#039;&#039;||[http://fritz.box:49000/x_homeautoSCPD.xml x_homeautoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_appsetupSCPD.pdf x_appsetupSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_Homeauto:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_homeauto&#039;&#039;&#039;||[http://fritz.box:49000/x_homeautoSCPD.xml x_homeautoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_homeautoSCPD.pdf x_homeautoSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WLANConfiguration:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wlanconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WLANConfiguration:2&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wlanconfig2&#039;&#039;&#039;||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WLANConfiguration:3&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wlanconfig3&#039;&#039;&#039;||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;Hosts:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;hosts&#039;&#039;&#039;||[http://fritz.box:49000/hostsSCPD.xml hostsSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/hostsSCPD.pdf hostsSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;LANEthernetInterfaceConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;lanethernetifcfg&#039;&#039;&#039;||[http://fritz.box:49000/lanifconfigSCPD.xml lanifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanifconfigSCPD.pdf lanifconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;LANHostConfigManagement:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;lanhostconfigmgm&#039;&#039;&#039;||[http://fritz.box:49000/lanhostconfigmgmSCPD.xml lanhostconfigmgmSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanhostconfigmgmSCPD.pdf lanhostconfigmgmSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANCommonInterfaceConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wancommonifconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wancommonifconfigSCPD.xml wancommonifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wancommonifconfigSCPD.pdf wancommonifconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANDSLInterfaceConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wandslifconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wandslifconfigSCPD.xml wandslifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wandslifconfigSCPD.pdf wandslifconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANDSLLinkConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wandsllinkconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wandsllinkconfigSCPD.xml wandsllinkconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wandsllinkconfigSCPD.pdf wandsllinkconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANEthernetLinkConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wanethlinkconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wanethlinkconfigSCPD.xml wanethlinkconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanethlinkconfigSCPD.pdf wanethlinkconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANPPPConnection:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wanpppconn1&#039;&#039;&#039;||[http://fritz.box:49000/wanpppconnSCPD.xml wanpppconnSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanpppconnSCPD.pdf wanpppconnSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANIPConnection:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wanipconnection1&#039;&#039;&#039;||[http://fritz.box:49000/wanipconnSCPD.xml wanipconnSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanipconnSCPD.pdf wanipconnSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TR-064 Bespiele ==&lt;br /&gt;
&lt;br /&gt;
*Box Reboot: &amp;lt;code&amp;gt;get &amp;lt;device&amp;gt; tr064Command DeviceConfig:1 deviceconfig Reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Klingel- und Sprachausgabe per TR-064 ==&lt;br /&gt;
&lt;br /&gt;
Das geht derzeit nicht, da entsprechende Kommandos per TR-064 nicht verfügbar sind. Da Telnet sukzessive abgestellt wird, sollten sich Interessenten per Feature-Request an AVM wenden, wie hier [http://forum.fhem.de/index.php/topic,38586.0.html] beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=29725|LinkText=Forenthread}} zu diesem Modul&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FritzBox]] &lt;br /&gt;
&amp;lt;!-- (Modulkategorie wird automatisch gesetzt) --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Motivierte linke Hände</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FRITZBOX&amp;diff=12021</id>
		<title>FRITZBOX</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FRITZBOX&amp;diff=12021"/>
		<updated>2015-08-19T12:45:59Z</updated>

		<summary type="html">&lt;p&gt;Motivierte linke Hände: Erste Anpassungen, um den Wiki-Artikel auf den aktuellen Stand zu bringen (Abschaltung Telnet auf Fritzboxen)...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuerung einer Fritz!Box über Fhem&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=FRITZ!Box&lt;br /&gt;
|ModTechName=72_FRITZBOX.pm&lt;br /&gt;
|ModOwner=tupol/Topos ([http://forum.fhem.de/index.php?action=profile;u=5432 Forum] / [[Benutzer Diskussion:Topos|Wiki]])}}&lt;br /&gt;
&lt;br /&gt;
Das Modul [[FRITZBOX]] ermöglicht die Steuerung einer [[AVM Fritz!Box]] durch Fhem. Dabei kann es sich sowohl um eine FritzBox handeln, auf der Fhem selbst läuft (lokaler Modus), als auch um eine entfernte (externe) FritzBox.&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
{{Randnotiz|RNTyp=Info|RNText=Bitte Einschränkungen des Moduls ab FRITZ!OS 6.25 und höher durch den Wegfall des Telnet-Zugangs und der webcm-Schnittstelle beachten (siehe {{Link2Forum|Topic=38586|LinkText=dieses Forenthema}})!}}&lt;br /&gt;
&lt;br /&gt;
Um das Modul für den Zugriff auf eine externe FritzBox benutzen zu können, muss &lt;br /&gt;
# Telnet auf der entsprechenden FritzBox erlaubt/freigeschaltet sein (üblicherweise durch Eingabe von #96*7* an einem direkt an der entsprechenden FritzBox angeschlosssenen Telefon) &lt;br /&gt;
# Auf dem System, auf dem Fhem läuft ([[Systemübersicht#Server|Server]]) muss Telnet installiert sein; auf einem [[Raspberry Pi]] z.&amp;amp;nbsp;B. mit dem Befehl&lt;br /&gt;
:::&amp;lt;code&amp;gt;sudo apt-get install libnet-telnet-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
Für einen (begrenzten) Remote-Zugang ohne Telnet müssen die Module JSON:XS, LWP und SOAP::Lite installiert sein; auf einem [[Raspberry Pi]] z.&amp;amp;nbsp;B. mit dem Befehl&lt;br /&gt;
:::&amp;lt;code&amp;gt;sudo apt-get install libjson-perl libwww-perl libsoap-lite-perl libjson-xs-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
=== Erste Schritte ===&lt;br /&gt;
Zur Erstinstallation reicht ein einfaches &amp;lt;code&amp;gt;define FritzBox FRITZBOX&amp;lt;/code&amp;gt;, dieses Modul funktioniert lokal (FHEM auf Fritzbox) sowie per Fernzugriff(FHEM auf einem anderen Server im Netz, siehe nächsten Schritt).&lt;br /&gt;
&lt;br /&gt;
HINWEIS: Wie inzwischen schon an vielen Stellen zu lesen, wird mit neueren Firmware-Versionen für die FritzBox (seit ca. 6.2x) der Telnet-Zugang immer weiter eingeschränkt. Der zukunftssicherste Weg zum Zugriff auf die Fritzbox ist daher der Zugriff TR-064 (siehe unten).&lt;br /&gt;
&lt;br /&gt;
==== TR-064: Modul FRITZBOX für Zugriff auf einem externen Server einrichten ====&lt;br /&gt;
Für den Fernzugriff über TR-064 sind die folgenden Schritte nötig:&lt;br /&gt;
&lt;br /&gt;
Fritzbox definieren:&lt;br /&gt;
:&amp;lt;code&amp;gt;define FritzBox FRITZBOX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn das Login auf der Benutzeroberfläche der FritzBox mit User und Passwort (und nicht nur per Passwort) geschieht, den User konfigurieren:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr Fritzbox boxUser &#039;&#039;Benutzername&#039;&#039; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Passwort konfigurieren:&lt;br /&gt;
:&amp;lt;code&amp;gt;set Fritzbox password &#039;&#039;Passwort&#039;&#039; &amp;lt;/code&amp;gt; - legt das zugehörige Passwort fest&lt;br /&gt;
&lt;br /&gt;
TR-064 Kommandos erlauben:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr Fritzbox allowTR064Command 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Telnet: Modul FRITZBOX für Zugriff auf einem externen Server einrichten ====&lt;br /&gt;
[[Datei:Screenshot_FritzBox_TelnetUser.png|mini|300px|rechts|Anlegen des Attributs telnetUser]]&lt;br /&gt;
Bei Fernzugriff über Telnet sind weitere Schritte nötig:&lt;br /&gt;
# Telnet auf der Fritzbox freischalten (Tastenkombination #96*7* am angeschlossenen Telefon (auch FritzFon)&lt;br /&gt;
# TelnetUser definieren (wie im Screenshot gezeigt)&lt;br /&gt;
# Passwort zum Benutzer auf der Fritzbox definieren&lt;br /&gt;
&lt;br /&gt;
[[Datei:Screenshot_FritzBox_Passwort.png|mini|300px|rechts|Passwort definieren]]&lt;br /&gt;
&lt;br /&gt;
(bitte die Buttons {{Taste|set}} und {{Taste|attr}} bei der Definition der jeweiligen Einträge nicht vergessen)&lt;br /&gt;
&lt;br /&gt;
==== Telnet: ...für die Profis ====&lt;br /&gt;
(die Telnet auf ihrer FritzBox vermutlich ohnehin längst aktiviert haben)&lt;br /&gt;
&lt;br /&gt;
hier die Befehle für das [[Konfiguration|Befehl-Eingabefeld]]:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;define FritzBox FRITZBOX&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;attr Fritzbox telnetUser &#039;&#039;Benutzername&#039;&#039; &amp;lt;/code&amp;gt; - legt den Benutzer fest&lt;br /&gt;
:&amp;lt;code&amp;gt;set Fritzbox password &#039;&#039;Passwort&#039;&#039; &amp;lt;/code&amp;gt; - legt das zugehörige Passwort fest&lt;br /&gt;
&lt;br /&gt;
Wer keinen User konfiguriert hat, kann das Feld &amp;quot;telnetUser&amp;quot; leer lassen.&lt;br /&gt;
&lt;br /&gt;
=== mögliche Fehlermeldungen ===&lt;br /&gt;
Sollte schon bei &amp;lt;code&amp;gt;define FritzBox FRITZBOX&amp;lt;/code&amp;gt; die Fehlermeldung kommen, dass dieses Modul nicht existiert, dann bitte prüfen, ob Fhem auf dem aktuellen Stand ist und ggf. [[Update|aktualisieren]].&lt;br /&gt;
&lt;br /&gt;
Kommt jetzt bei der erneuten Definition die Fehlermeldung &amp;lt;code&amp;gt;Error: Perl modul Net::Telnet is missing on this system&amp;lt;/code&amp;gt; bitte wie oben schon erwähnt den Befehl &lt;br /&gt;
:&amp;lt;code&amp;gt;sudo apt-get install libnet-telnet-perl&amp;lt;/code&amp;gt; &lt;br /&gt;
direkt per Telnet/SSH auf dem FHEM-Server ausführen und neu starten.&lt;br /&gt;
Sollte alles geklappt haben, seht ihr nun eure Fritzbox und könnt diverse Einstellungen manuell vornehmen und/oder automatisch vornehmen lassen.&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
=== Define ===&lt;br /&gt;
Siehe [http://fhem.de/commandref_DE.html#FRITZBOX commandref]&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
Siehe commandref&lt;br /&gt;
&lt;br /&gt;
====Status-Symbol====&lt;br /&gt;
&amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; devStateIcon .*on.*off:WLAN_on_gWLAN_off .*on.*on.*:WLAN_on_gWLAN_on WLAN..off.*:WLAN_off&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Verzeichnis www/images/default müssen die passenden Dateien &amp;quot;WLAN_on_gWLAN_off.png&amp;quot;, &amp;quot;WLAN_on_gWLAN_on.png&amp;quot; und &amp;quot;WLAN_off.png&amp;quot; liegen. Wenn die PNGs fehlen, können sie hier [http://forum.fhem.de/index.php/topic,29725.msg318113.html#msg318113] heruntergeladen werden.&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
[[Datei:Screenshot_FritzBox1.png|mini|300px|rechts|FRITZBOX Gerät auf der Fhem Oberfläche]]&lt;br /&gt;
Sollte alles geklappt haben, seht ihr nun unter &amp;quot;Unsortiert&amp;quot; den im nebenstehenden Screenshot gezeigten Eintrag für das &amp;quot;Gerät&amp;quot; (hier mit dem Icon &amp;quot;it_router&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== TR-064 ==&lt;br /&gt;
Die offizielle Programmier-Schnittstelle der Fritz!Box läuft über das Protokoll TR-064.&lt;br /&gt;
&lt;br /&gt;
mit dem Attribute&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; allowTR064Command 1&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
kann man den Befehl&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;get &amp;lt;device&amp;gt; tr064Command &amp;lt;service&amp;gt; &amp;lt;control&amp;gt; &amp;lt;action&amp;gt; [[parameterName1 parameterValue1] ...]&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
freischalten und damit auf diese Schnittstelle zugreifen.&lt;br /&gt;
&lt;br /&gt;
AVM hat die Schnittstellenbeschreibung unter [http://avm.de/service/schnittstellen/] veröffentlicht. Ein weitere Einstiegspunkt befindet sich auch auf der Box unter http://fritz.box:49000/tr64desc.xml&lt;br /&gt;
&lt;br /&gt;
Folgende Service und Controls existieren (für den get-Befehl werden nur die fett formatierten Wörter benötigt)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!serviceType!!controlURL!!XML!!Dokument bei AVM&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;DeviceInfo:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;deviceinfo&#039;&#039;&#039;||[http://fritz.box:49000/deviceinfoSCPD.xml deviceinfoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/deviceinfoSCPD.pdf deviceinfoSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;DeviceConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;deviceconfig&#039;&#039;&#039;||[http://fritz.box:49000/deviceconfigSCPD.xml deviceconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/deviceconfigSCPD.pdf deviceconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;Layer3Forwarding:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;layer3forwarding&#039;&#039;&#039;||[http://fritz.box:49000//layer3forwardingSCPD.xml layer3forwardingSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/layer3forwardingSCPD.pdf layer3forwardingSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;LANConfigSecurity:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;lanconfigsecurity&#039;&#039;&#039;||[http://fritz.box:49000//lanconfigsecuritySCPD.xml lanconfigsecuritySCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanconfigsecuritySCPD.pdf lanconfigsecuritySCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;ManagementServer:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;mgmsrv&#039;&#039;&#039;||[http://fritz.box:49000//mgmsrvSCPD.xml mgmsrvSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/mgmsrvSCPD.pdf mgmsrvSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;Time:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;time&#039;&#039;&#039;||[http://fritz.box:49000//timeSCPD.xml timeSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/timeSCPD.pdf timeSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;UserInterface:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;userif&#039;&#039;&#039;||[http://fritz.box:49000//userifSCPD.xml userifSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/userifSCPD.pdf userifSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_VoIP:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_voip&#039;&#039;&#039;||[http://fritz.box:49000//x_voipSCPD.xml x_voipSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_voipSCPD.pdf x_voipSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_Storage:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_storage&#039;&#039;&#039;||[http://fritz.box:49000//x_storageSCPD.xml x_storageSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_storageSCPD.pdf x_storageSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_OnTel:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_contact&#039;&#039;&#039;||[http://fritz.box:49000//x_contactSCPD.xml x_contactSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_contactSCPD.pdf x_contactSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_WebDAVClient:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_webdav&#039;&#039;&#039;||[http://fritz.box:49000//x_webdavSCPD.xml x_webdavSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_webdavSCPD.pdf x_webdavSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_UPnP:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_upnp&#039;&#039;&#039;||[http://fritz.box:49000//x_upnpSCPD.xml x_upnpSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_upnp.pdf x_upnp.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_RemoteAccess:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_remote&#039;&#039;&#039;||[http://fritz.box:49000/x_remoteSCPD.xml x_remoteSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_remoteSCPD.pdf x_remoteSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_MyFritz:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_myfritz&#039;&#039;&#039;||[http://fritz.box:49000/x_myfritzSCPD.xml x_myfritzSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_myfritzSCPD.pdf x_myfritzSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_TAM:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_tam&#039;&#039;&#039;||[http://fritz.box:49000/x_tamSCPD.xml x_tamSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_tam.pdf x_tam.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_AppSetup:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_appsetup&#039;&#039;&#039;||[http://fritz.box:49000/x_homeautoSCPD.xml x_homeautoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_appsetupSCPD.pdf x_appsetupSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_Homeauto:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_homeauto&#039;&#039;&#039;||[http://fritz.box:49000/x_homeautoSCPD.xml x_homeautoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_homeautoSCPD.pdf x_homeautoSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WLANConfiguration:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wlanconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WLANConfiguration:2&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wlanconfig2&#039;&#039;&#039;||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WLANConfiguration:3&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wlanconfig3&#039;&#039;&#039;||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;Hosts:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;hosts&#039;&#039;&#039;||[http://fritz.box:49000/hostsSCPD.xml hostsSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/hostsSCPD.pdf hostsSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;LANEthernetInterfaceConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;lanethernetifcfg&#039;&#039;&#039;||[http://fritz.box:49000/lanifconfigSCPD.xml lanifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanifconfigSCPD.pdf lanifconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;LANHostConfigManagement:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;lanhostconfigmgm&#039;&#039;&#039;||[http://fritz.box:49000/lanhostconfigmgmSCPD.xml lanhostconfigmgmSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanhostconfigmgmSCPD.pdf lanhostconfigmgmSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANCommonInterfaceConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wancommonifconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wancommonifconfigSCPD.xml wancommonifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wancommonifconfigSCPD.pdf wancommonifconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANDSLInterfaceConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wandslifconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wandslifconfigSCPD.xml wandslifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wandslifconfigSCPD.pdf wandslifconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANDSLLinkConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wandsllinkconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wandsllinkconfigSCPD.xml wandsllinkconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wandsllinkconfigSCPD.pdf wandsllinkconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANEthernetLinkConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wanethlinkconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wanethlinkconfigSCPD.xml wanethlinkconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanethlinkconfigSCPD.pdf wanethlinkconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANPPPConnection:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wanpppconn1&#039;&#039;&#039;||[http://fritz.box:49000/wanpppconnSCPD.xml wanpppconnSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanpppconnSCPD.pdf wanpppconnSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANIPConnection:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wanipconnection1&#039;&#039;&#039;||[http://fritz.box:49000/wanipconnSCPD.xml wanipconnSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanipconnSCPD.pdf wanipconnSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TR-064 Bespiele ==&lt;br /&gt;
&lt;br /&gt;
*Box Reboot: &amp;lt;code&amp;gt;get &amp;lt;device&amp;gt; tr064Command DeviceConfig:1 deviceconfig Reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Klingel- und Sprachausgabe per TR-064 ==&lt;br /&gt;
&lt;br /&gt;
Das geht derzeit nicht, da entsprechende Kommandos per TR-064 nicht verfügbar sind. Da Telnet sukzessive abgestellt wird, sollten sich Interessenten per Feature-Request an AVM wenden, wie hier [http://forum.fhem.de/index.php/topic,38586.0.html] beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=29725|LinkText=Forenthread}} zu diesem Modul&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FritzBox]] &lt;br /&gt;
&amp;lt;!-- (Modulkategorie wird automatisch gesetzt) --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Motivierte linke Hände</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=1-Wire_Busverlegung&amp;diff=11517</id>
		<title>1-Wire Busverlegung</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=1-Wire_Busverlegung&amp;diff=11517"/>
		<updated>2015-06-20T14:37:11Z</updated>

		<summary type="html">&lt;p&gt;Motivierte linke Hände: Kabelbelegung ergänzt.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Kabeltypen ==&lt;br /&gt;
Es kann eine Vielzahl von Kabeltypen verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Eine Abschirmung sollte möglichst immer vorhanden sein, ist aber nicht zwingend notwendig. Die Verwendung dieser Abschirmung als Nutzleitung ist eher ungünstig, sie sollte vielmehr einseitig (!) an Masse=GND angeschlossen sein.&lt;br /&gt;
&lt;br /&gt;
Anforderungen an den Durchmesser der einzelnen Adern werden durch den Stromverbrauch der 1-Wire-Komponenten bestimmt. Hat man nur Temperatursensoren etc., reichen 0.6 mm vollständig aus, das Kabel könnte sogar noch dünner sein (z.B. um es unauffällig unter Tapeten zu verlegen). Wenn Aktoren, LEDs, oder sonstige echte Stromverbraucher auf dem Bus sitzen, sollten 0.8 mm Aderdurchmesser vorgesehen werden.&lt;br /&gt;
&lt;br /&gt;
Die Frequenzen, die über diese Kabel transportiert werden müssen, liegen im niederfrequenten Bereich (Anstiegs- und Abfallzeit der Impulse bei ca. 20-30 Mikrosekunden). Abrupte Veränderungen des Kabeldurchmessers oder der Kabelart führen immer immer zu Sprüngen der Impedanz (Wellenwiderstand) und damit zur Reflexion, die sich in einer Verschlechterung der Impulsqualität bemerkbar macht. Es ist daher zu empfehlen, nicht zu viele solche Wechsel auf dem Weg zum Sensor/Aktor einzubauen.&lt;br /&gt;
&lt;br /&gt;
*Für parasitär (d.h. aus der Datenleitung) versorgte Sensoren und Aktoren reichen 2 Adern = 1 Aderpaar vollständig aus (Datenleitung und Masse=GND)&lt;br /&gt;
*Für Sensoren und Aktoren mit echter Spannungsversorgung ist eine dritte Ader mit +5V vorzusehen. Wenn ein externes Netzteil verwendet wird, ist zu beachten, dass GND des Netzteils auch mit GND des Busmasters verbunden werden muss.&lt;br /&gt;
*Für größere Netze ist zu beachten, dass keine Sterntopologie entsteht: Zwei längere Kabel (d.h., länger als 3,5 m) an einem Busmaster erfordern dann, dass das eines der beiden Kabel als Hin- + Rückleitung ausgelegt wird, das erfordert dann also 4 Adern = 2 Aderpaare. Siehe hierzu den unten stehenden Abschnitt&lt;br /&gt;
&lt;br /&gt;
=== Netzwerkkabel ===&lt;br /&gt;
Hierbei handelt es sich typischerweise um STP(Shielded Twisted Pair)-Kabel mit 8 Adern, 4x2x0.8mm bis zu 4x2x0.1mm für extra flache Kabel. Ein &#039;&#039;Twisted Pair&#039;&#039; weist über seine Länge eine einigermaßen homogene Impedanz auf, um diese nicht zu stören, sind zu kleine Biegeradien zu vermeiden&lt;br /&gt;
=== Brandmeldekabel ===&lt;br /&gt;
Dieses Kabel hat unterschiedliche Anzahl von Aderpaaren, z.B. 2x2x0.8mm, aber auch 2x3, 2x4 oder gar 2x5 Aderpaare; die äußere Farbe ist rot. Kosten ab 0,40 €/m.&lt;br /&gt;
=== EIB/KNX Buskabel ===&lt;br /&gt;
Dieses Kabel hat 4 Adern 2x2x0.8mm und ist mit einem Folienschirm geschirmt, die äußere Farbe ist meist grün. Kosten ab 0,40 €/m. Die 4. Ader kann entweder zur Datenrückleitung verwendet werden, oder eine weitere Spannung (z.B. 12 V) zu Aktoren (z.B. Relais) transportieren.&lt;br /&gt;
=== Geschirmtes Fernmeldekabel ===&lt;br /&gt;
Dieses Kabel hat 4 Adern 2x2x0.6mm und ist mit einem Folienschirm geschirmt, die äußere Farbe ist meist grau. Kosten ab 0,20 €/m. Die 4. Ader kann entweder zur Datenrückleitung verwendet werden, oder eine weitere Spannung (z.B. 12 V) zu Aktoren (z.B. Relais) transportieren.&lt;br /&gt;
=== Geschirmtes NF-Kabel ===&lt;br /&gt;
Auch als Mikrofonkabel verkauft, zwei Innenleiter in gemeinsamer Abschirmung. Diese wird dann als 3. Leiter verwendet. Das Kabel ist sehr flexibel und daher besonders für den mobilen Anschluss von Sensoren/Aktoren geeignet. Bewährt hat sich dies für kurze &#039;&#039;Stubs&#039;&#039; (max. 3.5 m), mit denen Sensoren/Aktoren an den Bus angeschlossen werden. Hierfür gibt es preisgünstige Kabelenden mit angegossenem 3.5 mm Klinkenstecker.&lt;br /&gt;
&lt;br /&gt;
Auch kommerziell erhältliche Busmaster, wie der USB9097, haben solche Klinkenbuchsen. (Foto folgt)&lt;br /&gt;
&lt;br /&gt;
=== Ungeschirmtes 3-adriges Kabel===&lt;br /&gt;
Prinzipiell auch geeignet, sorgt aber bei großen Leitungslängen für eine gewisse Störanfälligkeit. Bei Abzweigungen oder für kurze &#039;&#039;Stubs&#039;&#039; aber problemlos verwendbar.&lt;br /&gt;
&lt;br /&gt;
Bei eBay sind preisgünstige 1-Wire Temperatursensoren in wasserdichtem Gehäuse erhältlich, die mit einem solchen Kabelende versehen sind.&lt;br /&gt;
===Belegung===&lt;br /&gt;
Es muss ausdrücklich betont werden, dass für die Belegung der Adern keine wie auch immer geartete Norm existiert. Die nachfolgenden Farbcodierungen sind lediglich Beispiele.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! Typ !! style=&amp;quot;width:5em;&amp;quot;|GND &amp;lt;br /&amp;gt;Masse !! style=&amp;quot;width:5em;&amp;quot;|VDD &amp;lt;br /&amp;gt;+5V !! style=&amp;quot;width:5em;&amp;quot;|1-Wire &amp;lt;br /&amp;gt;Data !! style=&amp;quot;width:5em;&amp;quot;|1-Wire &amp;lt;br /&amp;gt;Return !! Bemerkung / &amp;lt;br /&amp;gt; Vorgabe durch&lt;br /&gt;
|-&lt;br /&gt;
| Fernmeldekabel || style=&amp;quot;color:white;background:#000000&amp;quot;|sw || style=&amp;quot;color:white;background:red&amp;quot;|rt || style=&amp;quot;background:yellow&amp;quot;|ge || style=&amp;quot;background:white&amp;quot;|ws&lt;br /&gt;
|-&lt;br /&gt;
| Mikrofonkabel || style=&amp;quot;background:white&amp;quot;|ws&amp;lt;br /&amp;gt;(schwarz) || style=&amp;quot;color:white;background:#AAAAAA&amp;quot;|Schirm&amp;lt;br /&amp;gt;(rot) || style=&amp;quot;color:white;background:red&amp;quot;|rt&amp;lt;br /&amp;gt;(gelb) || style=&amp;quot;color:white;background:grey&amp;quot;| -- || Busmaster USB9097&amp;lt;br /&amp;gt;(Sensoren mit Klinkenstecker)&lt;br /&gt;
|-&lt;br /&gt;
| Ungeschirmtes&amp;lt;br /&amp;gt;3-adriges Kabel || style=&amp;quot;color:white;background:green&amp;quot;|gn || style=&amp;quot;color:white;background:red&amp;quot;|rt || style=&amp;quot;background:yellow&amp;quot;|ge || style=&amp;quot;color:white;background:grey&amp;quot;| -- || Kommerzielle&amp;lt;br /&amp;gt; Sensoren &lt;br /&gt;
|-&lt;br /&gt;
| Netzwerkkabel || style=&amp;quot;background:white&amp;quot;|blau-weiß&amp;lt;br /&amp;gt;orange-weiß || style=&amp;quot;color:black;background:#FAB514&amp;quot;|orange || style=&amp;quot;color:white;background:blue&amp;quot;|blau || style=&amp;quot;color:white;background:grey&amp;quot;| n. def. || LinkUSB(i)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Anm. zum Mikrofonkabel: Die Werte in Klammern geben die Belegung bei (einigen) kommerziell erhältlichen Sensoren wieder (z.B. 1WAD_5V), bei denen der Anschluss an den 1-Wire-Bus über Klinkenstecker funktioniert.&lt;br /&gt;
&lt;br /&gt;
== Verbindung verschiedener Kabeltypen ==&lt;br /&gt;
[[Datei:Connectionbox.jpg|mini|links|Connectionbox (geöffnet)]] &lt;br /&gt;
[[Datei:Connectionbox unten.jpg|mini|rechts|Connectionbox Platinenunterseite (paarweise Verbindung der Adern)]]&lt;br /&gt;
Gute Erfahrungen wurden gemacht mit &#039;&#039;CAT 5 Connection Boxes&#039;&#039; für Netzwerkkabel, die für ca. 1,50€ z.B. bei Reichelt erhältlich sind. Voraussetzung für die Verwendung ist allerdings der Besitz eines &#039;&#039;LSA-Anlegewerkzeuges&#039;&#039; (ca. 6 €). Da meist nur 4 Adern benötigt werden, können die insgesamt 8 Adern auf der Unterseite paarweise verbunden werden. Dafür sollte man möglichst den gleichen Aderdurchmesser verwenden, wie er in der Zu- und Ableitung auftritt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt; &lt;br /&gt;
==Topologie==&lt;br /&gt;
Maßgebliches Whitepaper für &#039;&#039;&#039;große Kabellängen&#039;&#039;&#039; ist das von Maxim herausgegebene Tutorial [http://pdfserv.maximintegrated.com/en/an/AN148.pdf Guidelines for Reliable Long 1-Wire Networks]. &lt;br /&gt;
&lt;br /&gt;
Die Kabellänge bis zum entferntesten Sensor kann bis zu 100 m betragen. Typischerweise werden die einzelnen 1-Wire-Komponenten an eine zentrale Busleitung über so genannte &#039;&#039;Stubs&#039;&#039; (kurze Kabelenden) angeschlossen, diese sollten nicht länger als 3.5 m sein. Die gleiche Beschränkung der Leitungslänge gilt, wenn alle 1-Wire Komponenten sternförmig zusammengeführt werden (Sterntopologie).&lt;br /&gt;
&lt;br /&gt;
Bei Kabellängen von mehr als 3.5 m sollte immer eine lineare Topologie eingehalten werden (bis auf die &#039;&#039;Stubs&#039;&#039;), gegebenenfalls ist die Datenleitung (&#039;&#039;&#039;nicht&#039;&#039;&#039; Masse und Stromversorgung) als Hin- und Rückleitung vorzusehen.&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;250&amp;quot; caption=&amp;quot;1-Wire Topologien&amp;quot; mode=&amp;quot;packed&amp;quot;&amp;gt;&lt;br /&gt;
1-wire_T1.png|Sterntopologie&lt;br /&gt;
1-wire_T2.png|Lineare Topologie&lt;br /&gt;
1-wire_T3.png|Lineare Topologie mit sternförmiger Anordnung einzelner Gruppen&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Pullup==&lt;br /&gt;
Maßgebliches Whitepaper für die Frage eines &#039;&#039;&#039;Pullup&#039;&#039;&#039;-Widerstandes, der bei gewissen Operationen den Datenbus mit mehr Strom versorgt, ist das von Maxim herausgegebene Tutorial [http://pdfserv.maximintegrated.com/en/an/AN4255.pdf How to Power the Extended Features of 1-Wire Devices]. &lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Informationen zum Aufbau des 1-Wire Bus [http://shop.wiregate.de/1-wire-bus]&lt;br /&gt;
* Weitere Informationen zum Aufbau des 1-Wire Bus [http://www.fuchs-shop.com/de/howto/linkfamily/]&lt;br /&gt;
[[Kategorie:1-Wire]]&lt;/div&gt;</summary>
		<author><name>Motivierte linke Hände</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FHEM2FHEM&amp;diff=11333</id>
		<title>FHEM2FHEM</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FHEM2FHEM&amp;diff=11333"/>
		<updated>2015-05-25T12:00:04Z</updated>

		<summary type="html">&lt;p&gt;Motivierte linke Hände: Ergänzung watchdog-Überwachung von FHEM2FHEM Verbindung&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:FHEM2FHEM}} &lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Hilfsmodul, um mehrere Fhem-Installationen zu verbinden&lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModForumArea=Automatisierung&lt;br /&gt;
|ModTechName=93_FHEM2FHEM.pm&lt;br /&gt;
|ModOwner=rudolfkoenig ([http://forum.fhem.de/index.php?action=profile;u=8 Forum] / [[Benutzer Diskussion:Rudolfkoenig|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
[[FHEM2FHEM]] ist ein Hilfsmodul mit dem mehrere Fhem-Installationen -auch auf verschiedenen Rechnern- verbunden werden können&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
{{Todo|Fehlerkontrolle, Formatierung, Ergänzungen aus dem Forum, Bedeutung des Attributs dummy, Ergänzung &#039;&#039;Bekannte Probleme&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
== Features / Funktionen ==&lt;br /&gt;
Dieses Modul bietet zwei grundsätzlich unterschiedliche Funktionsmöglichkeiten: &lt;br /&gt;
# Es kann alle Ereignisse (Events) von einem entfernten (remote) host abgreifen und an die lokale FHEM Instanz zur Weiterverarbeitung weiterreichen.&lt;br /&gt;
# Es kann die unaufbereitete Ereignisse (raw messages) von einem entfernten (remote) host und bestimmten Interfaces abgreifen und an die lokale FHEM Instanz weiterreichen.&lt;br /&gt;
&lt;br /&gt;
Die Kommunikation ist unidirektional bzw. die Daten werden auf der lokalen Instanz von einer entfernten Instanz abgegriffen. Ein Element vom Type FHEM2FHEM wird auf der lokalen Instanz definiert.&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
&lt;br /&gt;
Beispiele für die Anwendung sind&lt;br /&gt;
* zur Verteilung der Interfaces auf mehrere FHEM Instanzen, &lt;br /&gt;
** Da an einer Hardwareinstanz ggf. zu wenig USB-Ports vorhanden sind, um stabil betrieben werden zu könne (z.B. RPi).&lt;br /&gt;
** Um eine zeitkritische und eine weniger zeitkritische Hardwareinstanz zu betreiben, da bestimmte Module die FHEM Instanz für eine gewisse Zeit verzögern können (Verzögerungen verursachen z.B. disconnects des HMLan beim keepalive).&lt;br /&gt;
** Um die Hauptinstanz von bestimmten Verarbeitungsschritten der Events zu entlasten, obwohl man hier zunächst untersuchen sollte, ob die Verarbeitung nicht eleganter und weniger Prozessorintensiv ausgeführt werden kann. &lt;br /&gt;
* Um längere örtliche Distanzen zu überbrücken, &lt;br /&gt;
** da z.B. die Funkreichweite bestimmter Signale für einen stabilen Betrieb zu gering ist.&lt;br /&gt;
** da ein Sensor nur lokal betrieben werden kann und die Distanz zur Hauptinstanz zu groß ist, z.B. bei direkt per USB an der Hardware Instanz angeschlossen Sensoren (CO2/VOC-Sensor)&lt;br /&gt;
* etc.&lt;br /&gt;
&lt;br /&gt;
Lokale und remote FHEM-Instanz sind über ein Netzwerk verbunden.&lt;br /&gt;
&lt;br /&gt;
=== Definition ===&lt;br /&gt;
&lt;br /&gt;
Die Definition erfolgt über&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define &amp;lt;name&amp;gt; FHEM2FHEM &amp;lt;host&amp;gt;[:&amp;lt;portnr&amp;gt;][:SSL] [LOG:regexp|RAW:devicename] {portpassword} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Parameter ====&lt;br /&gt;
&lt;br /&gt;
Die Parameter der Definition beziehen sich auf die Verbindung zur entfernten FHEM-Instanz, zum Type der übernommenen Events und auf das Postpasswort, falls bei der entfernten FHEM-Instanz vergeben.&lt;br /&gt;
&lt;br /&gt;
===== &amp;lt;host&amp;gt;[:&amp;lt;portnr&amp;gt;][:SSL] =====&lt;br /&gt;
&lt;br /&gt;
Über &amp;lt;host&amp;gt; ist die IP-Adresse der entfernten FHEM-Instanz zu definieren. Die Portnummer bezieht dich auf die Nummer der Telnetschnittstelle, wie sie auf der entfernten Instanz vergeben ist. Falls nicht explizit verändert, ist diese Nummer standardmäßig 7072. Der letzte Zusatz :SSL muss angegeben werden, wenn die entfernte Instanz eine SSL-verschlüsselte Kommunikation voraussetzt. Ist dieses der Fall, muss auch auf dem lokalen Host das Perl-Modul IO::Socket::SSL installiert sein.&lt;br /&gt;
&lt;br /&gt;
===== [LOG:regexp|RAW:devicename] =====&lt;br /&gt;
Der nächste Parameter spezifiziert den Verbindungs-Typ:&lt;br /&gt;
; LOG&lt;br /&gt;
Bei Verwendung dieses Verbindungstyps werden alle Ereignisse (Events) der entfernten FHEM-Instanz empfangen. Die Ereignisse sehen aus wie die, die nach dem &amp;lt;code&amp;gt;inform on&amp;lt;/code&amp;gt; Befehl erzeugt werden. Sie können wie lokale Ereignisse durch FileLog oder notify genutzt werden und mit einem regulären Ausdruck gefiltert werden. Die Syntax dafür ist unter der notify-Definition beschrieben.&lt;br /&gt;
&lt;br /&gt;
Einschränkungen: Geräte der entfernten FHEM-Instanz werden über autocreate lokal nicht automatisch angelegt und können weder mit list angezeigt noch lokal angesprochen werden. &lt;br /&gt;
&lt;br /&gt;
Falls auf beiden FHEM-Installationen Geräte mit gleichem Namen angelegt wurden und die Geräte auch beide dasselbe Ereignis empfangen können (z.B. wenn an beiden Installationen CULs angeschlossen sind), werden logischer Weise alle FileLogs und notifys doppelt, einmal über das lokale Ereignis, einmal über das remote Ereignis ausgelöst.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; RAW&lt;br /&gt;
Bei diesem Verbindungstyp werden unaufbereitete Ereignisse (raw messages) des remote FHEM-Geräts devicename genau so empfangen, als wäre das Gerät lokal verbunden.&lt;br /&gt;
&lt;br /&gt;
Einschränkungen: Nur Geräte, welche die &amp;quot;Dispatch-Funktion&amp;quot; unterstützen (CUL, FHZ, CM11, SISPM, RFXCOM, TCM, TRX, TUL), erzeugen raw messages. Für jedes entfernte Gerät, von dem raw messages abgegriffen werden sollen, muss ein eigenes FHEM2FHEM Objekt definiert werden. Dabei ist darauf zu achten, dass der angegebene Name für &amp;lt;code&amp;gt;devicename &amp;lt;/code&amp;gt; gleichlautend ist, wie der Devicename auf der entfernten FHEM-Instanz. &lt;br /&gt;
&lt;br /&gt;
Zusätzlich der Definition des FHEM2FHEM Elements, muss für das übernommene Geräte auf der lokalen Instanz ein Dummygerät gleichen Typs, d.h. als device-node &amp;quot;none&amp;quot; definiert werden. An dieses Dummygerät werden alle raw messages von FHME2FHEM weitergeleitet, weshalb auch alle notwendigen Attribute lokal für dieses Dummygerät gesetzt sein müssen (z.B. rfmode, wenn die remote CUL im HomeMatic-Modus läuft).&lt;br /&gt;
Die Verwendung bereits bestehender lokaler Geräte für die Weiterverarbeitung des raw messages ist zu vermeiden, weil sonst die Duplikatsfilterung nicht richtig funktioniert (siehe dupTimeout).&lt;br /&gt;
&lt;br /&gt;
Komponenten, die über das Dummygerät erkannt werden, werden über autocreate automatisch angelegt.&lt;br /&gt;
&lt;br /&gt;
===== {portpassword} =====&lt;br /&gt;
&lt;br /&gt;
Falls ein Portpasswort auf der entfernten FHEM-Instanz gesetzt ist, übergibt dieser Parameter das entsprechende Passwort.&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
&lt;br /&gt;
==== dummy ====&lt;br /&gt;
???&lt;br /&gt;
&lt;br /&gt;
==== disable ====&lt;br /&gt;
&lt;br /&gt;
Deaktiviert die Verbindung.&lt;br /&gt;
&lt;br /&gt;
==== disableForIntervals ====&lt;br /&gt;
&lt;br /&gt;
Das Attribut ist eine leerzeichengetrennte Liste von Minuszeichen- getrennten HH:MM Paaren. Falls die aktuelle Uhrzeit zwischen diesen Werten fällt, dann wird die Ausführung, wie beim disable, ausgesetzt. Eine genaue Beschreibung findet sich in der commandref des Moduls &amp;lt;code&amp;gt;at&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Set ===&lt;br /&gt;
&lt;br /&gt;
==== reopen ====&lt;br /&gt;
&lt;br /&gt;
Öffnet die Verbindung erneut.&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
&lt;br /&gt;
* Zwei FHEM-Instanzen verbunden über ein Netzwerk mit der Möglichkeit, von der einen (lokal) auf den Telnetport der anderen (entfernte/remote) zuzugreifen zu können.&lt;br /&gt;
* Aktivierter Telnetport der entfernten FHEM-Instanz. Diese ist standardmäßig aktiviert.&lt;br /&gt;
* Fall das Perl-Modul für die SSL-Verschlüsselung nicht installiert sein, so kann dieses je nach Platform z.B. über folgenden Befehl nachinstalliert werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libwww-perl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
=== Type LOG ===&lt;br /&gt;
&lt;br /&gt;
==== Verbindung von 2 Fritzboxen ====&lt;br /&gt;
&lt;br /&gt;
Ich habe lange gesucht, wie ich FHEM2FHEM einsetzen kann. Das folgende habe ich mir (Danke an  Rübezahl) von den entsprechenden Seiten zusammengeklaubt:&lt;br /&gt;
&lt;br /&gt;
Code FritzBox 1 (entfernte Instanz):&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define forwardRemote dummy&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Code FritzBox 2 (lokale Instanz):&lt;br /&gt;
 define Remoteserver FHEM2FHEM 192.168.178.1:7072 LOG:.*&lt;br /&gt;
&lt;br /&gt;
 define executeRemote notify forwardRemote {fhem &amp;quot;%&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
Gast-WLAN bei beiden Boxen ausschalten (siehe Beitrag &amp;quot;Fritzbox: WLAN ein/ausschalten&amp;quot;, Dummys, notifys und 99_myUtils_irgendwas.pm müssen natürlich auf beiden Boxen vorhanden sein):&lt;br /&gt;
&lt;br /&gt;
Aufruf FritzBox 1:&lt;br /&gt;
 fhem(&amp;quot;set D_G_WLAN off&amp;quot;);;fhem(&amp;quot;set forwardRemote set D_G_WLAN off&amp;quot;);;&lt;br /&gt;
&lt;br /&gt;
==== Weitergabe von Events ====&lt;br /&gt;
&lt;br /&gt;
An eine Fritzbox (entfernte Instanz) ist ein RFXtrx433 angeschlossen. Die Events der erkannten Geräte, in diesem Falle ein Strommesser Revolt-5461 und ein Temperatur- und Feuchtigkeitssensor TFA 30.3150 sollen auf der Hauptinstanz (lokale Instanz) zur Verfügung stehen. Darüber hinaus wird auf der Fritzbox noch der Spritpreis abgerufen, dessen Events ebenfalls auf der Hauptinstanz zur Verfügung stehen sollen.&lt;br /&gt;
&lt;br /&gt;
; Definition auf der entfernten Instanz&lt;br /&gt;
Auf der Fritzbox sind die Komponenten ganz normal definiert und loggen in mehrere Filelogs.&lt;br /&gt;
Der Telnetport ist standardmäßig auf 7072 definiert.&lt;br /&gt;
Es ist keine SSL Verschlüsselung aktiviert und kein Passwort vergeben.&lt;br /&gt;
&lt;br /&gt;
; Definition auf der lokalen Instanz&lt;br /&gt;
Die Definition lautet wie folgt, wobei für die Regexp die Readings, die übernommen werden sollen, filtert.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define FHEM_on_FB FHEM2FHEM 192.168.1.10:7072 LOG:.*(SuperE[0-9]|temperature|humidity|battery|voltage|energy_power|state).*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit auf der lokalen Instanz die Geräte dargestellt werden können und nicht nur die Daten in der Datenbank landen, wurden entsprechende Dummies und dazu passende Notfies definiert.&lt;br /&gt;
&lt;br /&gt;
Für den Revolt-5461 &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define KU_Ofen_r dummy&lt;br /&gt;
attr KU_Ofen_r DbLogExclude .*&lt;br /&gt;
&lt;br /&gt;
define KU_Ofen_notify notify KU_Ofen { $EVENT=~s/://;;;; fhem(&amp;quot;setreading KU_Ofen_r $EVENT&amp;quot;);;;; my $KU_Ofen_P= ReadingsVal(&amp;quot;KU_Ofen_r&amp;quot;,&amp;quot;energy_power&amp;quot;,0) ;;;; my $KU_Ofen_V= ReadingsVal(&amp;quot;KU_Ofen_r&amp;quot;,&amp;quot;voltage&amp;quot;,0) ;;;; fhem(&amp;quot;setreading KU_Ofen_r state P: $KU_Ofen_P V: $KU_Ofen_V&amp;quot;) }&lt;br /&gt;
attr KU_Ofen_notify DbLogExclude .*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für den Spritpreismonitor&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Shell_r dummy&lt;br /&gt;
attr Shell DbLogExclude .*&lt;br /&gt;
&lt;br /&gt;
define Shell_notify notify Shell { $EVENT=~s/://;;;; fhem(&amp;quot;setreading Shell_r $EVENT&amp;quot;) ;;;; my $Shell_SE10= ReadingsVal(&amp;quot;Shell_r&amp;quot;,&amp;quot;SuperE10&amp;quot;,0) ;;;; my $Shell_SE5= ReadingsVal(&amp;quot;Shell_r&amp;quot;,&amp;quot;SuperE5&amp;quot;,0) ;;;; fhem(&amp;quot;setreading Shell_r state S_E10: $Shell_SE10 S_E5: $Shell_SE5&amp;quot;)}&lt;br /&gt;
attr Shell_notify DbLogExclude .*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für den TFA 30.3150&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Aussen_Temp_Hum_r dummy&lt;br /&gt;
attr Aussen_Temp_Hum DbLogExclude .*&lt;br /&gt;
&lt;br /&gt;
define Aussen_Temp_Hum_notify notify Aussen_Temp_Hum { $EVENT=~s/://;;;; fhem(&amp;quot;setreading Aussen_Temp_Hum_r $EVENT&amp;quot;) ;;;; my $Aussen_Temp_Hum_T= ReadingsVal(&amp;quot;Aussen_Temp_Hum_r&amp;quot;,&amp;quot;temperature&amp;quot;,0) ;;;; my $Aussen_Temp_Hum_H= ReadingsVal(&amp;quot;Aussen_Temp_Hum_r&amp;quot;,&amp;quot;humidity&amp;quot;,0) ;;;; my $Aussen_Temp_Hum_D= ReadingsVal(&amp;quot;Aussen_Temp_Hum_r&amp;quot;,&amp;quot;dewpoint&amp;quot;,0) ;;;; fhem(&amp;quot;setreading Aussen_Temp_Hum_r state T: $Aussen_Temp_Hum_T H: $Aussen_Temp_Hum_H D: $Aussen_Temp_Hum_D&amp;quot;)}&lt;br /&gt;
attr Aussen_Temp_Hum_notify DbLogExclude .*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Logging in die Datenbank funktioniert bereits direkt über die FHEM2FHEM Definition. Für das Logging in Filelogs müssten diese wie üblich definiert werden.&lt;br /&gt;
Damit die dummies und die notifies keine Extraeinträge in der Datenbank produzieren, wurde das Attribut DbLogExclude mit der Regexp &amp;lt;code&amp;gt;.*&amp;lt;/code&amp;gt; gesetzt.&lt;br /&gt;
Die Notfies lösen jeweils 2 Aktionen aus&lt;br /&gt;
# Schreiben der Readings in das Dummy, wobei der zusätzliche Doppelpunkt übersprungen wird.&lt;br /&gt;
# Zusammensammeln der wichtigsten Werte und schreiben des Readings &amp;quot;state&amp;quot; des Dummy&lt;br /&gt;
&lt;br /&gt;
=== Type RAW ===&lt;br /&gt;
&lt;br /&gt;
==== Weitergabe eines Interfaces ====&lt;br /&gt;
&lt;br /&gt;
An eine Fritzbox (entfernte Instanz) ist ein RFXtrx433 angeschlossen. Alle raw messages sollen auf einer weiteren Hauptinstanz zur Verfügung stehen. Vom RFTtrx433 werden messages von einem Strommesser Revolt-5461 und einem Temperatur- und Feuchtigkeitssensor TFA 30.3150 empfangen.&lt;br /&gt;
&lt;br /&gt;
; Definition auf der entfernten Instanz&lt;br /&gt;
Auf der Fritzbox ist das Interface RFXtrx433 mit dem Namen RFXTRX_on_FB definiert.&lt;br /&gt;
Der Telnetport ist standardmäßig auf 7072 definiert.&lt;br /&gt;
Es ist keine SSL Verschlüsselung aktiviert und kein Passwort vergeben.&lt;br /&gt;
&lt;br /&gt;
; Definition auf der lokalen Instanz&lt;br /&gt;
Die Definition lautet wie folgt, wobei hinter RAW: der Name des abgegriffenen Interfaces angegeben wird.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define FHEM_on_FB FHEM2FHEM 192.168.1.10:7072 RAW:RFXTRX_on_FB&lt;br /&gt;
attr FHEM_on_FB DbLogExclude .*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusätzlich wird ein Dummygerät benötigt, das wie ein lokales Interface agiert.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define RFXTRX_on_FB TRX none 0000&lt;br /&gt;
attr RFXTRX_on_FB dummy 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In dieser Konfiguration werden die Komponenten an der Fritzbox auf der lokalen Instanz als neue Geräte erkannt mit dem IODev RFXTRX_on_FB.&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
Bei auf Dummies gespiegelten Komponenten und einfachem notify/setreading (Type LOG), &lt;br /&gt;
* erhalten die Readings einen zusätzlichen Doppelpunkt (Abhilfe: siehe Beispiel bzw. Links)&lt;br /&gt;
* muss das Reading &amp;quot;state&amp;quot; explizit geschrieben werden. Sonst zeigt der Status des Dummy nur &amp;quot;???&amp;quot; (Abhilfe: siehe Beispiel)&lt;br /&gt;
* FHEM2FHEM stellt nicht immer neue Verbindung hier, wenn das entfernte FHEM stromlos gemacht wurde oder sich anderweitig &amp;quot;unfreundlich&amp;quot; verabschiedet hat. Lösung, Watchdog auf dem Hauptsystem, wie [http://forum.fhem.de/index.php/topic,20654.0 hier] beschrieben. Dabei kann inzwischen statt &amp;quot;modify&amp;quot; auch ein &amp;quot;set &amp;lt;name&amp;gt; reopen&amp;quot; verwendet werden.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
* Lässt sich der entfernte Host anpingen?&lt;br /&gt;
* Lässt sich vom lokalen Host auf der Kommandozeile auf die Telnet-Schnittstelle der entfernten FHEM-Instanz zugreifen?&lt;br /&gt;
* Welche Meldungen stehen im Logfile nach einem Restart und dem Versuch des Verbindungsaufbaus zur entfernten FHEM-Instanz?&lt;br /&gt;
* Mögliche Fehler beim Loggen&lt;br /&gt;
** Tauchen die Messages im Event Monitor der lokalen Instanz auf?&lt;br /&gt;
** etc.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
Doppelpunkt hinter den Readings im Dummy [http://forum.fhem.de/index.php/topic,20766.msg143244.html#msg143244]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== sonstiges ==&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Motivierte linke Hände</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=OWServer_%26_OWDevice&amp;diff=11328</id>
		<title>OWServer &amp; OWDevice</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=OWServer_%26_OWDevice&amp;diff=11328"/>
		<updated>2015-05-24T06:57:36Z</updated>

		<summary type="html">&lt;p&gt;Motivierte linke Hände: Update zum Kompilieren der aktuellen owfs-Version mit USB-Unterstützung für den Raspi&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
Bei OWServer handelt es sich um eine 1-Wire Server Komponente und bei OWDevice um eine Geräte-Komponente, die die angeschlossenen Module definiert-&lt;br /&gt;
Die Module benötigen die Serverkomponente von [http://www.owfs.org OWFS].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wichtig:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Module sind eine eigenständige Möglichkeit, den 1-Wire Bus anzusteuern und kommen ohne die Module aus, deren Namen aus Großbuchstaben bestehen (wie OWX, OWSWITCH, OWTHERM, etc.). &lt;br /&gt;
Umgekehrt können die Module OWSWITCH, OWTHERM, etc. auch mit dem Backendmodul OWServer zusammenarbeiten, siehe dazu die commandref der betreffenden Module.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Vorbereitung==&lt;br /&gt;
&lt;br /&gt;
Wie oben erwähnt, setzt OWServer/OWDevice auf OWFS auf. Dazu ist eine funktionierende OWFS Installation notwendig. Die Installation ist auf der selben Plattform (Debian-based) möglich oder auch Remote (zBsp Dockstar oder RPi). Eine gute [http://owfs.org/index.php?page=standard-devices Liste der Standard Devices]auf der Homepage von OWFS einzusehen. Nicht alle Standard Devices sind in OWDevice verfügbar (siehe unten).Wenn OWFS funktioniert kann&#039;s weiter gehen...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===owfs Pakete installieren===&lt;br /&gt;
&lt;br /&gt;
1) entweder sind die Pakete bereits vorpaketiert und man muss nur das [http://owfs.davromaniak.eu/ Repository] noch in /etc/apt/sources.list eintragen&lt;br /&gt;
&lt;br /&gt;
2) oder man muss selber kompilieren ([http://www.navitron.org.uk/forum/index.php?topic=12604.msg151750#msg151750 Quelle]). Version 3.1p0 von owfs lässt sich derzeit für den Raspberry Pi mit USB-Unterstützung nur kompilieren, wenn man einiges in den Make-Files patcht, wie [https://www.mail-archive.com/owfs-developers@lists.sourceforge.net/msg11484.html hier] beschrieben.&lt;br /&gt;
&lt;br /&gt;
Eine ältere, kompilierte Version für den RaspberryPi kann hier heruntergeladen werden: [http://forum.fhem.de/index.php?action=dlattach;topic=12219.0;attach=2463 owfs_2.8p17-1_all.zip]&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;sudo apt-get install automake autoconf autotools-dev gcc g++ libtool libusb-dev fuse-utils libfuse-dev swig python-dev tcl-dev php5-dev&lt;br /&gt;
sudo apt-get install git git-buildpackage dh-make quilt php5-cli&lt;br /&gt;
git clone [git://git.debian.org/collab-maint/owfs.git git://git.debian.org/collab-maint/owfs.git] git&lt;br /&gt;
git-buildpackage -uc -us&lt;br /&gt;
cd ..&lt;br /&gt;
sudo dpkg -i ./owserver_2.8p7+cvs20110310-1_i386.deb ./libow-2.8-7_2.8p7+cvs20110310-1_i386.deb ./owfs-common_2.8p7+cvs20110310-1_all.deb&lt;br /&gt;
sudo dpkg -i ./owhttpd_2.8p7+cvs20110310-1_i386.deb&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
diese Pakete wurden alle gebaut:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;libow-2.8-7_2.8p7+cvs20110310-1_i386.deb   owfs-common_2.8p7+cvs20110310-1_all.deb&lt;br /&gt;
libowcapi-2.8-7_2.8p7+cvs20110310-1_i386.deb owfs-dbg_2.8p7+cvs20110310-1_i386.deb&lt;br /&gt;
libow-dev_2.8p7+cvs20110310-1_i386.deb    owfs-doc_2.8p7+cvs20110310-1_all.deb&lt;br /&gt;
libownet-2.8-7_2.8p7+cvs20110310-1_i386.deb  owfs-fuse_2.8p7+cvs20110310-1_i386.deb&lt;br /&gt;
libownet-dev_2.8p7+cvs20110310-1_i386.deb   owftpd_2.8p7+cvs20110310-1_i386.deb&lt;br /&gt;
libownet-perl_2.8p7+cvs20110310-1_all.deb   owhttpd_2.8p7+cvs20110310-1_i386.deb&lt;br /&gt;
libownet-php_2.8p7+cvs20110310-1_all.deb   owserver_2.8p7+cvs20110310-1_i386.deb&lt;br /&gt;
libow-perl_2.8p7+cvs20110310-1_i386.deb    ow-shell_2.8p7+cvs20110310-1_i386.deb&lt;br /&gt;
libow-php5_2.8p7+cvs20110310-1_i386.deb    python-ow_2.8p7+cvs20110310-1_i386.deb&lt;br /&gt;
libow-tcl_2.8p7+cvs20110310-1_i386.deb    python-ownet_2.8p7+cvs20110310-1_all.deb&lt;br /&gt;
owfs_2.8p7+cvs20110310-1_all.deb&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) In aktuellen Versionen von Raspbian sind die notwendigen Pakete für Version 2.8p15 schon in den konfigurierten Quellen vorhanden. Es reicht ein&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get install owserver ow-shell owhttpd owftpd&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Unterstütze Geräte===&lt;br /&gt;
Eine aktuelle Liste der von OWDevice unterstützen Geräte findet man im [http://fhem.de/commandref.html#OWDevice FHEM-Commandref].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Konfiguration von owserver==&lt;br /&gt;
&lt;br /&gt;
Folgendes ist eine beispielhafte Konfiguration für OWFS mit einem am USB-Port angeschlossenen [http://denkovi.com/usb-to-one-wire-interface-adaptor-converter-thermometer Denkovi-Adapter] (Klon von DS9097U).&lt;br /&gt;
&lt;br /&gt;
Es ist praktisch, dem Adapter ein festes Device zuzuordnen. Dazu legt man in /etc/udev/rules.d/ eine Datei 11-onewire.rules mit folgendem Inhalt an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;ATTRS{idVendor}==&amp;quot;0403&amp;quot;, ATTRS{idProduct}==&amp;quot;6001&amp;quot;, ATTRS{serial}==&amp;quot;DAE001nq&amp;quot;, SUBSYSTEMS==&amp;quot;usb&amp;quot;, ACTION==&amp;quot;add&amp;quot;, MODE=&amp;quot;0660&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;, SYMLINK+=&amp;quot;onewire&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Einstöpseln des USB-Kabels vom Adapter wird über die Seriennummer DAE001nq des USB-Wandlers auf dem Adapter das Gerät erkannt und der Symlink /dev/onewire auf das eigentliche USB-Gerät (z.B. /dev/ttyUSB1) erstellt.&lt;br /&gt;
&lt;br /&gt;
Eine Minimalkonfiguration für /etc/owfs.conf ist&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;server: device = /dev/onewire&lt;br /&gt;
http: port = 2121&lt;br /&gt;
ftp: port = 2120&lt;br /&gt;
server: port = 4304&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es ist sinnvoll, owhttpd installiert und laufen zu haben, um über die URL http://deinRaspberryPi:2121 zu sehen, dass owserver läuft und die Geräte am 1-wire-Bus erkennt.&lt;br /&gt;
&lt;br /&gt;
==Konfiguration in FHEM==&lt;br /&gt;
Als erstes definiert man OWServer. Hiermit wird ein logischer OWServer definiert, auf welchem OWFS installiert ist&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define &amp;amp;lt;name&amp;amp;gt; OWServer &amp;amp;lt;protocol&amp;amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;amp;lt;protocol&amp;amp;gt; hat das Format &amp;amp;lt;hostname&amp;amp;gt;:&amp;amp;lt;port&amp;amp;gt;.&lt;br /&gt;
&lt;br /&gt;
zBsp:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define myOWServer OWServer 192.168.14.100:4304&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
oder wenn sich OWFS auf dem gleichen Server befindet wie FHEM:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define myOWServer OWServer localhost:4304&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Nach erfolgreichem &amp;quot;define&amp;quot; ist ein Klick auf den &amp;quot;Save&amp;quot; Button notwenig. Wenn nun der Status von myOWServer auf &amp;quot;Initialized&amp;quot; steht, ist der Server verbunden. Um sicher zu sein, dass der OWServer funktioniert, kann eine manuelle Abfrage der Device durchgeführt werden mit:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;get myOWServer devices&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Danach werden sämtliche angeschlossene Geräte angezeigt, inkl. Busmaster&lt;br /&gt;
&lt;br /&gt;
===OWServer Set Befehle===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;set &amp;amp;lt;name&amp;amp;gt; &amp;amp;lt;value&amp;amp;gt;&lt;br /&gt;
value:&lt;br /&gt;
timeout/directory&lt;br /&gt;
timeout/ftp&lt;br /&gt;
timeout/ha7&lt;br /&gt;
timeout/network&lt;br /&gt;
timeout/presence&lt;br /&gt;
timeout/serial&lt;br /&gt;
timeout/server&lt;br /&gt;
timeout/stable&lt;br /&gt;
timeout/uncached&lt;br /&gt;
timeout/usb&lt;br /&gt;
timeout/volatile&lt;br /&gt;
timeout/w1&lt;br /&gt;
units/pressure_scale&lt;br /&gt;
units/temperature_scale&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Weitere Informationen zu den Set Befehlen sind im [http://owfs.org/uploads/owserver.1.html#sect41 OWServer Manual] zu entnehmen.&lt;br /&gt;
&lt;br /&gt;
===OWServer Get Befehle===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;get &amp;amp;lt;name&amp;amp;gt; &amp;amp;lt;value&amp;amp;gt;&lt;br /&gt;
value:&lt;br /&gt;
/settings/timeout/directory&lt;br /&gt;
/settings/timeout/ftp&lt;br /&gt;
/settings/timeout/ha7&lt;br /&gt;
/settings/timeout/network&lt;br /&gt;
/settings/timeout/presence&lt;br /&gt;
/settings/timeout/serial&lt;br /&gt;
/settings/timeout/server&lt;br /&gt;
/settings/timeout/stable&lt;br /&gt;
/settings/timeout/uncached&lt;br /&gt;
/settings/timeout/usb&lt;br /&gt;
/settings/timeout/volatile&lt;br /&gt;
/settings/timeout/w1&lt;br /&gt;
/settings/units/pressure_scale&lt;br /&gt;
/settings/units/temperature_scale&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Zusätzlich stehen die FHEM-internen Befehle &amp;quot;errors&amp;quot; und &amp;quot;devices&amp;quot; zur Verfügung.&lt;br /&gt;
zBsp:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;get &amp;amp;lt;Devicename&amp;amp;gt; errors #listet die Fehler des Device auf&lt;br /&gt;
get &amp;amp;lt;Devicename&amp;amp;gt; devices #scan den Server nach Device&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Angeschlossene Geräte auslesen===&lt;br /&gt;
Grundsätzlich werden die am Busmaster von OWFS angeschlossenen 1-Wire Geräte durch aktives autocreate nach einem Neustart (erfordert shutdown restart) selber in FHEM definiert.&lt;br /&gt;
Der Busmaster (zBsp ein DS9490r) selbst wird ebenfalls eingelesen und angezeigt.&lt;br /&gt;
&lt;br /&gt;
===Definition von Geräten===&lt;br /&gt;
Es ist auch möglich, Geräte manuell anzulegen. Dies erfolgt in folgendem Format:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define &amp;amp;lt;name&amp;amp;gt; OWDevice &amp;amp;lt;address&amp;amp;gt; [&amp;amp;lt;interval&amp;amp;gt;]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
zBsp:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define Vorlauftemp OWDevice 28.334F2B040000 60&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Wobei der Wert 60 als Abfrageintervall in Sekunden zu verstehen ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===OWDevice State===&lt;br /&gt;
Bei Temperaturfühler wie DS18S20 wird das Reading &amp;quot;state&amp;quot; wie folgt ausgegeben:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;temperature: 56.1875 alarm: 1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Um die Temperatur wie bei anderen Temperatur-Sensoren (zBsp. CUL_WS) anzuzeigen, hilft das Attribut &amp;quot;stateFormat&amp;quot;. Dies kann wie folgt definiert werden:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;attr &amp;amp;lt;Devicename&amp;amp;gt; stateFormat T: &amp;amp;lt;wert&amp;amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
zBsp:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;attr Boiler stateFormat T: temperature&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
alternativ&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;attr &amp;amp;lt;Devicename&amp;amp;gt; stateFormat {sprintf(&amp;quot;%.1f&amp;quot;,ReadingsVal(&amp;quot;&amp;amp;lt;Devicename&amp;amp;gt;&amp;quot;,&amp;quot;temperature&amp;quot;,0)).&amp;quot;°C&amp;quot;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Zusätzlich rundet das obenstehende Attribut mit &amp;quot;%.1f&amp;quot; die Temperatur auf eine Kommastelle.&lt;br /&gt;
&lt;br /&gt;
==Tipps und Tricks==&lt;br /&gt;
1-wire-Geräte sind häufig generische Geräte, wie Zähler und Spannungsmesser (A/D-Wandler), an denen Sensorik hängt. Die rohen Werte vom 1-wire-Gerät (Zählimpulse, Spannungen) sind dann noch in menschenlesbare Werte zu verwandeln. Hier helfen userReadings, z.B.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;attr myEnergyMeter userReadings energy { (ReadingsVal(&amp;quot;myEnergyMeter&amp;quot;,&amp;quot;count.A&amp;quot;,0)+AttrVal(&amp;quot;myEnergyMeter&amp;quot;,&amp;quot;myBasis&amp;quot;,0))/1250.0;; }&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Anwendungsbeispiele==&lt;br /&gt;
[[Stromzähler_und_1-Wire,_OWServer,_OWDevice|Hier]] findet man ein Beispiel einer Anbindung zweier Leistungsmesser (aka Stromzähler) mit S0 Ausgang über einen 1-wire-S0-Zähler an FHEM. &lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
=== Fhem hängt, wenn OWServer nicht erreichbar ist ===&lt;br /&gt;
Am Anfang gab es mit OWServer das Problem, dass Fhem immer komplett hing, wenn OWServer nicht erreichbar war (siehe z.&amp;amp;nbsp;B. [http://www.fischer-net.de/hausautomation/haustechnik/1-wire/60-1-wire-integration-in-fhem.html hier am Ende]). Das Problem wurde inzwischen dankenswerterweise für den laufenden Betrieb {{Link2Forum|Topic=16945|LinkText=behoben}} - &amp;lt;code&amp;gt;attr myOWServer nonblocking 1&amp;lt;/code&amp;gt; muss dazu gesetzt werden -, aber zumindest beim Start hängt Fhem nach wie vor, wenn OWServer nicht erreichbar ist.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:1-Wire]]&lt;/div&gt;</summary>
		<author><name>Motivierte linke Hände</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Pushbullet&amp;diff=11161</id>
		<title>Pushbullet</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Pushbullet&amp;diff=11161"/>
		<updated>2015-05-04T12:07:35Z</updated>

		<summary type="html">&lt;p&gt;Motivierte linke Hände: Lösungshinweis zu &amp;quot;Cannot load module Pushbullet&amp;quot; ergänzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Pushbullet&#039;&#039;&#039; ist ein Dienst, um Benachrichtigungen an unterschiedliche Endgeräte zu senden. Pushbullet stellt Apps für iPhone, Android, Windows (Beta), Mac OS X (bald erhältlich) sowie Plugins für Chrome und Firefox an. Eine genaue Liste kann [http://www.pushbullet.com/apps hier] eingesehen werden. Der Dienst sowie die Apps sind kostenlos. &lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Senden von Push-Nachrichten an unterschiedliche Endgeräte&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Unterstützende Dienste&lt;br /&gt;
|ModTechName=70_Pushbullet.pm&lt;br /&gt;
|ModOwner=fhainz&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
&lt;br /&gt;
Zur Benutzung von Pushbullet ist ein Google Account zwingend notwenig. Falls noch kein Google Account vorhanden ist kann man diesen [https://accounts.google.com/SignUp hier einrichten]. Anschließend kann man sich auf [http://pushbullet.com pushbullet.com] mit den Google Benutzerdaten einloggen. Den benötigten accessToken findet man in den Account Settings (rechts oben auf das Benutzer-Symbol klicken). &lt;br /&gt;
Auf dem gewünschten Endgerät muss nur noch der entsprechende Client installiert werden.&lt;br /&gt;
&lt;br /&gt;
===Offizielle Clients===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Smartphones&#039;&#039;&#039;&lt;br /&gt;
*iOS: [https://www.pushbullet.com/apps Pushbullet App]&lt;br /&gt;
*Android: [https://www.pushbullet.com/apps Pushbullet App]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Browser-Erweiterungen&#039;&#039;&#039;&lt;br /&gt;
*Firefox: [https://www.pushbullet.com/apps Pushbullet Plugin]&lt;br /&gt;
*Chrome: [https://www.pushbullet.com/apps Pushbullet Plugin]&lt;br /&gt;
*Opera: [https://www.pushbullet.com/apps Pushbullet Plugin]&lt;br /&gt;
*Safari: [https://www.pushbullet.com/apps Pushbullet Plugin]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Betriebssystem-Erweiterungen&#039;&#039;&#039;&lt;br /&gt;
*Windows: [https://www.pushbullet.com/apps Pushbullet App]&lt;br /&gt;
*Mac OS X: [https://www.pushbullet.com/apps Pushbullet App]&lt;br /&gt;
&lt;br /&gt;
===Clients durch die Community===&lt;br /&gt;
*Blackberry: [https://www.pushbullet.com/apps BlackBullet]&lt;br /&gt;
*Windows Phone: [https://www.pushbullet.com/apps PushPin]&lt;br /&gt;
*Ubuntu: [https://www.pushbullet.com/apps PB Indicator]&lt;br /&gt;
&lt;br /&gt;
Übersicht aller Clients: [https://www.pushbullet.com/apps]&lt;br /&gt;
&lt;br /&gt;
==Einbinden des Dienstes in Fhem==&lt;br /&gt;
&lt;br /&gt;
Das Modul wird mit dem folgenden Befehl in fhem definiert:&lt;br /&gt;
&lt;br /&gt;
 define &amp;lt;name&amp;gt; Pushbullet &amp;lt;accessToken&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Push Benachrichtigung senden==&lt;br /&gt;
&lt;br /&gt;
===Nachricht===&lt;br /&gt;
&lt;br /&gt;
Nachricht ohne Titel oder Gerät:&lt;br /&gt;
 set &amp;lt;name&amp;gt; message Das ist eine Nachricht&lt;br /&gt;
&lt;br /&gt;
Nachricht mit Titel ohne Gerät:&lt;br /&gt;
 set &amp;lt;name&amp;gt; message Das ist eine Nachricht | Ein Titel&lt;br /&gt;
&lt;br /&gt;
Nachricht mit Titel an Gerät iPhone:&lt;br /&gt;
 set &amp;lt;name&amp;gt; message Das ist eine Nachricht | Ein Titel | iPhone&lt;br /&gt;
&lt;br /&gt;
Nachricht mit Titel an Kontakt Max Mustermann&lt;br /&gt;
 set &amp;lt;name&amp;gt; message Das ist eine Nachricht | Ein Titel | Max Mustermann&lt;br /&gt;
&lt;br /&gt;
Wenn kein Titel angegeben wird tritt das Attribut defaultTitel in Kraft. Falls dies nicht gesetzt ist wird der Titel auf FHEM gesetzt.&lt;br /&gt;
Wenn kein Device angeben wird tritt das Attribut defaultDevice in Kraft. Falls dies nicht gesetzt ist geht der Push an alle &#039;&#039;&#039;deine&#039;&#039;&#039; Devices. Kontakte erhalten die Benachrichtigung &#039;&#039;&#039;nicht!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Link===&lt;br /&gt;
Der Inhalt des Links wird in der App direkt angezeigt. Ein Webcam Foto kann somit mit einem Touch direkt am Endgerät angezeigt werden.&lt;br /&gt;
&lt;br /&gt;
Link ohne Titel oder Gerät:&lt;br /&gt;
 set &amp;lt;name&amp;gt; link http://google.com&lt;br /&gt;
&lt;br /&gt;
Link mit Titel ohne Gerät:&lt;br /&gt;
 set &amp;lt;name&amp;gt; link http://google.com | Google&lt;br /&gt;
&lt;br /&gt;
Link mit Titel an Gerät iPhone&lt;br /&gt;
 set &amp;lt;name&amp;gt; link http://google.com | Google | iPhone&lt;br /&gt;
&lt;br /&gt;
Link mit Titel an Kontakt Max Mustermann&lt;br /&gt;
 set &amp;lt;name&amp;gt; link http://google.com | Google | MaxMustermann&lt;br /&gt;
&lt;br /&gt;
*Wenn kein Titel angegeben wird tritt das Attribut defaultTitel in Kraft. Falls dies nicht gesetzt ist wird der Titel auf FHEM gesetzt.&lt;br /&gt;
*Wenn kein Device angeben wird tritt das Attribut defaultDevice in Kraft. Falls dies nicht gesetzt ist geht der Push an alle &#039;&#039;&#039;deine&#039;&#039;&#039; Devices. Kontakte erhalten die Benachrichtigung &#039;&#039;&#039;nicht!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Liste===&lt;br /&gt;
&lt;br /&gt;
Liste ohne Titel oder Gerät:&lt;br /&gt;
 set &amp;lt;name&amp;gt; list Milch, Brot, Zucker&lt;br /&gt;
&lt;br /&gt;
Liste mit Titel ohne Gerät:&lt;br /&gt;
 set &amp;lt;name&amp;gt; list Milch, Brot, Zucker | Einkaufsliste&lt;br /&gt;
&lt;br /&gt;
Liste mit Titel an Gerät iPhone&lt;br /&gt;
 set &amp;lt;name&amp;gt; list Milch, Brot, Zucker | Einkaufsliste | iPhone&lt;br /&gt;
&lt;br /&gt;
Liste mit Titel an Kontakt Max Mustermann&lt;br /&gt;
 set &amp;lt;name&amp;gt; list Milch, Brot, Zucker | Einkaufsliste | MaxMustermann&lt;br /&gt;
&lt;br /&gt;
*Wenn kein Titel angegeben wird tritt das Attribut defaultTitel in Kraft. Falls dies nicht gesetzt ist wird der Titel auf FHEM gesetzt.&lt;br /&gt;
*Wenn kein Device angeben wird tritt das Attribut defaultDevice in Kraft. Falls dies nicht gesetzt ist geht der Push an alle &#039;&#039;&#039;deine&#039;&#039;&#039; Devices. Kontakte erhalten die Benachrichtigung &#039;&#039;&#039;nicht!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Kontakt hinzufügen==&lt;br /&gt;
Mit&lt;br /&gt;
 set &amp;lt;name&amp;gt; contactAdd &amp;lt;Name&amp;gt; | &amp;lt;email&amp;gt;&lt;br /&gt;
wird eine neuer Kontakt hinzugefügt. Dieser bekommt erstmal eine E-Mail mit einer Einladung zur Pushbullet App. Fall die App nicht installiert wird, bekommt der Kontakt Push-Benachrichtigungen als E-Mail zugestellt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Gerät / Kontakt umbenennen==&lt;br /&gt;
Mit&lt;br /&gt;
 set &amp;lt;name&amp;gt; deviceRename &amp;lt;alterName&amp;gt; | &amp;lt;neuerName&amp;gt;&lt;br /&gt;
wird ein Gerät oder Kontakt umbenannt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Gerät / Kontakt löschen==&lt;br /&gt;
Mit&lt;br /&gt;
  set &amp;lt;name&amp;gt; deviceDelete &amp;lt;name&amp;gt;&lt;br /&gt;
wird ein Gerät oder Kontakt gelöscht.&lt;br /&gt;
&lt;br /&gt;
==Geräte / Kontakte neu einlesen==&lt;br /&gt;
Mit&lt;br /&gt;
  get &amp;lt;name&amp;gt; devices&lt;br /&gt;
kann man die Device Liste von pushbullet.com neu einlesen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Pushbullet Website==&lt;br /&gt;
Die Pushbullet Website bietet umfangreiche Möglichkeiten die gesendeten Push Nachrichten, Geräte und Kontakte zu verwalten. Weiters kann man auch Nachrichten versenden und löschen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Bekannte Probleme==&lt;br /&gt;
===Cannot load module Pushbullet===&lt;br /&gt;
&lt;br /&gt;
Bei einigen Installationen kommt es beim Start zu folgender Fehlermeldung:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Error messages while initializing FHEM:&lt;br /&gt;
configfile: Cannot load module Pushbullet&lt;br /&gt;
Cannot load module Pushbullet&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Abhilfe schafft in der Regel, JSON zu installieren. Zum Beispiel auf dem Raspberry:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get install libjson-perl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
*Thread über das Modul im [http://forum.fhem.de/index.php/topic,29796.0.html FHEM-Forum]&lt;br /&gt;
*Pushbullet [https://www.pushbullet.com/apps Apps]&lt;br /&gt;
*Pushbullet [https://docs.pushbullet.com API]&lt;br /&gt;
*Homepage: [http://pushbullet.com pushbullet.com]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Motivierte linke Hände</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=OWServer_%26_OWDevice&amp;diff=11159</id>
		<title>OWServer &amp; OWDevice</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=OWServer_%26_OWDevice&amp;diff=11159"/>
		<updated>2015-05-04T08:34:20Z</updated>

		<summary type="html">&lt;p&gt;Motivierte linke Hände: Ergänzung nonblocking&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
Bei OWServer handelt es sich um eine 1-Wire Server Komponente und bei OWDevice um eine Geräte-Komponente, die die angeschlossenen Module definiert-&lt;br /&gt;
Die Module benötigen die Serverkomponente von [http://www.owfs.org OWFS].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wichtig:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Module sind eine eigenständige Möglichkeit, den 1-Wire Bus anzusteuern und kommen ohne die Module aus, deren Namen aus Großbuchstaben bestehen (wie OWX, OWSWITCH, OWTHERM, etc.). &lt;br /&gt;
Umgekehrt können die Module OWSWITCH, OWTHERM, etc. auch mit dem Backendmodul OWServer zusammenarbeiten, siehe dazu die commandref der betreffenden Module.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Vorbereitung==&lt;br /&gt;
&lt;br /&gt;
Wie oben erwähnt, setzt OWServer/OWDevice auf OWFS auf. Dazu ist eine funktionierende OWFS Installation notwendig. Die Installation ist auf der selben Plattform (Debian-based) möglich oder auch Remote (zBsp Dockstar oder RPi). Eine gute [http://owfs.org/index.php?page=standard-devices Liste der Standard Devices]auf der Homepage von OWFS einzusehen. Nicht alle Standard Devices sind in OWDevice verfügbar (siehe unten).Wenn OWFS funktioniert kann&#039;s weiter gehen...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===owfs Pakete installieren===&lt;br /&gt;
&lt;br /&gt;
1) entweder sind die Pakete bereits vorpaketiert und man muss nur das [http://owfs.davromaniak.eu/ Repository] noch in /etc/apt/sources.list eintragen&lt;br /&gt;
&lt;br /&gt;
2) oder man muss selber kompilieren ([http://www.navitron.org.uk/forum/index.php?topic=12604.msg151750#msg151750 Quelle]). &lt;br /&gt;
Für den RaspberryPi wurde dies schon durchgeführt: [http://forum.fhem.de/index.php?action=dlattach;topic=12219.0;attach=2463 owfs_2.8p17-1_all.zip]&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;sudo apt-get install automake autoconf autotools-dev gcc g++ libtool libusb-dev fuse-utils libfuse-dev swig python-dev tcl-dev php5-dev&lt;br /&gt;
sudo apt-get install git git-buildpackage dh-make quilt php5-cli&lt;br /&gt;
git clone [git://git.debian.org/collab-maint/owfs.git git://git.debian.org/collab-maint/owfs.git] git&lt;br /&gt;
git-buildpackage -uc -us&lt;br /&gt;
cd ..&lt;br /&gt;
sudo dpkg -i ./owserver_2.8p7+cvs20110310-1_i386.deb ./libow-2.8-7_2.8p7+cvs20110310-1_i386.deb ./owfs-common_2.8p7+cvs20110310-1_all.deb&lt;br /&gt;
sudo dpkg -i ./owhttpd_2.8p7+cvs20110310-1_i386.deb&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
diese Pakete werden alle gebaut:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;libow-2.8-7_2.8p7+cvs20110310-1_i386.deb   owfs-common_2.8p7+cvs20110310-1_all.deb&lt;br /&gt;
libowcapi-2.8-7_2.8p7+cvs20110310-1_i386.deb owfs-dbg_2.8p7+cvs20110310-1_i386.deb&lt;br /&gt;
libow-dev_2.8p7+cvs20110310-1_i386.deb    owfs-doc_2.8p7+cvs20110310-1_all.deb&lt;br /&gt;
libownet-2.8-7_2.8p7+cvs20110310-1_i386.deb  owfs-fuse_2.8p7+cvs20110310-1_i386.deb&lt;br /&gt;
libownet-dev_2.8p7+cvs20110310-1_i386.deb   owftpd_2.8p7+cvs20110310-1_i386.deb&lt;br /&gt;
libownet-perl_2.8p7+cvs20110310-1_all.deb   owhttpd_2.8p7+cvs20110310-1_i386.deb&lt;br /&gt;
libownet-php_2.8p7+cvs20110310-1_all.deb   owserver_2.8p7+cvs20110310-1_i386.deb&lt;br /&gt;
libow-perl_2.8p7+cvs20110310-1_i386.deb    ow-shell_2.8p7+cvs20110310-1_i386.deb&lt;br /&gt;
libow-php5_2.8p7+cvs20110310-1_i386.deb    python-ow_2.8p7+cvs20110310-1_i386.deb&lt;br /&gt;
libow-tcl_2.8p7+cvs20110310-1_i386.deb    python-ownet_2.8p7+cvs20110310-1_all.deb&lt;br /&gt;
owfs_2.8p7+cvs20110310-1_all.deb&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) In aktuellen Versionen von Raspbian sind die notwendigen Pakete schon in den konfigurierten Quellen vorhanden. Es reicht ein&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get install owserver ow-shell owhttpd owftpd&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Unterstütze Geräte===&lt;br /&gt;
Eine aktuelle Liste der von OWDevice unterstützen Geräte findet man im [http://fhem.de/commandref.html#OWDevice FHEM-Commandref].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Konfiguration in FHEM==&lt;br /&gt;
Als erstes definiert man OWServer. Hiermit wird ein logischer OWServer definiert, auf welchem OWFS installiert ist&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define &amp;amp;lt;name&amp;amp;gt; OWServer &amp;amp;lt;protocol&amp;amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;amp;lt;protocol&amp;amp;gt; hat das Format &amp;amp;lt;hostname&amp;amp;gt;:&amp;amp;lt;port&amp;amp;gt;.&lt;br /&gt;
&lt;br /&gt;
zBsp:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define myOWServer OWServer 192.168.14.100:4304&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
oder wenn sich OWFS auf dem gleichen Server befindet wie FHEM:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define myOWServer OWServer localhost:4304&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Nach erfolgreichem &amp;quot;define&amp;quot; ist ein Klick auf den &amp;quot;Save&amp;quot; Button notwenig. Wenn nun der Status von myOWServer auf &amp;quot;Initialized&amp;quot; steht, ist der Server verbunden. Um sicher zu sein, dass der OWServer funktioniert, kann eine manuelle Abfrage der Device durchgeführt werden mit:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;get myOWServer devices&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Danach werden sämtliche angeschlossene Geräte angezeigt, inkl. Busmaster&lt;br /&gt;
&lt;br /&gt;
===OWServer Set Befehle===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;set &amp;amp;lt;name&amp;amp;gt; &amp;amp;lt;value&amp;amp;gt;&lt;br /&gt;
value:&lt;br /&gt;
timeout/directory&lt;br /&gt;
timeout/ftp&lt;br /&gt;
timeout/ha7&lt;br /&gt;
timeout/network&lt;br /&gt;
timeout/presence&lt;br /&gt;
timeout/serial&lt;br /&gt;
timeout/server&lt;br /&gt;
timeout/stable&lt;br /&gt;
timeout/uncached&lt;br /&gt;
timeout/usb&lt;br /&gt;
timeout/volatile&lt;br /&gt;
timeout/w1&lt;br /&gt;
units/pressure_scale&lt;br /&gt;
units/temperature_scale&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Weitere Informationen zu den Set Befehlen sind im [http://owfs.org/uploads/owserver.1.html#sect41 OWServer Manual] zu entnehmen.&lt;br /&gt;
&lt;br /&gt;
===OWServer Get Befehle===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;get &amp;amp;lt;name&amp;amp;gt; &amp;amp;lt;value&amp;amp;gt;&lt;br /&gt;
value:&lt;br /&gt;
/settings/timeout/directory&lt;br /&gt;
/settings/timeout/ftp&lt;br /&gt;
/settings/timeout/ha7&lt;br /&gt;
/settings/timeout/network&lt;br /&gt;
/settings/timeout/presence&lt;br /&gt;
/settings/timeout/serial&lt;br /&gt;
/settings/timeout/server&lt;br /&gt;
/settings/timeout/stable&lt;br /&gt;
/settings/timeout/uncached&lt;br /&gt;
/settings/timeout/usb&lt;br /&gt;
/settings/timeout/volatile&lt;br /&gt;
/settings/timeout/w1&lt;br /&gt;
/settings/units/pressure_scale&lt;br /&gt;
/settings/units/temperature_scale&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Zusätzlich stehen die FHEM-internen Befehle &amp;quot;errors&amp;quot; und &amp;quot;devices&amp;quot; zur Verfügung.&lt;br /&gt;
zBsp:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;get &amp;amp;lt;Devicename&amp;amp;gt; errors #listet die Fehler des Device auf&lt;br /&gt;
get &amp;amp;lt;Devicename&amp;amp;gt; devices #scan den Server nach Device&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Angeschlossene Geräte auslesen===&lt;br /&gt;
Grundsätzlich werden die am Busmaster von OWFS angeschlossenen 1-Wire Geräte durch aktives autocreate nach einem Neustart (erfordert shutdown restart) selber in FHEM definiert.&lt;br /&gt;
Der Busmaster (zBsp ein DS9490r) selbst wird ebenfalls eingelesen und angezeigt.&lt;br /&gt;
&lt;br /&gt;
===Definition von Geräten===&lt;br /&gt;
Es ist auch möglich, Geräte manuell anzulegen. Dies erfolgt in folgendem Format:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define &amp;amp;lt;name&amp;amp;gt; OWDevice &amp;amp;lt;address&amp;amp;gt; [&amp;amp;lt;interval&amp;amp;gt;]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
zBsp:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define Vorlauftemp OWDevice 28.334F2B040000 60&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Wobei der Wert 60 als Abfrageintervall in Sekunden zu verstehen ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===OWDevice State===&lt;br /&gt;
Bei Temperaturfühler wie DS18S20 wird das Reading &amp;quot;state&amp;quot; wie folgt ausgegeben:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;temperature: 56.1875 alarm: 1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Um die Temperatur wie bei anderen Temperatur-Sensoren (zBsp. CUL_WS) anzuzeigen, hilft das Attribut &amp;quot;stateFormat&amp;quot;. Dies kann wie folgt definiert werden:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;attr &amp;amp;lt;Devicename&amp;amp;gt; stateFormat T: &amp;amp;lt;wert&amp;amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
zBsp:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;attr Boiler stateFormat T: temperature&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
alternativ&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;attr &amp;amp;lt;Devicename&amp;amp;gt; stateFormat {sprintf(&amp;quot;%.1f&amp;quot;,ReadingsVal(&amp;quot;&amp;amp;lt;Devicename&amp;amp;gt;&amp;quot;,&amp;quot;temperature&amp;quot;,0)).&amp;quot;°C&amp;quot;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Zusätzlich rundet das obenstehende Attribut mit &amp;quot;%.1f&amp;quot; die Temperatur auf eine Kommastelle.&lt;br /&gt;
&lt;br /&gt;
==Tipps und Tricks==&lt;br /&gt;
1-wire-Geräte sind häufig generische Geräte, wie Zähler und Spannungsmesser (A/D-Wandler), an denen Sensorik hängt. Die rohen Werte vom 1-wire-Gerät (Zählimpulse, Spannungen) sind dann noch in menschenlesbare Werte zu verwandeln. Hier helfen userReadings, z.B.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;attr myEnergyMeter userReadings energy { (ReadingsVal(&amp;quot;myEnergyMeter&amp;quot;,&amp;quot;count.A&amp;quot;,0)+AttrVal(&amp;quot;myEnergyMeter&amp;quot;,&amp;quot;myBasis&amp;quot;,0))/1250.0;; }&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Anwendungsbeispiele==&lt;br /&gt;
[[Stromzähler_und_1-Wire,_OWServer,_OWDevice|Hier]] findet man ein Beispiel einer Anbindung zweier Leistungsmesser (aka Stromzähler) mit S0 Ausgang über einen 1-wire-S0-Zähler an FHEM. &lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
=== Fhem hängt, wenn OWServer nicht erreichbar ist ===&lt;br /&gt;
Am Anfang gab es mit OWServer das Problem, dass Fhem immer komplett hing, wenn OWServer nicht erreichbar war (siehe z.&amp;amp;nbsp;B. [http://www.fischer-net.de/hausautomation/haustechnik/1-wire/60-1-wire-integration-in-fhem.html hier am Ende]). Das Problem wurde inzwischen dankenswerterweise für den laufenden Betrieb {{Link2Forum|Topic=16945|LinkText=behoben}} - &amp;lt;code&amp;gt;attr myOWServer nonblocking 1&amp;lt;/code&amp;gt; muss dazu gesetzt werden -, aber zumindest beim Start hängt Fhem nach wie vor, wenn OWServer nicht erreichbar ist.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:1-Wire]]&lt;/div&gt;</summary>
		<author><name>Motivierte linke Hände</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=OWServer_%26_OWDevice&amp;diff=11142</id>
		<title>OWServer &amp; OWDevice</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=OWServer_%26_OWDevice&amp;diff=11142"/>
		<updated>2015-05-03T08:06:52Z</updated>

		<summary type="html">&lt;p&gt;Motivierte linke Hände: Hinweis auf FHEM Hänger, wenn owserver nicht erreichbar ist, aufgenommen.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
Bei OWServer handelt es sich um eine 1-Wire Server Komponente und bei OWDevice um eine Geräte-Komponente, die die angeschlossenen Module definiert-&lt;br /&gt;
Die Module benötigen die Serverkomponente von [http://www.owfs.org OWFS].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wichtig:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Module sind eine eigenständige Möglichkeit, den 1-Wire Bus anzusteuern und kommen ohne die Module aus, deren Namen aus Großbuchstaben bestehen (wie OWX, OWSWITCH, OWTHERM, etc.). &lt;br /&gt;
Umgekehrt können die Module OWSWITCH, OWTHERM, etc. auch mit dem Backendmodul OWServer zusammenarbeiten, siehe dazu die commandref der betreffenden Module.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Vorbereitung==&lt;br /&gt;
&lt;br /&gt;
Wie oben erwähnt, setzt OWServer/OWDevice auf OWFS auf. Dazu ist eine funktionierende OWFS Installation notwendig. Die Installation ist auf der selben Plattform (Debian-based) möglich oder auch Remote (zBsp Dockstar oder RPi). Eine gute [http://owfs.org/index.php?page=standard-devices Liste der Standard Devices]auf der Homepage von OWFS einzusehen. Nicht alle Standard Devices sind in OWDevice verfügbar (siehe unten).Wenn OWFS funktioniert kann&#039;s weiter gehen...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===owfs Pakete installieren===&lt;br /&gt;
&lt;br /&gt;
1) entweder sind die Pakete bereits vorpaketiert und man muss nur das [http://owfs.davromaniak.eu/ Repository] noch in /etc/apt/sources.list eintragen&lt;br /&gt;
&lt;br /&gt;
2) oder man muss selber kompilieren ([http://www.navitron.org.uk/forum/index.php?topic=12604.msg151750#msg151750 Quelle]). &lt;br /&gt;
Für den RaspberryPi wurde dies schon durchgeführt: [http://forum.fhem.de/index.php?action=dlattach;topic=12219.0;attach=2463 owfs_2.8p17-1_all.zip]&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;sudo apt-get install automake autoconf autotools-dev gcc g++ libtool libusb-dev fuse-utils libfuse-dev swig python-dev tcl-dev php5-dev&lt;br /&gt;
sudo apt-get install git git-buildpackage dh-make quilt php5-cli&lt;br /&gt;
git clone [git://git.debian.org/collab-maint/owfs.git git://git.debian.org/collab-maint/owfs.git] git&lt;br /&gt;
git-buildpackage -uc -us&lt;br /&gt;
cd ..&lt;br /&gt;
sudo dpkg -i ./owserver_2.8p7+cvs20110310-1_i386.deb ./libow-2.8-7_2.8p7+cvs20110310-1_i386.deb ./owfs-common_2.8p7+cvs20110310-1_all.deb&lt;br /&gt;
sudo dpkg -i ./owhttpd_2.8p7+cvs20110310-1_i386.deb&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
diese Pakete werden alle gebaut:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;libow-2.8-7_2.8p7+cvs20110310-1_i386.deb   owfs-common_2.8p7+cvs20110310-1_all.deb&lt;br /&gt;
libowcapi-2.8-7_2.8p7+cvs20110310-1_i386.deb owfs-dbg_2.8p7+cvs20110310-1_i386.deb&lt;br /&gt;
libow-dev_2.8p7+cvs20110310-1_i386.deb    owfs-doc_2.8p7+cvs20110310-1_all.deb&lt;br /&gt;
libownet-2.8-7_2.8p7+cvs20110310-1_i386.deb  owfs-fuse_2.8p7+cvs20110310-1_i386.deb&lt;br /&gt;
libownet-dev_2.8p7+cvs20110310-1_i386.deb   owftpd_2.8p7+cvs20110310-1_i386.deb&lt;br /&gt;
libownet-perl_2.8p7+cvs20110310-1_all.deb   owhttpd_2.8p7+cvs20110310-1_i386.deb&lt;br /&gt;
libownet-php_2.8p7+cvs20110310-1_all.deb   owserver_2.8p7+cvs20110310-1_i386.deb&lt;br /&gt;
libow-perl_2.8p7+cvs20110310-1_i386.deb    ow-shell_2.8p7+cvs20110310-1_i386.deb&lt;br /&gt;
libow-php5_2.8p7+cvs20110310-1_i386.deb    python-ow_2.8p7+cvs20110310-1_i386.deb&lt;br /&gt;
libow-tcl_2.8p7+cvs20110310-1_i386.deb    python-ownet_2.8p7+cvs20110310-1_all.deb&lt;br /&gt;
owfs_2.8p7+cvs20110310-1_all.deb&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) In aktuellen Versionen von Raspbian sind die notwendigen Pakete schon in den konfigurierten Quellen vorhanden. Es reicht ein&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get install owserver ow-shell owhttpd owftpd&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Unterstütze Geräte===&lt;br /&gt;
Eine aktuelle Liste der von OWDevice unterstützen Geräte findet man im [http://fhem.de/commandref.html#OWDevice FHEM-Commandref].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Konfiguration in FHEM==&lt;br /&gt;
Als erstes definiert man OWServer. Hiermit wird ein logischer OWServer definiert, auf welchem OWFS installiert ist&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define &amp;amp;lt;name&amp;amp;gt; OWServer &amp;amp;lt;protocol&amp;amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;amp;lt;protocol&amp;amp;gt; hat das Format &amp;amp;lt;hostname&amp;amp;gt;:&amp;amp;lt;port&amp;amp;gt;.&lt;br /&gt;
&lt;br /&gt;
zBsp:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define myOWServer OWServer 192.168.14.100:4304&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
oder wenn sich OWFS auf dem gleichen Server befindet wie FHEM:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define myOWServer OWServer localhost:4304&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Nach erfolgreichem &amp;quot;define&amp;quot; ist ein Klick auf den &amp;quot;Save&amp;quot; Button notwenig. Wenn nun der Status von myOWServer auf &amp;quot;Initialized&amp;quot; steht, ist der Server verbunden. Um sicher zu sein, dass der OWServer funktioniert, kann eine manuelle Abfrage der Device durchgeführt werden mit:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;get myOWServer devices&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Danach werden sämtliche angeschlossene Geräte angezeigt, inkl. Busmaster&lt;br /&gt;
&lt;br /&gt;
===OWServer Set Befehle===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;set &amp;amp;lt;name&amp;amp;gt; &amp;amp;lt;value&amp;amp;gt;&lt;br /&gt;
value:&lt;br /&gt;
timeout/directory&lt;br /&gt;
timeout/ftp&lt;br /&gt;
timeout/ha7&lt;br /&gt;
timeout/network&lt;br /&gt;
timeout/presence&lt;br /&gt;
timeout/serial&lt;br /&gt;
timeout/server&lt;br /&gt;
timeout/stable&lt;br /&gt;
timeout/uncached&lt;br /&gt;
timeout/usb&lt;br /&gt;
timeout/volatile&lt;br /&gt;
timeout/w1&lt;br /&gt;
units/pressure_scale&lt;br /&gt;
units/temperature_scale&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Weitere Informationen zu den Set Befehlen sind im [http://owfs.org/uploads/owserver.1.html#sect41 OWServer Manual] zu entnehmen.&lt;br /&gt;
&lt;br /&gt;
===OWServer Get Befehle===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;get &amp;amp;lt;name&amp;amp;gt; &amp;amp;lt;value&amp;amp;gt;&lt;br /&gt;
value:&lt;br /&gt;
/settings/timeout/directory&lt;br /&gt;
/settings/timeout/ftp&lt;br /&gt;
/settings/timeout/ha7&lt;br /&gt;
/settings/timeout/network&lt;br /&gt;
/settings/timeout/presence&lt;br /&gt;
/settings/timeout/serial&lt;br /&gt;
/settings/timeout/server&lt;br /&gt;
/settings/timeout/stable&lt;br /&gt;
/settings/timeout/uncached&lt;br /&gt;
/settings/timeout/usb&lt;br /&gt;
/settings/timeout/volatile&lt;br /&gt;
/settings/timeout/w1&lt;br /&gt;
/settings/units/pressure_scale&lt;br /&gt;
/settings/units/temperature_scale&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Zusätzlich stehen die FHEM-internen Befehle &amp;quot;errors&amp;quot; und &amp;quot;devices&amp;quot; zur Verfügung.&lt;br /&gt;
zBsp:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;get &amp;amp;lt;Devicename&amp;amp;gt; errors #listet die Fehler des Device auf&lt;br /&gt;
get &amp;amp;lt;Devicename&amp;amp;gt; devices #scan den Server nach Device&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Angeschlossene Geräte auslesen===&lt;br /&gt;
Grundsätzlich werden die am Busmaster von OWFS angeschlossenen 1-Wire Geräte durch aktives autocreate nach einem Neustart (erfordert shutdown restart) selber in FHEM definiert.&lt;br /&gt;
Der Busmaster (zBsp ein DS9490r) selbst wird ebenfalls eingelesen und angezeigt.&lt;br /&gt;
&lt;br /&gt;
===Definition von Geräten===&lt;br /&gt;
Es ist auch möglich, Geräte manuell anzulegen. Dies erfolgt in folgendem Format:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define &amp;amp;lt;name&amp;amp;gt; OWDevice &amp;amp;lt;address&amp;amp;gt; [&amp;amp;lt;interval&amp;amp;gt;]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
zBsp:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define Vorlauftemp OWDevice 28.334F2B040000 60&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Wobei der Wert 60 als Abfrageintervall in Sekunden zu verstehen ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===OWDevice State===&lt;br /&gt;
Bei Temperaturfühler wie DS18S20 wird das Reading &amp;quot;state&amp;quot; wie folgt ausgegeben:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;temperature: 56.1875 alarm: 1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Um die Temperatur wie bei anderen Temperatur-Sensoren (zBsp. CUL_WS) anzuzeigen, hilft das Attribut &amp;quot;stateFormat&amp;quot;. Dies kann wie folgt definiert werden:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;attr &amp;amp;lt;Devicename&amp;amp;gt; stateFormat T: &amp;amp;lt;wert&amp;amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
zBsp:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;attr Boiler stateFormat T: temperature&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
alternativ&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;attr &amp;amp;lt;Devicename&amp;amp;gt; stateFormat {sprintf(&amp;quot;%.1f&amp;quot;,ReadingsVal(&amp;quot;&amp;amp;lt;Devicename&amp;amp;gt;&amp;quot;,&amp;quot;temperature&amp;quot;,0)).&amp;quot;°C&amp;quot;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Zusätzlich rundet das obenstehende Attribut mit &amp;quot;%.1f&amp;quot; die Temperatur auf eine Kommastelle.&lt;br /&gt;
&lt;br /&gt;
==Tipps und Tricks==&lt;br /&gt;
1-wire-Geräte sind häufig generische Geräte, wie Zähler und Spannungsmesser (A/D-Wandler), an denen Sensorik hängt. Die rohen Werte vom 1-wire-Gerät (Zählimpulse, Spannungen) sind dann noch in menschenlesbare Werte zu verwandeln. Hier helfen userReadings, z.B.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;attr myEnergyMeter userReadings energy { (ReadingsVal(&amp;quot;myEnergyMeter&amp;quot;,&amp;quot;count.A&amp;quot;,0)+AttrVal(&amp;quot;myEnergyMeter&amp;quot;,&amp;quot;myBasis&amp;quot;,0))/1250.0;; }&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Anwendungsbeispiele==&lt;br /&gt;
[[Stromzähler_und_1-Wire,_OWServer,_OWDevice|Hier]] findet man ein Beispiel einer Anbindung zweier Leistungsmesser (aka Stromzähler) mit S0 Ausgang über einen 1-wire-S0-Zähler an FHEM. &lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
&lt;br /&gt;
=== fhem hängt, wenn owserver nicht erreichbar ist ===&lt;br /&gt;
&lt;br /&gt;
Am Anfang gab es mit OWServer das Problem, dass FHEM immer komplett hing, wenn owserver nicht erreichbar war (siehe z. B. [http://www.fischer-net.de/hausautomation/haustechnik/1-wire/60-1-wire-integration-in-fhem.html hier am Ende]. Das Problem wurde inzwischen dankenswerterweise für den laufenden Betrieb [http://forum.fhem.de/index.php/topic,16945.0.html behoben], aber zumindest beim Start hängt FHEM nach wie vor, wenn owserver nicht erreichbar ist.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:1-Wire]]&lt;/div&gt;</summary>
		<author><name>Motivierte linke Hände</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=1-Wire_Busverlegung&amp;diff=11140</id>
		<title>1-Wire Busverlegung</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=1-Wire_Busverlegung&amp;diff=11140"/>
		<updated>2015-05-02T20:24:50Z</updated>

		<summary type="html">&lt;p&gt;Motivierte linke Hände: Ein paar Ergänzungen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Kabeltypen ==&lt;br /&gt;
Es kann eine Vielzahl von Kabeltypen verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Eine Abschirmung sollte möglichst immer vorhanden sein, ist aber nicht zwingend notwendig. Die Verwendung dieser Abschirmung als Nutzleitung ist eher ungünstig, sie sollte vielmehr einseitig (!) an Masse=GND angeschlossen sein.&lt;br /&gt;
&lt;br /&gt;
Anforderungen an den Durchmesser der einzelnen Adern werden durch den Stromverbrauch der 1-Wire-Komponenten bestimmt. Hat man nur Temperatursensoren etc., reichen 0.6 mm vollständig aus, das Kabel könnte sogar noch dünner sein (z.B. um es unauffällig unter Tapeten zu verlegen). Wenn Aktoren, LEDs, oder sonstige echte Stromverbraucher auf dem Bus sitzen, sollten 0.8 mm Aderdurchmesser vorgesehen werden.&lt;br /&gt;
&lt;br /&gt;
Die Frequenzen, die über diese Kabel transportiert werden müssen, liegen im niederfrequenten Bereich (Anstiegs- und Abfallzeit der Impulse bei ca. 20-30 Mikrosekunden). Abrupte Veränderungen des Kabeldurchmessers oder der Kabelart führen immer immer zu Sprüngen der Impedanz (Wellenwiderstand) und damit zur Reflexion, die sich in einer Verschlechterung der Impulsqualität bemerkbar macht. Es ist daher zu empfehlen, nicht zu viele solche Wechsel auf dem Weg zum Sensor/Aktor einzubauen.&lt;br /&gt;
&lt;br /&gt;
*Für parasitär (d.h. aus der Datenleitung) versorgte Sensoren und Aktoren reichen 2 Adern = 1 Aderpaar vollständig aus (Datenleitung und Masse=GND)&lt;br /&gt;
*Für Sensoren und Aktoren mit echter Spannungsversorgung ist eine dritte Ader mit +5V vorzusehen. Wenn ein externes Netzteil verwendet wird, ist zu beachten, dass GND des Netzteils auch mit GND des Busmasters verbunden werden muss.&lt;br /&gt;
*Für größere Netze ist zu beachten, dass keine Sterntopologie entsteht: Zwei längere Kabel (d.h., länger als 3,5 m) an einem Busmaster erfordern dann, dass das eines der beiden Kabel als Hin- + Rückleitung ausgelegt wird, das erfordert dann also 4 Adern = 2 Aderpaare. Siehe hierzu den unten stehenden Abschnitt&lt;br /&gt;
&lt;br /&gt;
=== Netzwerkkabel ===&lt;br /&gt;
Hierbei handelt es sich typischerweise um STP(Shielded Twisted Pair)-Kabel mit 8 Adern, 4x2x0.8mm bis zu 4x2x0.1mm für extra flache Kabel. Ein &#039;&#039;Twisted Pair&#039;&#039; weist über seine Länge eine einigermaßen homogene Impedanz auf, um diese nicht zu stören, sind zu kleine Biegeradien zu vermeiden&lt;br /&gt;
=== Brandmeldekabel ===&lt;br /&gt;
Dieses Kabel hat unterschiedliche Anzahl von Aderpaaren, z.B. 2x2x0.8mm, aber auch 2x3, 2x4 oder gar 2x5 Aderpaare; die äußere Farbe ist rot. Kosten ab 0,40 €/m.&lt;br /&gt;
=== EIB/KNX Buskabel ===&lt;br /&gt;
Dieses Kabel hat 4 Adern 2x2x0.8mm und ist mit einem Folienschirm geschirmt, die äußere Farbe ist meist grün. Kosten ab 0,40 €/m. Die 4. Ader kann entweder zur Datenrückleitung verwendet werden, oder eine weitere Spannung (z.B. 12 V) zu Aktoren (z.B. Relais) transportieren.&lt;br /&gt;
=== Geschirmtes Fernmeldekabel ===&lt;br /&gt;
Dieses Kabel hat 4 Adern 2x2x0.6mm und ist mit einem Folienschirm geschirmt, die äußere Farbe ist meist grau. Kosten ab 0,20 €/m. Die 4. Ader kann entweder zur Datenrückleitung verwendet werden, oder eine weitere Spannung (z.B. 12 V) zu Aktoren (z.B. Relais) transportieren.&lt;br /&gt;
=== Geschirmtes NF-Kabel ===&lt;br /&gt;
Auch als Mikrofonkabel verkauft, zwei Innenleiter in gemeinsamer Abschirmung. Diese wird dann als 3. Leiter verwendet. Das Kabel ist sehr flexibel und daher besonders für den mobilen Anschluss von Sensoren/Aktoren geeignet. Bewährt hat sich dies für kurze &#039;&#039;Stubs&#039;&#039; (max. 3.5 m), mit denen Sensoren/Aktoren an den Bus angeschlossen werden. Hierfür gibt es preisgünstige Kabelenden mit angegossenem 3.5 mm Klinkenstecker.&lt;br /&gt;
&lt;br /&gt;
Auch kommerziell erhältliche Busmaster, wie der USB9097, haben solche Klinkenbuchsen. (Foto folgt)&lt;br /&gt;
&lt;br /&gt;
=== Ungeschirmtes 3-adriges Kabel===&lt;br /&gt;
Prinzipiell auch geeignet, sorgt aber bei großen Leitungslängen für eine gewisse Störanfälligkeit. Bei Abzweigungen oder für kurze &#039;&#039;Stubs&#039;&#039; aber problemlos verwendbar.&lt;br /&gt;
&lt;br /&gt;
Bei eBay sind preisgünstige 1-Wire Temperatursensoren in wasserdichtem Gehäuse erhältlich, die mit einem solchen Kabelende versehen sind.&lt;br /&gt;
===Belegung===&lt;br /&gt;
Es muss ausdrücklich betont werden, dass für die Belegung der Adern keine wie auch immer geartete Norm existiert. Die nachfolgenden Farbcodierungen sind lediglich Beispiele.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! Typ !! style=&amp;quot;width:5em;&amp;quot;|GND &amp;lt;br /&amp;gt;Masse !! style=&amp;quot;width:5em;&amp;quot;|VDD &amp;lt;br /&amp;gt;+5V !! style=&amp;quot;width:5em;&amp;quot;|1-Wire &amp;lt;br /&amp;gt;Data !! style=&amp;quot;width:5em;&amp;quot;|1-Wire &amp;lt;br /&amp;gt;Return !! Bemerkung / &amp;lt;br /&amp;gt; Vorgabe durch&lt;br /&gt;
|-&lt;br /&gt;
| Fernmeldekabel || style=&amp;quot;color:white;background:#000000&amp;quot;|sw || style=&amp;quot;color:white;background:red&amp;quot;|rt || style=&amp;quot;background:yellow&amp;quot;|ge || style=&amp;quot;background:white&amp;quot;|ws&lt;br /&gt;
|-&lt;br /&gt;
| Mikrofonkabel || style=&amp;quot;background:white&amp;quot;|ws || style=&amp;quot;color:white;background:#AAAAAA&amp;quot;|Schirm || style=&amp;quot;color:white;background:red&amp;quot;|rt || style=&amp;quot;color:white;background:grey&amp;quot;| -- || Busmaster&amp;lt;br /&amp;gt; USB9097&lt;br /&gt;
|-&lt;br /&gt;
| Ungeschirmtes&amp;lt;br /&amp;gt;3-adriges Kabel || style=&amp;quot;color:white;background:green&amp;quot;|gn || style=&amp;quot;color:white;background:red&amp;quot;|rt || style=&amp;quot;background:yellow&amp;quot;|ge || style=&amp;quot;color:white;background:grey&amp;quot;| -- || Kommerzielle&amp;lt;br /&amp;gt; Sensoren &lt;br /&gt;
|-&lt;br /&gt;
| Netzwerkkabel || style=&amp;quot;background:white&amp;quot;|blau-weiß&amp;lt;br /&amp;gt;orange-weiß || style=&amp;quot;color:black;background:#FAB514&amp;quot;|orange || style=&amp;quot;color:white;background:blue&amp;quot;|blau || style=&amp;quot;color:white;background:grey&amp;quot;| n. def. || LinkUSB(i)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Verbindung verschiedener Kabeltypen ==&lt;br /&gt;
[[Datei:Connectionbox.jpg|mini|links|Connectionbox (geöffnet)]] &lt;br /&gt;
[[Datei:Connectionbox unten.jpg|mini|rechts|Connectionbox Platinenunterseite (paarweise Verbindung der Adern)]]&lt;br /&gt;
Gute Erfahrungen wurden gemacht mit &#039;&#039;CAT 5 Connection Boxes&#039;&#039; für Netzwerkkabel, die für ca. 1,50€ z.B. bei Reichelt erhältlich sind. Voraussetzung für die Verwendung ist allerdings der Besitz eines &#039;&#039;LSA-Anlegewerkzeuges&#039;&#039; (ca. 6 €). Da meist nur 4 Adern benötigt werden, können die insgesamt 8 Adern auf der Unterseite paarweise verbunden werden. Dafür sollte man möglichst den gleichen Aderdurchmesser verwenden, wie er in der Zu- und Ableitung auftritt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt; &lt;br /&gt;
==Topologie==&lt;br /&gt;
Maßgebliches Whitepaper für &#039;&#039;&#039;große Kabellängen&#039;&#039;&#039; ist das von Maxim herausgegebene Tutorial [http://pdfserv.maximintegrated.com/en/an/AN148.pdf Guidelines for Reliable Long 1-Wire Networks]. &lt;br /&gt;
&lt;br /&gt;
Die Kabellänge bis zum entferntesten Sensor kann bis zu 100 m betragen. Typischerweise werden die einzelnen 1-Wire-Komponenten an eine zentrale Busleitung über so genannte &#039;&#039;Stubs&#039;&#039; (kurze Kabelenden) angeschlossen, diese sollten nicht länger als 3.5 m sein. Die gleiche Beschränkung der Leitungslänge gilt, wenn alle 1-Wire Komponenten sternförmig zusammengeführt werden (Sterntopologie).&lt;br /&gt;
&lt;br /&gt;
Bei Kabellängen von mehr als 3.5 m sollte immer eine lineare Topologie eingehalten werden (bis auf die &#039;&#039;Stubs&#039;&#039;), gegebenenfalls ist die Datenleitung (&#039;&#039;&#039;nicht&#039;&#039;&#039; Masse und Stromversorgung) als Hin- und Rückleitung vorzusehen.&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;250&amp;quot; caption=&amp;quot;1-Wire Topologien&amp;quot; mode=&amp;quot;packed&amp;quot;&amp;gt;&lt;br /&gt;
1-wire_T1.png|Sterntopologie&lt;br /&gt;
1-wire_T2.png|Lineare Topologie&lt;br /&gt;
1-wire_T3.png|Lineare Topologie mit sternförmiger Anordnung einzelner Gruppen&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Pullup==&lt;br /&gt;
Maßgebliches Whitepaper für die Frage eines &#039;&#039;&#039;Pullup&#039;&#039;&#039;-Widerstandes, der bei gewissen Operationen den Datenbus mit mehr Strom versorgt, ist das von Maxim herausgegebene Tutorial [http://pdfserv.maximintegrated.com/en/an/AN4255.pdf How to Power the Extended Features of 1-Wire Devices]. &lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Informationen zum Aufbau des 1-Wire Bus [http://shop.wiregate.de/1-wire-bus]&lt;br /&gt;
* Weitere Informationen zum Aufbau des 1-Wire Bus [http://www.fuchs-shop.com/de/howto/linkfamily/]&lt;br /&gt;
[[Kategorie:1-Wire]]&lt;/div&gt;</summary>
		<author><name>Motivierte linke Hände</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=OWServer_%26_OWDevice&amp;diff=11135</id>
		<title>OWServer &amp; OWDevice</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=OWServer_%26_OWDevice&amp;diff=11135"/>
		<updated>2015-05-02T08:26:45Z</updated>

		<summary type="html">&lt;p&gt;Motivierte linke Hände: Installation auf dem Raspberry vereinfacht&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
Bei OWServer handelt es sich um eine 1-Wire Server Komponente und bei OWDevice um eine Geräte-Komponente, die die angeschlossenen Module definiert-&lt;br /&gt;
Die Module benötigen die Serverkomponente von [http://www.owfs.org OWFS].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wichtig:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Module sind eine eigenständige Möglichkeit, den 1-Wire Bus anzusteuern und kommen ohne die Module aus, deren Namen aus Großbuchstaben bestehen (wie OWX, OWSWITCH, OWTHERM, etc.). &lt;br /&gt;
Umgekehrt können die Module OWSWITCH, OWTHERM, etc. auch mit dem Backendmodul OWServer zusammenarbeiten, siehe dazu die commandref der betreffenden Module.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Vorbereitung==&lt;br /&gt;
&lt;br /&gt;
Wie oben erwähnt, setzt OWServer/OWDevice auf OWFS auf. Dazu ist eine funktionierende OWFS Installation notwendig. Die Installation ist auf der selben Plattform (Debian-based) möglich oder auch Remote (zBsp Dockstar oder RPi). Eine gute [http://owfs.org/index.php?page=standard-devices Liste der Standard Devices]auf der Homepage von OWFS einzusehen. Nicht alle Standard Devices sind in OWDevice verfügbar (siehe unten).Wenn OWFS funktioniert kann&#039;s weiter gehen...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===owfs Pakete installieren===&lt;br /&gt;
&lt;br /&gt;
1) entweder sind die Pakete bereits vorpaketiert und man muss nur das [http://owfs.davromaniak.eu/ Repository] noch in /etc/apt/sources.list eintragen&lt;br /&gt;
&lt;br /&gt;
2) oder man muss selber kompilieren ([http://www.navitron.org.uk/forum/index.php?topic=12604.msg151750#msg151750 Quelle]). &lt;br /&gt;
Für den RaspberryPi wurde dies schon durchgeführt: [http://forum.fhem.de/index.php?action=dlattach;topic=12219.0;attach=2463 owfs_2.8p17-1_all.zip]&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;sudo apt-get install automake autoconf autotools-dev gcc g++ libtool libusb-dev fuse-utils libfuse-dev swig python-dev tcl-dev php5-dev&lt;br /&gt;
sudo apt-get install git git-buildpackage dh-make quilt php5-cli&lt;br /&gt;
git clone [git://git.debian.org/collab-maint/owfs.git git://git.debian.org/collab-maint/owfs.git] git&lt;br /&gt;
git-buildpackage -uc -us&lt;br /&gt;
cd ..&lt;br /&gt;
sudo dpkg -i ./owserver_2.8p7+cvs20110310-1_i386.deb ./libow-2.8-7_2.8p7+cvs20110310-1_i386.deb ./owfs-common_2.8p7+cvs20110310-1_all.deb&lt;br /&gt;
sudo dpkg -i ./owhttpd_2.8p7+cvs20110310-1_i386.deb&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
diese Pakete werden alle gebaut:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;libow-2.8-7_2.8p7+cvs20110310-1_i386.deb   owfs-common_2.8p7+cvs20110310-1_all.deb&lt;br /&gt;
libowcapi-2.8-7_2.8p7+cvs20110310-1_i386.deb owfs-dbg_2.8p7+cvs20110310-1_i386.deb&lt;br /&gt;
libow-dev_2.8p7+cvs20110310-1_i386.deb    owfs-doc_2.8p7+cvs20110310-1_all.deb&lt;br /&gt;
libownet-2.8-7_2.8p7+cvs20110310-1_i386.deb  owfs-fuse_2.8p7+cvs20110310-1_i386.deb&lt;br /&gt;
libownet-dev_2.8p7+cvs20110310-1_i386.deb   owftpd_2.8p7+cvs20110310-1_i386.deb&lt;br /&gt;
libownet-perl_2.8p7+cvs20110310-1_all.deb   owhttpd_2.8p7+cvs20110310-1_i386.deb&lt;br /&gt;
libownet-php_2.8p7+cvs20110310-1_all.deb   owserver_2.8p7+cvs20110310-1_i386.deb&lt;br /&gt;
libow-perl_2.8p7+cvs20110310-1_i386.deb    ow-shell_2.8p7+cvs20110310-1_i386.deb&lt;br /&gt;
libow-php5_2.8p7+cvs20110310-1_i386.deb    python-ow_2.8p7+cvs20110310-1_i386.deb&lt;br /&gt;
libow-tcl_2.8p7+cvs20110310-1_i386.deb    python-ownet_2.8p7+cvs20110310-1_all.deb&lt;br /&gt;
owfs_2.8p7+cvs20110310-1_all.deb&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) In aktuellen Versionen von Raspbian sind die notwendigen Pakete schon in den konfigurierten Quellen vorhanden. Es reicht ein&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get install owserver ow-shell owhttpd owftpd&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Unterstütze Geräte===&lt;br /&gt;
Eine aktuelle Liste der von OWDevice unterstützen Geräte findet man im [http://fhem.de/commandref.html#OWDevice FHEM-Commandref].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Konfiguration in FHEM==&lt;br /&gt;
Als erstes definiert man OWServer. Hiermit wird ein logischer OWServer definiert, auf welchem OWFS installiert ist&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define &amp;amp;lt;name&amp;amp;gt; OWServer &amp;amp;lt;protocol&amp;amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;amp;lt;protocol&amp;amp;gt; hat das Format &amp;amp;lt;hostname&amp;amp;gt;:&amp;amp;lt;port&amp;amp;gt;.&lt;br /&gt;
&lt;br /&gt;
zBsp:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define myOWServer OWServer 192.168.14.100:4304&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
oder wenn sich OWFS auf dem gleichen Server befindet wie FHEM:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define myOWServer OWServer localhost:4304&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Nach erfolgreichem &amp;quot;define&amp;quot; ist ein Klick auf den &amp;quot;Save&amp;quot; Button notwenig. Wenn nun der Status von myOWServer auf &amp;quot;Initialized&amp;quot; steht, ist der Server verbunden. Um sicher zu sein, dass der OWServer funktioniert, kann eine manuelle Abfrage der Device durchgeführt werden mit:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;get myOWServer devices&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Danach werden sämtliche angeschlossene Geräte angezeigt, inkl. Busmaster&lt;br /&gt;
&lt;br /&gt;
===OWServer Set Befehle===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;set &amp;amp;lt;name&amp;amp;gt; &amp;amp;lt;value&amp;amp;gt;&lt;br /&gt;
value:&lt;br /&gt;
timeout/directory&lt;br /&gt;
timeout/ftp&lt;br /&gt;
timeout/ha7&lt;br /&gt;
timeout/network&lt;br /&gt;
timeout/presence&lt;br /&gt;
timeout/serial&lt;br /&gt;
timeout/server&lt;br /&gt;
timeout/stable&lt;br /&gt;
timeout/uncached&lt;br /&gt;
timeout/usb&lt;br /&gt;
timeout/volatile&lt;br /&gt;
timeout/w1&lt;br /&gt;
units/pressure_scale&lt;br /&gt;
units/temperature_scale&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Weitere Informationen zu den Set Befehlen sind im [http://owfs.org/uploads/owserver.1.html#sect41 OWServer Manual] zu entnehmen.&lt;br /&gt;
&lt;br /&gt;
===OWServer Get Befehle===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;get &amp;amp;lt;name&amp;amp;gt; &amp;amp;lt;value&amp;amp;gt;&lt;br /&gt;
value:&lt;br /&gt;
/settings/timeout/directory&lt;br /&gt;
/settings/timeout/ftp&lt;br /&gt;
/settings/timeout/ha7&lt;br /&gt;
/settings/timeout/network&lt;br /&gt;
/settings/timeout/presence&lt;br /&gt;
/settings/timeout/serial&lt;br /&gt;
/settings/timeout/server&lt;br /&gt;
/settings/timeout/stable&lt;br /&gt;
/settings/timeout/uncached&lt;br /&gt;
/settings/timeout/usb&lt;br /&gt;
/settings/timeout/volatile&lt;br /&gt;
/settings/timeout/w1&lt;br /&gt;
/settings/units/pressure_scale&lt;br /&gt;
/settings/units/temperature_scale&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Zusätzlich stehen die FHEM-internen Befehle &amp;quot;errors&amp;quot; und &amp;quot;devices&amp;quot; zur Verfügung.&lt;br /&gt;
zBsp:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;get &amp;amp;lt;Devicename&amp;amp;gt; errors #listet die Fehler des Device auf&lt;br /&gt;
get &amp;amp;lt;Devicename&amp;amp;gt; devices #scan den Server nach Device&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Angeschlossene Geräte auslesen===&lt;br /&gt;
Grundsätzlich werden die am Busmaster von OWFS angeschlossenen 1-Wire Geräte durch aktives autocreate nach einem Neustart (erfordert shutdown restart) selber in FHEM definiert.&lt;br /&gt;
Der Busmaster (zBsp ein DS9490r) selbst wird ebenfalls eingelesen und angezeigt.&lt;br /&gt;
&lt;br /&gt;
===Definition von Geräten===&lt;br /&gt;
Es ist auch möglich, Geräte manuell anzulegen. Dies erfolgt in folgendem Format:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define &amp;amp;lt;name&amp;amp;gt; OWDevice &amp;amp;lt;address&amp;amp;gt; [&amp;amp;lt;interval&amp;amp;gt;]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
zBsp:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define Vorlauftemp OWDevice 28.334F2B040000 60&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Wobei der Wert 60 als Abfrageintervall in Sekunden zu verstehen ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===OWDevice State===&lt;br /&gt;
Bei Temperaturfühler wie DS18S20 wird das Reading &amp;quot;state&amp;quot; wie folgt ausgegeben:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;temperature: 56.1875 alarm: 1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Um die Temperatur wie bei anderen Temperatur-Sensoren (zBsp. CUL_WS) anzuzeigen, hilft das Attribut &amp;quot;stateFormat&amp;quot;. Dies kann wie folgt definiert werden:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;attr &amp;amp;lt;Devicename&amp;amp;gt; stateFormat T: &amp;amp;lt;wert&amp;amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
zBsp:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;attr Boiler stateFormat T: temperature&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
alternativ&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;attr &amp;amp;lt;Devicename&amp;amp;gt; stateFormat {sprintf(&amp;quot;%.1f&amp;quot;,ReadingsVal(&amp;quot;&amp;amp;lt;Devicename&amp;amp;gt;&amp;quot;,&amp;quot;temperature&amp;quot;,0)).&amp;quot;°C&amp;quot;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Zusätzlich rundet das obenstehende Attribut mit &amp;quot;%.1f&amp;quot; die Temperatur auf eine Kommastelle.&lt;br /&gt;
&lt;br /&gt;
==Tipps und Tricks==&lt;br /&gt;
1-wire-Geräte sind häufig generische Geräte, wie Zähler und Spannungsmesser (A/D-Wandler), an denen Sensorik hängt. Die rohen Werte vom 1-wire-Gerät (Zählimpulse, Spannungen) sind dann noch in menschenlesbare Werte zu verwandeln. Hier helfen userReadings, z.B.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;attr myEnergyMeter userReadings energy { (ReadingsVal(&amp;quot;myEnergyMeter&amp;quot;,&amp;quot;count.A&amp;quot;,0)+AttrVal(&amp;quot;myEnergyMeter&amp;quot;,&amp;quot;myBasis&amp;quot;,0))/1250.0;; }&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Anwendungsbeispiele==&lt;br /&gt;
[[Stromzähler_und_1-Wire,_OWServer,_OWDevice|Hier]] findet man ein Beispiel einer Anbindung zweier Leistungsmesser (aka Stromzähler) mit S0 Ausgang über einen 1-wire-S0-Zähler an FHEM. &lt;br /&gt;
&lt;br /&gt;
[[Kategorie:1-Wire]]&lt;/div&gt;</summary>
		<author><name>Motivierte linke Hände</name></author>
	</entry>
</feed>