<?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=CoolTux</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=CoolTux"/>
	<link rel="alternate" type="text/html" href="http://wiki.fhem.de/wiki/Spezial:Beitr%C3%A4ge/CoolTux"/>
	<updated>2026-04-11T06:51:22Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=GardenaSmartBridge&amp;diff=35732</id>
		<title>GardenaSmartBridge</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=GardenaSmartBridge&amp;diff=35732"/>
		<updated>2021-05-14T09:47:14Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: /* Define */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=GardenaSmartBridge&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=&lt;br /&gt;
|ModFTopic=75098&lt;br /&gt;
|ModTechName=73_GardenaSmartBridge.pm&lt;br /&gt;
|ModOwner={{Link2FU|13684|CoolTux}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Modul GardenaSmartBridge stellt zusammen mit dem Device [[GardenaSmartDevice]] die Kommunikation zwischen der &#039;&#039;&#039;Gardena Cloud&#039;&#039;&#039; und FHEM her.&lt;br /&gt;
Es können damit Rasenmäher, Bewässerungscomputer und Sensoren überwacht und gesteuert werden, die Steuerung erfolgt durch das Modul [[GardenaSmartDevice]]. &lt;br /&gt;
&#039;&#039;Informationen zum [[GardenaSmartSystem]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
* Perl-Modul &amp;quot;SSL Packet&amp;quot;&lt;br /&gt;
* Internetanbinung&lt;br /&gt;
* Netzwerk mit W-Lan oder LAN (RJ45)&lt;br /&gt;
* Smart Gateway von Gardena &lt;br /&gt;
* Account bei https://developer.husqvarnagroup.cloud/ (alt: [https://sg-api.dss.husqvarnagroup.net/ Gardena])&lt;br /&gt;
* Smart Produkte von Gardena [[GardenaSmartSystem]]&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
=== Define ===&lt;br /&gt;
&amp;lt;code&amp;gt; define &amp;lt;NAME&amp;gt; GardenaSmartBridge &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Beispiel ====&lt;br /&gt;
&amp;lt;code&amp;gt; define myGardenaBridge GardenaSmartBridge &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Anweisung erstellt ein neues GardenaSmartBridge Device Namens myGardenaBridge.&lt;br /&gt;
Im folgendem wird automatisch ein neuer Raum &#039;&#039;GardenaSmart&#039;&#039; erstellt und nach setzen des Attributes gardenaAccountEmail und einem &amp;lt;code&amp;gt;set myGardenaBridge gardenaAccountPassword&amp;lt;/code&amp;gt; alle dem [https://sg-api.dss.husqvarnagroup.net/ Gardena] Account bekannten Geräte&lt;br /&gt;
angelegt.&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
* debugJSON -&lt;br /&gt;
* disable - aktivieren &amp;amp; deaktivieren der Bridge (0= aktiviert, 1= deaktiviert) &lt;br /&gt;
* interval - Abfrageinterval in Sekunden (300= default)&lt;br /&gt;
* gardenaAccountEmail - Email Adresse, die auch in der GardenaApp verwendet wurde&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
&lt;br /&gt;
* address - bei Gardena verwendete Adresse&lt;br /&gt;
* city -  bei Gardena hinterlegte Stadt&lt;br /&gt;
* devices - Anzahl der angelernten/verwendeten Geräte incl. des Gateways&lt;br /&gt;
* latitude - Längengrad&lt;br /&gt;
* longitude - Breitengrad &lt;br /&gt;
* name - Name des Gartens &#039;&#039;(Standard &amp;quot;MY GARDEN&amp;quot;)&#039;&#039;&lt;br /&gt;
* state - Status der Bridge (connect to cloud= Verbunden mit der Cloud) &lt;br /&gt;
* token - SessionID&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
* keine&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=75098|LinkText=Forenthread zu diesem Modul}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Gerätemodul]]&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=NUKI&amp;diff=34641</id>
		<title>NUKI</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=NUKI&amp;diff=34641"/>
		<updated>2021-01-20T16:28:09Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: Änderung für libjson-perl&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right&amp;quot;&amp;gt;&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Einbindung der Nuki Bridge HW/APP&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=NUKIBridge&lt;br /&gt;
|ModForumArea=Sonstige Systeme&lt;br /&gt;
|ModTechName=73_NUKIBridge.pm&lt;br /&gt;
|ModOwner=CoolTux &amp;lt;br /&amp;gt;({{Link2FU|13684|Forum}} / [[Benutzer:CoolTux|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuern von Nuki Smartlocks über NUKIBridge&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=NUKIDevice&lt;br /&gt;
|ModForumArea=Sonstige Systeme&lt;br /&gt;
|ModTechName=73_NUKIDevice.pm&lt;br /&gt;
|ModOwner=CoolTux &amp;lt;br /&amp;gt;({{Link2FU|13684|Forum}} / [[Benutzer:CoolTux|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==NUKIBridge==&lt;br /&gt;
NUKIBridge - Steuert das Nuki Smartlock über die Nuki Bridge &lt;br /&gt;
&lt;br /&gt;
Das Nuki Bridge Modul verbindet FHEM mit der Nuki Bridge und liest dann alle auf der Bridge verfügbaren Smartlocks ein. Desweiteren werden automatisch die erkannten Smartlocks als eigenständige Devices angelegt.&lt;br /&gt;
&lt;br /&gt;
Für eine aktive Callback Funktion müssen noch zwei Attribute der Bridge eingerichtet werden:&lt;br /&gt;
* webhookFWinstance - zu verwendende Webinstanz (darf keine Passwortabfrage beinhalten)&lt;br /&gt;
* webhookHttpHostname - IP oder FQDN des FHEM Servers&lt;br /&gt;
&lt;br /&gt;
Voraussetzung für ein fehlerfreies Laden ist die Installation von JSON (apt-get install libjson-perl).&lt;br /&gt;
&lt;br /&gt;
===Definition===&lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; NUKIBridge &amp;lt;HOST&amp;gt; &amp;lt;API-TOKEN&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
:&amp;lt;code&amp;gt;define NBridge1 NUKIBridge 192.168.0.23 F34HK6&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Anweisung erstellt ein NUKIBridge Device mit Namen NBridge1 und der IP 192.168.0.23 sowie dem Token F34HK6. Nach dem Anlegen des Bridge Devices werden alle zur Verfügung stehende Smartlock automatisch in FHEM angelegt.&lt;br /&gt;
&lt;br /&gt;
===Readings===&lt;br /&gt;
* 0_nukiId - ID des ersten gefundenen Nuki Smartlocks&lt;br /&gt;
* 0_name - Name des ersten gefunden Nuki Smartlocks&lt;br /&gt;
* smartlockCount - Anzahl aller gefundenen Smartlock&lt;br /&gt;
* bridgeAPI - API Version der Bridge&lt;br /&gt;
* bridgeType - Hardware oder Software/App Bridge&lt;br /&gt;
* currentTime - aktuelle Zeit auf der Bridge zum zeitpunkt des Info holens&lt;br /&gt;
* firmwareVersion - aktuell auf der Bridge verwendete Firmwareversion&lt;br /&gt;
* hardwareId - ID der Hardware Bridge&lt;br /&gt;
* lastError - gibt die letzte HTTP Errormeldung wieder&lt;br /&gt;
* serverConnected - true/false gibt an ob die Hardwarebridge Verbindung zur Nuki-Cloude hat.&lt;br /&gt;
* serverId - gibt die ID des Cloudeservers wieder&lt;br /&gt;
* uptime - Uptime der Bridge in Sekunden&lt;br /&gt;
* wifiFirmwareVersion- Firmwareversion des Wifi Modules der Bridge&lt;br /&gt;
* Die vorangestellte Zahl ist fortlaufend und gibt beginnend bei 0 die Eigenschaften eines Smartlocks wieder.&lt;br /&gt;
&lt;br /&gt;
===Set===&lt;br /&gt;
* &amp;lt;s&amp;gt;autocreate - veranlasst ein erneutes Einlesen aller Smartlocks von der Bridge und falls noch nicht in FHEM vorhanden das automatische Anlegen.&amp;lt;/s&amp;gt;&lt;br /&gt;
* callbackRemove - löschen einer Callback Instanz auf der Bridge. Die Instanz ID kann mittels get callbackList ermittelt werden&lt;br /&gt;
* clearLog - löscht das Logfile auf der Bridge&lt;br /&gt;
* fwUpdate - schaut nach einer neueren Firmware und installiert diese, sofern vorhanden&lt;br /&gt;
* info - holt aktuelle Informationen über die Bridge&lt;br /&gt;
* reboot - veranlasst einen reboot der Bridge&lt;br /&gt;
&lt;br /&gt;
===Get===&lt;br /&gt;
* callbackList - gibt die Liste der eingetragenen Callback URLs wieder. Die Bridge nimmt maximal drei auf&lt;br /&gt;
* logFile - zeigt das Logfile der Bridge an&lt;br /&gt;
&lt;br /&gt;
===Attribute===&lt;br /&gt;
* disable - deaktiviert die Nuki Bridge&lt;br /&gt;
&lt;br /&gt;
==NUKIDevice==&lt;br /&gt;
NUKIDevice - Steuert das Nuki Smartlock&lt;br /&gt;
&lt;br /&gt;
Das Nuki Modul verbindet FHEM über die Nuki Bridge mit einem Nuki Smartlock. Es ist dann möglich, das Schloss zu ver- und entriegeln. In der Regel werden die Nuki Devices automatisch durch das Bridgemodul angelegt. &lt;br /&gt;
&lt;br /&gt;
===Definition===&lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; NUKIDevice &amp;lt;Nuki-Id&amp;gt; &amp;lt;IODev-Device&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
:&amp;lt;code&amp;gt;define Haustuer NUKIDevice 1 NBridge1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Anweisung erstellt ein NUKIDevice mit Namen Haustuer, der NukiId 1 sowie dem IODev Device NBridge1. Nach dem Anlegen des Devices wird automatisch der aktuelle Zustand des Smartlocks aus der Bridge gelesen.&lt;br /&gt;
Damit das NUKIDevice auch Statusänderungen mitbekommt, die beispielsweise aus der nativen NUKI-App oder der manuellen Betätigung des Devices herrühren, ist es notwendig, die Attribute webhookFWinstance und webhookHttpHostname zu setzen.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;attr Haustuer webhookFWinstance WEB (Name der FHEMWEB Instanz)&amp;lt;/code&amp;gt;&lt;br /&gt;
:attr Haustuer webhookHttpHostname 192.168.0.1 (IP/FQDN vom FHEM Server)&lt;br /&gt;
&lt;br /&gt;
Zum Überprüfen kann die Funktion&lt;br /&gt;
:&amp;lt;code&amp;gt;get NUKIBridge callbackList&amp;lt;/code&amp;gt;&lt;br /&gt;
aufgerufen werden. Es sollte nur ein Callback eingetragen&lt;br /&gt;
sein, der in dieser Form hinterlegt sein sollte.&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 http://192.168.0.1:8083/fhem/NUKIDevice-123456789&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Readings===&lt;br /&gt;
* state - Status des Smartlock bzw. Fehlermeldung von Fehler vorhanden.&lt;br /&gt;
* lockState - aktueller Schließstatus: uncalibrated, locked, unlocked, unlocked (lock ‘n’ go), unlatched, locking, unlocking, unlatching, motor blocked, undefined&lt;br /&gt;
* succes - true, false; gibt des Status des letzten Schließbefehles wieder. Geklappt oder nicht geklappt.&lt;br /&gt;
* batteryCritical - ist die Batterie in einem kritischen Zustand? true, false&lt;br /&gt;
* battery - Status der Batterie, ok, low&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Set===&lt;br /&gt;
* statusRequest - ruft den aktuellen Status des Smartlocks von der Bridge ab&lt;br /&gt;
* lock - verschließen&lt;br /&gt;
* unlock - aufschließen&lt;br /&gt;
* unlatch - entriegeln/Falle öffnen&lt;br /&gt;
* locknGo - verschließen wenn gegangen&lt;br /&gt;
* locknGoWithUnlatch - verschließen nachdem die Falle geöffnet wurde&lt;br /&gt;
&lt;br /&gt;
===Attribute===&lt;br /&gt;
* disable - deaktiviert das Nuki Device&lt;br /&gt;
* webhookFWinstance - zu verwendene Webinstanz für den Callbackaufruf&lt;br /&gt;
* webhookHttpHostname - IP oder FQDN vom FHEM Server für den Callbackaufruf&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [https://nuki.io/de/ Webseite des Herstellers]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Türschlosssteuerung]]&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=UWZ&amp;diff=29843</id>
		<title>UWZ</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=UWZ&amp;diff=29843"/>
		<updated>2019-03-10T20:52:46Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Daten von Unwetterzentrale.de holen&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Unterstützende Dienste/Wettermodule&lt;br /&gt;
|ModTechName=77_UWZ.pm&lt;br /&gt;
|ModOwner=Tdoe, CoolTux ({{Link2Forum|Topic=51233|LinkText=Forum}})&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Das Modul [[UWZ]] holt Informationen für eine zu spezifizierende Postleitzahl von der Seite [http://unwetterzentrale.de/ Unwetterzentrale.de] und bereitet sie für die Darstellung in FHEM auf.&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
{{Randnotiz|RNTyp=Fehl|RNText=Der Dienst wurde eingestellt, somit erhält das Modul keine Daten mehr und ist vorerst obsolet!!!&lt;br /&gt;
Diese Anleitung ist etwas in die Tage gekommen. Es hat viele Änderungen und Neuerungen gegeben. Die {{Link2CmdRef|Anker=UWZ}} ist aktuell und sollte eine gute Hilfestellung geben. Ansonsten bitte ins Forum schauen, ob hier bereits Lösungen zum Problem bestehen.&lt;br /&gt;
&lt;br /&gt;
Die Wikiseite wird nach und nach aktualisiert. Wenn du dies liest und du dich mit dem Modul auskennst, bist du recht herzlich eingeladen, den Artikel zu aktualisieren. So bleibt uns (Entwicklern) mehr Zeit, um uns um das Modul zu kümmern und dies zu verbessern/erweitern.}}&lt;br /&gt;
Standardinstallation und eine Internetverbindung werden für das Funktionieren des Moduls benötigt.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Das Modul wird als offizielles Modul per [[update]] verteilt und muss nicht extra installiert werden.&lt;br /&gt;
&lt;br /&gt;
Falls nach dem &amp;quot;define&amp;quot; der Fehler &amp;quot;unable...&amp;quot; kommt und im Log &amp;quot;...Can&#039;t locate XML/Simple.pm in @INC (you may need to install the XML::Simple module)...&amp;quot; steht, so kommt man auf der Konsole mit der folgenden Installation weiter:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cpan install XML::Simple&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es geht auf der Konsole aber auch mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;apt-get install libxml-simple-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
=== Define ===&lt;br /&gt;
Abhängig davon, ob man Unwetterwarnungen aus Deutschland oder einem anderen Land abfragen möchte, muss für das Attribut PLZ entweder die Postleitzahl (Deutschland) oder die AREA_ID (Rest der Welt) verwendet werden.&lt;br /&gt;
&lt;br /&gt;
==== Deutschland ====&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;define &amp;lt;name&amp;gt; UWZ &amp;lt;Ländercode&amp;gt; &amp;lt;PLZ&amp;gt; &amp;lt;INTERVAL&amp;gt; &amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Rest der Welt ====&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;define &amp;lt;name&amp;gt; UWZ &amp;lt;Ländercode&amp;gt; &amp;lt;AREA_ID&amp;gt; &amp;lt;INTERVAL&amp;gt; &amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die AREA_ID kann folgendermaßen ermittelt werden:&lt;br /&gt;
&lt;br /&gt;
===== Geokoordinaten ermitteln =====&lt;br /&gt;
Dazu wird folgende URL aufgerufen, und am Ende der URL bei dem &#039;&#039;search&#039;&#039; Parameter der Name des Ortes eingegeben. Im Fall von Oberwaltersdorf AT:&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://alertspro.geoservice.meteogroup.de/weatherpro/SearchFeed.php?search=oberwalt&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Antwort bekommt man eine XML Struktur mit gefundenen Orten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 &amp;lt;result&amp;gt;&lt;br /&gt;
   &amp;lt;cities previousOffset=&amp;quot;-1&amp;quot; nextOffset=&amp;quot;-1&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;city country=&amp;quot;49&amp;quot; city=&amp;quot;8512&amp;quot; id=&amp;quot;18226609&amp;quot; country-name=&amp;quot;Germany&amp;quot; province-name=&amp;quot;Bavaria&amp;quot; continent=&amp;quot;6&amp;quot; inhabitants=&amp;quot;7500&amp;quot; longitude=&amp;quot;12.17092&amp;quot; latitude=&amp;quot;48.57422&amp;quot; name=&amp;quot;Oberwaltenkofen (Ergolding)&amp;quot; timezone=&amp;quot;Europe/Berlin&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;city country=&amp;quot;49&amp;quot; city=&amp;quot;8671&amp;quot; id=&amp;quot;18226768&amp;quot; country-name=&amp;quot;Germany&amp;quot; province-name=&amp;quot;Bavaria&amp;quot; continent=&amp;quot;6&amp;quot; inhabitants=&amp;quot;4000&amp;quot; longitude=&amp;quot;12.51418&amp;quot; latitude=&amp;quot;48.77301&amp;quot; name=&amp;quot;Oberwalting (Leiblfing)&amp;quot; timezone=&amp;quot;Europe/Berlin&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;city country=&amp;quot;43&amp;quot; city=&amp;quot;1161&amp;quot; id=&amp;quot;18134912&amp;quot; country-name=&amp;quot;Austria&amp;quot; province-name=&amp;quot;Niederösterreich&amp;quot; continent=&amp;quot;6&amp;quot; inhabitants=&amp;quot;2500&amp;quot; longitude=&amp;quot;16.3203&amp;quot; latitude=&amp;quot;47.9756&amp;quot; name=&amp;quot;Oberwaltersdorf&amp;quot; timezone=&amp;quot;Europe/Vienna&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;city country=&amp;quot;43&amp;quot; city=&amp;quot;1305915&amp;quot; id=&amp;quot;182199490&amp;quot; country-name=&amp;quot;Austria&amp;quot; province-name=&amp;quot;Niederösterreich&amp;quot; continent=&amp;quot;6&amp;quot; inhabitants=&amp;quot;150&amp;quot; longitude=&amp;quot;15.0844&amp;quot; latitude=&amp;quot;48.5394&amp;quot; name=&amp;quot;Oberwaltenreith&amp;quot; timezone=&amp;quot;Europe/Vienna&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;/cities&amp;gt;&lt;br /&gt;
 &amp;lt;/result&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dort sucht man sich die beiden Attribute &#039;&#039;latitude&#039;&#039; und &#039;&#039;longitude&#039;&#039; für den passenden Ort heraus. Im verwendeten Beispiel wäre es für Oberwaltersdorf in Österreich:&lt;br /&gt;
:&amp;lt;code&amp;gt;latitude=&amp;quot;47.9756&amp;quot; &amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;longitude=&amp;quot;16.3203&amp;quot; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== AREA_ID abfragen =====&lt;br /&gt;
Mit diesen Werten wird nun die nächste URL zusammengebaut (Parameter &#039;&#039;lat&#039;&#039; + &#039;&#039;lon&#039;&#039;):&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt; http://feed.alertspro.meteogroup.com/AlertsPro/AlertsProPollService.php?method=lookupCoord&amp;amp;lat=47.9756&amp;amp;lon=16.3203  &amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Das Resultat:&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[{&amp;quot;AREA_TYPE&amp;quot;:&amp;quot;UWZ&amp;quot;,&amp;quot;AREA_ID&amp;quot;:&amp;quot;UWZAT00234&amp;quot;,&amp;quot;CENTER_ID&amp;quot;:&amp;quot;2&amp;quot;}] &amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun wissen wir, dass die AREA_ID für Oberwaltersdorf:&lt;br /&gt;
:&amp;lt;code&amp;gt;UWZAT00234 &amp;lt;/code&amp;gt;&lt;br /&gt;
ist. Bei der Definition wird nun die Nummer &#039;&#039;00234&#039;&#039; anstelle der PLZ, und &#039;&#039;AT&#039;&#039; beim Ländercode verwendet:&lt;br /&gt;
:&amp;lt;code&amp;gt;define Unwetterzentrale UWZ AT 00234 3600 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
Siehe Dokumentation.&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
Zur Anzeige der Warnhinweise bietet das Modul vordefinierte Funktionen an, die in [[weblink|Weblinks]] benutzt werden können.&lt;br /&gt;
&amp;lt;!-- Beispiele für UWZAsHtmlLite und UWZAsHtmlKarteLand werden ergänzt, sobald (zur Erhöhung der Variationen) andere/mehr/weniger Warnhinweise vorliegen --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:UWZAsHtmlFP.png|mini|right|400px|Warnmeldungen als reine Icons (Format &#039;&#039;UWZAsHtmlFP&#039;&#039;) mit Teilen der Objektdetails]]&lt;br /&gt;
=== Anzeige der Warnhinweise nur als Icon ===&lt;br /&gt;
Die UWZ-Warnhinweise können über die Definition &lt;br /&gt;
:&amp;lt;code&amp;gt;define &#039;&#039;UnwetterFloorplan&#039;&#039; weblink htmlCode {UWZAsHtmlFP(&amp;quot;&#039;&#039;Unwetterzentrale&#039;&#039;&amp;quot;)}&amp;lt;/code&amp;gt;&lt;br /&gt;
als reine Icons angezeigt werden. Diese Darstellung eignet sich besonders für die Einbindung in einen [[FLOORPLAN]].&lt;br /&gt;
&lt;br /&gt;
Im gezeigten Beispiel ist &#039;&#039;Unwetterzentrale&#039;&#039; der Name des UWZ-Objekts und &#039;&#039;UnwetterDetailliert&#039;&#039; der Name des erzeugten weblink-Objekts.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
[[Datei:UWZAsHtml.png|mini|right|400px|Warnmeldungen im Format &#039;&#039;UWZAsHtml&#039;&#039;]]&lt;br /&gt;
=== Detaillierte Anzeige der Warnhinweise ===&lt;br /&gt;
Zur Anzeige der Warnhinweise in der ausführlichsten Form kann mit&lt;br /&gt;
:&amp;lt;code&amp;gt;define &#039;&#039;UnwetterDetailliert&#039;&#039; weblink htmlCode {UWZAsHtml(&amp;quot;&#039;&#039;Unwetterzentrale&#039;&#039;&amp;quot;)}&amp;lt;/code&amp;gt;&lt;br /&gt;
ein weblink definiert werden.&lt;br /&gt;
&lt;br /&gt;
Im gezeigten Beispiel ist &#039;&#039;Unwetterzentrale&#039;&#039; der Name des UWZ-Objekts und &#039;&#039;UnwetterDetailliert&#039;&#039; der Name des erzeugten weblink-Objekts.&lt;br /&gt;
&lt;br /&gt;
=== Unwetterkarten ===&lt;br /&gt;
Auch diverse Unwetterkarten können eingebunden und gedownloadet werden. &lt;br /&gt;
Hierfür stehen eine Reihe von Karten zur Verfügung.&lt;br /&gt;
Mögliche Karten sind: &lt;br /&gt;
*europa&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*deutschland&lt;br /&gt;
*deutschland-small&lt;br /&gt;
*bayern&lt;br /&gt;
*bremen&lt;br /&gt;
*baden-wuerttemberg&lt;br /&gt;
*brandenburg&lt;br /&gt;
*berlin&lt;br /&gt;
*hessen&lt;br /&gt;
*niedersachsen&lt;br /&gt;
*rheinland-pfalz&lt;br /&gt;
*saarland&lt;br /&gt;
*sachsen&lt;br /&gt;
*sachsen-anhalt&lt;br /&gt;
*thueringen&lt;br /&gt;
*nordrhein-westfalen&lt;br /&gt;
*mecklenburg-vorpommern&lt;br /&gt;
*schleswig-holstein&lt;br /&gt;
*hamburg&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*oesterreich&lt;br /&gt;
*burgenland&lt;br /&gt;
*kaernten&lt;br /&gt;
*niederoesterreich&lt;br /&gt;
*oberoesterreich&lt;br /&gt;
*salzburg&lt;br /&gt;
*steiermark&lt;br /&gt;
*tirol&lt;br /&gt;
*vorarlberg&lt;br /&gt;
*wien&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*schweiz&lt;br /&gt;
*aargau&lt;br /&gt;
*appenzell_ausserrhoden&lt;br /&gt;
*appenzell_innerrhoden&lt;br /&gt;
*basel_landschaft&lt;br /&gt;
*basel_stadt&lt;br /&gt;
*bern&lt;br /&gt;
*fribourg&lt;br /&gt;
*geneve&lt;br /&gt;
*glarus&lt;br /&gt;
*graubuenden&lt;br /&gt;
*jura&lt;br /&gt;
*luzern&lt;br /&gt;
*neuchatel&lt;br /&gt;
*nidwalden&lt;br /&gt;
*obwalden&lt;br /&gt;
*schaffhausen&lt;br /&gt;
*schwyz&lt;br /&gt;
*solothurn&lt;br /&gt;
*stgallen&lt;br /&gt;
*ticino&lt;br /&gt;
*thurgau&lt;br /&gt;
*uri&lt;br /&gt;
*waadt&lt;br /&gt;
*wallis&lt;br /&gt;
*zug&lt;br /&gt;
*zuerich&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*liechtenstein&lt;br /&gt;
&lt;br /&gt;
*belgique&lt;br /&gt;
&lt;br /&gt;
*denmark&lt;br /&gt;
&lt;br /&gt;
*finnland&lt;br /&gt;
&lt;br /&gt;
*france&lt;br /&gt;
&lt;br /&gt;
*letzebuerg&lt;br /&gt;
&lt;br /&gt;
*nederland&lt;br /&gt;
&lt;br /&gt;
*norwegen&lt;br /&gt;
&lt;br /&gt;
*portugal&lt;br /&gt;
&lt;br /&gt;
*sverige&lt;br /&gt;
&lt;br /&gt;
*espana&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*unitedkingdom&lt;br /&gt;
*eastofengland&lt;br /&gt;
*eastmidlands&lt;br /&gt;
*london&lt;br /&gt;
*northeastengland&lt;br /&gt;
*northernireland&lt;br /&gt;
*northwestengland&lt;br /&gt;
*scotland&lt;br /&gt;
*southeastengland&lt;br /&gt;
*southwestengland&lt;br /&gt;
*wales&lt;br /&gt;
*westmidlands&lt;br /&gt;
*yorkshireandthehumber&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*isobaren1&lt;br /&gt;
*isobaren2&lt;br /&gt;
*isobaren3&lt;br /&gt;
&lt;br /&gt;
==== Anzeige von Unwetterkarten ====&lt;br /&gt;
Dies erfolgt ebenfalls durch einem weblink.&lt;br /&gt;
:&amp;lt;code&amp;gt;define &#039;&#039;UnwetterKarteDeutschland&#039;&#039; weblink htmlCode {UWZAsHtmlKarteLand(&amp;quot;&#039;&#039;Unwetterzentrale&#039;&#039;&amp;quot;,&amp;quot;&#039;&#039;Deutschland&#039;&#039;&amp;quot;)}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Download von Unwetterkarten ====&lt;br /&gt;
Um die Karten herunterzuladen um sie beispielsweise mit dem RSS Modul zu nutzen, muss dies am UWZ Device via Attribute konfiguriert werden. &lt;br /&gt;
Hierfür stehen folgende Attribute zur Verfügung:&lt;br /&gt;
*download [0|1]&lt;br /&gt;
*savepath (default:&amp;quot;/tmp/&amp;quot;)&lt;br /&gt;
*maps (leerzeichen separierte Liste der zu speichernden Unwetterkarten)&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &#039;&#039;Unwetterzentrale&#039;&#039; download 1&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &#039;&#039;Unwetterzentrale&#039;&#039; savepath /tmp/&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &#039;&#039;Unwetterzentrale&#039;&#039; maps deutschland europa bayern&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die angegebenen Karten werden bei jedem Lauf erneut heruntergeladen und überschreiben das alte File.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Wetteranimation ====&lt;br /&gt;
Ab der Version 1.4.1 bietet das Modul auch die Möglichkeit diverse Wetteranimationen zu integrieren. Diese können ebenfalls mittels weblink genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
:&amp;lt;code&amp;gt;define &#039;&#039;UnwetterKarteMovie&#039;&#039; weblink htmlCode {UWZAsHtmlMovie(&amp;quot;Unwetterzentrale&amp;quot;,&amp;quot;stroemung&amp;quot;)}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der erste Parameter definiert das zugehörige UWZ Device.&lt;br /&gt;
&lt;br /&gt;
Der zweite Parameter kann einer der folgenden sein:&lt;br /&gt;
&lt;br /&gt;
*niederschlag-wolken&lt;br /&gt;
*stroemung&lt;br /&gt;
*temperatur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*niederschlag-wolken-de&lt;br /&gt;
*stroemung-de&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*niederschlag-wolken-ch&lt;br /&gt;
*stroemung-ch&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*niederschlag-wolken-at&lt;br /&gt;
*stroemung-at&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*niederschlag-wolken-uk&lt;br /&gt;
*stroemung-uk&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [http://www.unwetterzentrale.de Unwetterzentrale] (für Deutschland)&lt;br /&gt;
* [http://unwetter.wetteralarm.at wetteralarm] (für Österreich)&lt;br /&gt;
* Geoservice [http://alertspro.geoservice.meteogroup.de/] zur Bestimmung von Geokoordinaten und Areacode&lt;br /&gt;
* Modulthread im Forum: {{Link2Forum|Topic=51233}}&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=UWZ&amp;diff=29842</id>
		<title>UWZ</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=UWZ&amp;diff=29842"/>
		<updated>2019-03-10T20:45:40Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Daten von Unwetterzentrale.de holen&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Unterstützende Dienste/Wettermodule&lt;br /&gt;
|ModTechName=77_UWZ.pm&lt;br /&gt;
|ModOwner=Tdoe, CoolTux ({{Link2Forum|Topic=51233|LinkText=Forum}})&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Das Modul [[UWZ]] holt Informationen für eine zu spezifizierende Postleitzahl von der Seite [http://unwetterzentrale.de/ Unwetterzentrale.de] und bereitet sie für die Darstellung in FHEM auf.&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Der Dienst wurde eingestellt, somit erhält das Modul keine Daten mehr und ist vorerst obsolet!!! Diese Anleitung ist etwas in die Tage gekommen. Es hat viele Änderungen und Neuerungen gegeben. Die {{Link2CmdRef|Anker=UWZ}} ist aktuell und sollte eine gute Hilfestellung geben. Ansonsten bitte ins Forum schauen, ob hier bereits Lösungen zum Problem bestehen.&lt;br /&gt;
&lt;br /&gt;
Die Wikiseite wird nach und nach aktualisiert. Wenn du dies liest und du dich mit dem Modul auskennst, bist du recht herzlich eingeladen, den Artikel zu aktualisieren. So bleibt uns (Entwicklern) mehr Zeit, um uns um das Modul zu kümmern und dies zu verbessern/erweitern.}}&lt;br /&gt;
Standardinstallation und eine Internetverbindung werden für das Funktionieren des Moduls benötigt.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Das Modul wird als offizielles Modul per [[update]] verteilt und muss nicht extra installiert werden.&lt;br /&gt;
&lt;br /&gt;
Falls nach dem &amp;quot;define&amp;quot; der Fehler &amp;quot;unable...&amp;quot; kommt und im Log &amp;quot;...Can&#039;t locate XML/Simple.pm in @INC (you may need to install the XML::Simple module)...&amp;quot; steht, so kommt man auf der Konsole mit der folgenden Installation weiter:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cpan install XML::Simple&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es geht auf der Konsole aber auch mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;apt-get install libxml-simple-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
=== Define ===&lt;br /&gt;
Abhängig davon, ob man Unwetterwarnungen aus Deutschland oder einem anderen Land abfragen möchte, muss für das Attribut PLZ entweder die Postleitzahl (Deutschland) oder die AREA_ID (Rest der Welt) verwendet werden.&lt;br /&gt;
&lt;br /&gt;
==== Deutschland ====&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;define &amp;lt;name&amp;gt; UWZ &amp;lt;Ländercode&amp;gt; &amp;lt;PLZ&amp;gt; &amp;lt;INTERVAL&amp;gt; &amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Rest der Welt ====&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;define &amp;lt;name&amp;gt; UWZ &amp;lt;Ländercode&amp;gt; &amp;lt;AREA_ID&amp;gt; &amp;lt;INTERVAL&amp;gt; &amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die AREA_ID kann folgendermaßen ermittelt werden:&lt;br /&gt;
&lt;br /&gt;
===== Geokoordinaten ermitteln =====&lt;br /&gt;
Dazu wird folgende URL aufgerufen, und am Ende der URL bei dem &#039;&#039;search&#039;&#039; Parameter der Name des Ortes eingegeben. Im Fall von Oberwaltersdorf AT:&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://alertspro.geoservice.meteogroup.de/weatherpro/SearchFeed.php?search=oberwalt&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Antwort bekommt man eine XML Struktur mit gefundenen Orten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 &amp;lt;result&amp;gt;&lt;br /&gt;
   &amp;lt;cities previousOffset=&amp;quot;-1&amp;quot; nextOffset=&amp;quot;-1&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;city country=&amp;quot;49&amp;quot; city=&amp;quot;8512&amp;quot; id=&amp;quot;18226609&amp;quot; country-name=&amp;quot;Germany&amp;quot; province-name=&amp;quot;Bavaria&amp;quot; continent=&amp;quot;6&amp;quot; inhabitants=&amp;quot;7500&amp;quot; longitude=&amp;quot;12.17092&amp;quot; latitude=&amp;quot;48.57422&amp;quot; name=&amp;quot;Oberwaltenkofen (Ergolding)&amp;quot; timezone=&amp;quot;Europe/Berlin&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;city country=&amp;quot;49&amp;quot; city=&amp;quot;8671&amp;quot; id=&amp;quot;18226768&amp;quot; country-name=&amp;quot;Germany&amp;quot; province-name=&amp;quot;Bavaria&amp;quot; continent=&amp;quot;6&amp;quot; inhabitants=&amp;quot;4000&amp;quot; longitude=&amp;quot;12.51418&amp;quot; latitude=&amp;quot;48.77301&amp;quot; name=&amp;quot;Oberwalting (Leiblfing)&amp;quot; timezone=&amp;quot;Europe/Berlin&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;city country=&amp;quot;43&amp;quot; city=&amp;quot;1161&amp;quot; id=&amp;quot;18134912&amp;quot; country-name=&amp;quot;Austria&amp;quot; province-name=&amp;quot;Niederösterreich&amp;quot; continent=&amp;quot;6&amp;quot; inhabitants=&amp;quot;2500&amp;quot; longitude=&amp;quot;16.3203&amp;quot; latitude=&amp;quot;47.9756&amp;quot; name=&amp;quot;Oberwaltersdorf&amp;quot; timezone=&amp;quot;Europe/Vienna&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;city country=&amp;quot;43&amp;quot; city=&amp;quot;1305915&amp;quot; id=&amp;quot;182199490&amp;quot; country-name=&amp;quot;Austria&amp;quot; province-name=&amp;quot;Niederösterreich&amp;quot; continent=&amp;quot;6&amp;quot; inhabitants=&amp;quot;150&amp;quot; longitude=&amp;quot;15.0844&amp;quot; latitude=&amp;quot;48.5394&amp;quot; name=&amp;quot;Oberwaltenreith&amp;quot; timezone=&amp;quot;Europe/Vienna&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;/cities&amp;gt;&lt;br /&gt;
 &amp;lt;/result&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dort sucht man sich die beiden Attribute &#039;&#039;latitude&#039;&#039; und &#039;&#039;longitude&#039;&#039; für den passenden Ort heraus. Im verwendeten Beispiel wäre es für Oberwaltersdorf in Österreich:&lt;br /&gt;
:&amp;lt;code&amp;gt;latitude=&amp;quot;47.9756&amp;quot; &amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;longitude=&amp;quot;16.3203&amp;quot; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== AREA_ID abfragen =====&lt;br /&gt;
Mit diesen Werten wird nun die nächste URL zusammengebaut (Parameter &#039;&#039;lat&#039;&#039; + &#039;&#039;lon&#039;&#039;):&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt; http://feed.alertspro.meteogroup.com/AlertsPro/AlertsProPollService.php?method=lookupCoord&amp;amp;lat=47.9756&amp;amp;lon=16.3203  &amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Das Resultat:&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[{&amp;quot;AREA_TYPE&amp;quot;:&amp;quot;UWZ&amp;quot;,&amp;quot;AREA_ID&amp;quot;:&amp;quot;UWZAT00234&amp;quot;,&amp;quot;CENTER_ID&amp;quot;:&amp;quot;2&amp;quot;}] &amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun wissen wir, dass die AREA_ID für Oberwaltersdorf:&lt;br /&gt;
:&amp;lt;code&amp;gt;UWZAT00234 &amp;lt;/code&amp;gt;&lt;br /&gt;
ist. Bei der Definition wird nun die Nummer &#039;&#039;00234&#039;&#039; anstelle der PLZ, und &#039;&#039;AT&#039;&#039; beim Ländercode verwendet:&lt;br /&gt;
:&amp;lt;code&amp;gt;define Unwetterzentrale UWZ AT 00234 3600 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
Siehe Dokumentation.&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
Zur Anzeige der Warnhinweise bietet das Modul vordefinierte Funktionen an, die in [[weblink|Weblinks]] benutzt werden können.&lt;br /&gt;
&amp;lt;!-- Beispiele für UWZAsHtmlLite und UWZAsHtmlKarteLand werden ergänzt, sobald (zur Erhöhung der Variationen) andere/mehr/weniger Warnhinweise vorliegen --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:UWZAsHtmlFP.png|mini|right|400px|Warnmeldungen als reine Icons (Format &#039;&#039;UWZAsHtmlFP&#039;&#039;) mit Teilen der Objektdetails]]&lt;br /&gt;
=== Anzeige der Warnhinweise nur als Icon ===&lt;br /&gt;
Die UWZ-Warnhinweise können über die Definition &lt;br /&gt;
:&amp;lt;code&amp;gt;define &#039;&#039;UnwetterFloorplan&#039;&#039; weblink htmlCode {UWZAsHtmlFP(&amp;quot;&#039;&#039;Unwetterzentrale&#039;&#039;&amp;quot;)}&amp;lt;/code&amp;gt;&lt;br /&gt;
als reine Icons angezeigt werden. Diese Darstellung eignet sich besonders für die Einbindung in einen [[FLOORPLAN]].&lt;br /&gt;
&lt;br /&gt;
Im gezeigten Beispiel ist &#039;&#039;Unwetterzentrale&#039;&#039; der Name des UWZ-Objekts und &#039;&#039;UnwetterDetailliert&#039;&#039; der Name des erzeugten weblink-Objekts.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
[[Datei:UWZAsHtml.png|mini|right|400px|Warnmeldungen im Format &#039;&#039;UWZAsHtml&#039;&#039;]]&lt;br /&gt;
=== Detaillierte Anzeige der Warnhinweise ===&lt;br /&gt;
Zur Anzeige der Warnhinweise in der ausführlichsten Form kann mit&lt;br /&gt;
:&amp;lt;code&amp;gt;define &#039;&#039;UnwetterDetailliert&#039;&#039; weblink htmlCode {UWZAsHtml(&amp;quot;&#039;&#039;Unwetterzentrale&#039;&#039;&amp;quot;)}&amp;lt;/code&amp;gt;&lt;br /&gt;
ein weblink definiert werden.&lt;br /&gt;
&lt;br /&gt;
Im gezeigten Beispiel ist &#039;&#039;Unwetterzentrale&#039;&#039; der Name des UWZ-Objekts und &#039;&#039;UnwetterDetailliert&#039;&#039; der Name des erzeugten weblink-Objekts.&lt;br /&gt;
&lt;br /&gt;
=== Unwetterkarten ===&lt;br /&gt;
Auch diverse Unwetterkarten können eingebunden und gedownloadet werden. &lt;br /&gt;
Hierfür stehen eine Reihe von Karten zur Verfügung.&lt;br /&gt;
Mögliche Karten sind: &lt;br /&gt;
*europa&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*deutschland&lt;br /&gt;
*deutschland-small&lt;br /&gt;
*bayern&lt;br /&gt;
*bremen&lt;br /&gt;
*baden-wuerttemberg&lt;br /&gt;
*brandenburg&lt;br /&gt;
*berlin&lt;br /&gt;
*hessen&lt;br /&gt;
*niedersachsen&lt;br /&gt;
*rheinland-pfalz&lt;br /&gt;
*saarland&lt;br /&gt;
*sachsen&lt;br /&gt;
*sachsen-anhalt&lt;br /&gt;
*thueringen&lt;br /&gt;
*nordrhein-westfalen&lt;br /&gt;
*mecklenburg-vorpommern&lt;br /&gt;
*schleswig-holstein&lt;br /&gt;
*hamburg&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*oesterreich&lt;br /&gt;
*burgenland&lt;br /&gt;
*kaernten&lt;br /&gt;
*niederoesterreich&lt;br /&gt;
*oberoesterreich&lt;br /&gt;
*salzburg&lt;br /&gt;
*steiermark&lt;br /&gt;
*tirol&lt;br /&gt;
*vorarlberg&lt;br /&gt;
*wien&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*schweiz&lt;br /&gt;
*aargau&lt;br /&gt;
*appenzell_ausserrhoden&lt;br /&gt;
*appenzell_innerrhoden&lt;br /&gt;
*basel_landschaft&lt;br /&gt;
*basel_stadt&lt;br /&gt;
*bern&lt;br /&gt;
*fribourg&lt;br /&gt;
*geneve&lt;br /&gt;
*glarus&lt;br /&gt;
*graubuenden&lt;br /&gt;
*jura&lt;br /&gt;
*luzern&lt;br /&gt;
*neuchatel&lt;br /&gt;
*nidwalden&lt;br /&gt;
*obwalden&lt;br /&gt;
*schaffhausen&lt;br /&gt;
*schwyz&lt;br /&gt;
*solothurn&lt;br /&gt;
*stgallen&lt;br /&gt;
*ticino&lt;br /&gt;
*thurgau&lt;br /&gt;
*uri&lt;br /&gt;
*waadt&lt;br /&gt;
*wallis&lt;br /&gt;
*zug&lt;br /&gt;
*zuerich&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*liechtenstein&lt;br /&gt;
&lt;br /&gt;
*belgique&lt;br /&gt;
&lt;br /&gt;
*denmark&lt;br /&gt;
&lt;br /&gt;
*finnland&lt;br /&gt;
&lt;br /&gt;
*france&lt;br /&gt;
&lt;br /&gt;
*letzebuerg&lt;br /&gt;
&lt;br /&gt;
*nederland&lt;br /&gt;
&lt;br /&gt;
*norwegen&lt;br /&gt;
&lt;br /&gt;
*portugal&lt;br /&gt;
&lt;br /&gt;
*sverige&lt;br /&gt;
&lt;br /&gt;
*espana&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*unitedkingdom&lt;br /&gt;
*eastofengland&lt;br /&gt;
*eastmidlands&lt;br /&gt;
*london&lt;br /&gt;
*northeastengland&lt;br /&gt;
*northernireland&lt;br /&gt;
*northwestengland&lt;br /&gt;
*scotland&lt;br /&gt;
*southeastengland&lt;br /&gt;
*southwestengland&lt;br /&gt;
*wales&lt;br /&gt;
*westmidlands&lt;br /&gt;
*yorkshireandthehumber&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*isobaren1&lt;br /&gt;
*isobaren2&lt;br /&gt;
*isobaren3&lt;br /&gt;
&lt;br /&gt;
==== Anzeige von Unwetterkarten ====&lt;br /&gt;
Dies erfolgt ebenfalls durch einem weblink.&lt;br /&gt;
:&amp;lt;code&amp;gt;define &#039;&#039;UnwetterKarteDeutschland&#039;&#039; weblink htmlCode {UWZAsHtmlKarteLand(&amp;quot;&#039;&#039;Unwetterzentrale&#039;&#039;&amp;quot;,&amp;quot;&#039;&#039;Deutschland&#039;&#039;&amp;quot;)}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Download von Unwetterkarten ====&lt;br /&gt;
Um die Karten herunterzuladen um sie beispielsweise mit dem RSS Modul zu nutzen, muss dies am UWZ Device via Attribute konfiguriert werden. &lt;br /&gt;
Hierfür stehen folgende Attribute zur Verfügung:&lt;br /&gt;
*download [0|1]&lt;br /&gt;
*savepath (default:&amp;quot;/tmp/&amp;quot;)&lt;br /&gt;
*maps (leerzeichen separierte Liste der zu speichernden Unwetterkarten)&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &#039;&#039;Unwetterzentrale&#039;&#039; download 1&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &#039;&#039;Unwetterzentrale&#039;&#039; savepath /tmp/&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &#039;&#039;Unwetterzentrale&#039;&#039; maps deutschland europa bayern&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die angegebenen Karten werden bei jedem Lauf erneut heruntergeladen und überschreiben das alte File.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Wetteranimation ====&lt;br /&gt;
Ab der Version 1.4.1 bietet das Modul auch die Möglichkeit diverse Wetteranimationen zu integrieren. Diese können ebenfalls mittels weblink genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
:&amp;lt;code&amp;gt;define &#039;&#039;UnwetterKarteMovie&#039;&#039; weblink htmlCode {UWZAsHtmlMovie(&amp;quot;Unwetterzentrale&amp;quot;,&amp;quot;stroemung&amp;quot;)}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der erste Parameter definiert das zugehörige UWZ Device.&lt;br /&gt;
&lt;br /&gt;
Der zweite Parameter kann einer der folgenden sein:&lt;br /&gt;
&lt;br /&gt;
*niederschlag-wolken&lt;br /&gt;
*stroemung&lt;br /&gt;
*temperatur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*niederschlag-wolken-de&lt;br /&gt;
*stroemung-de&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*niederschlag-wolken-ch&lt;br /&gt;
*stroemung-ch&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*niederschlag-wolken-at&lt;br /&gt;
*stroemung-at&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*niederschlag-wolken-uk&lt;br /&gt;
*stroemung-uk&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [http://www.unwetterzentrale.de Unwetterzentrale] (für Deutschland)&lt;br /&gt;
* [http://unwetter.wetteralarm.at wetteralarm] (für Österreich)&lt;br /&gt;
* Geoservice [http://alertspro.geoservice.meteogroup.de/] zur Bestimmung von Geokoordinaten und Areacode&lt;br /&gt;
* Modulthread im Forum: {{Link2Forum|Topic=51233}}&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=AutoShuttersControl&amp;diff=29534</id>
		<title>AutoShuttersControl</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=AutoShuttersControl&amp;diff=29534"/>
		<updated>2019-02-17T13:42:56Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: /* Attribute in den Rolllädendevices */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuerung von Rollläden&lt;br /&gt;
|ModCategory=Automatisierung&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Automatisierung&lt;br /&gt;
|ModTechName=73_AutoShuttersControl.pm&lt;br /&gt;
|ModOwner=CoolTux ({{Link2FU|13684|Forum}}/[[Benutzer Diskussion:CoolTux|Wiki]])}}&lt;br /&gt;
&lt;br /&gt;
Mit [[AutoShuttersControl]] oder kurz ASC können typische Aufgabenstellungen im Zusammenhang mit Rollläden u.ä. automatisiert werden, wie zum Beispiel das Öffnen bei Sonnenaufgang, Schließen bei Sonnenuntergang oder das Anfahren von Lüftungspositionen beim Öffnen des zugehörigen Fensters. &lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Das Modul befindet sich derzeit noch in der Entwicklung; der jeweils aktuelle Stand ist  diesem {{Link2Forum|Topic=90751|LinkText=&amp;quot;Thread im Forum&amp;quot;}} zu entnehmen.}}&lt;br /&gt;
&lt;br /&gt;
== Basics ==&lt;br /&gt;
Zur Nutzung des Moduls sollten folgende andere FHEM-Devices vorhanden sein:&lt;br /&gt;
* Rollläden&lt;br /&gt;
* Fensterkontakte und &lt;br /&gt;
* Bewohnerstatus auf Basis von Residents/Roomates in englisch. Ersatzweise andere Devices, z.B. Dummys, welche als &#039;&#039;state&#039;&#039; &#039;&#039;home&#039;&#039;, &#039;&#039;asleep&#039;&#039;, &#039;&#039;gotosleep&#039;&#039; und &#039;&#039;awoken&#039;&#039; setzen sowie ein Reading &#039;&#039;lastState&#039;&#039;.&lt;br /&gt;
* Optional:&lt;br /&gt;
** Ein Helligkeitssensor (Steuerung nach Helligkeit und Beschattung)&lt;br /&gt;
** Ein Device zur Bestimmung des Sonnenstands (nur für Beschattungf). Unterstützt werden derzeit [[Astro]] und [[twilight]]&amp;lt;ref&amp;gt;Dabei müssen ggf. in [[global]] auch Angaben zu longitude und latitude vorhanden sein&amp;lt;/ref&amp;gt;. &lt;br /&gt;
** Wenn Feiertage berücksichtigt werden sollen: Ein oder mehrere [[holiday2we]]-Angaben in [[global]] samt entsprechender [[holiday]]-Dateien&amp;lt;ref&amp;gt;Es kann auch z.B. ein Dummy-Device verwendet werden, dieses sollte dann aber auch in einem Reading &#039;&#039;tomorrow&#039;&#039; Angaben zu anstehenden Feiertagen enthalten.&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Bitte verfahren Sie entsprechend, wenn Urlaubs- oder Ferientage wie Feiertage behandelt werden sollen.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Die Einrichtung des Moduls bzw. dessen Funktionalität erfolgt in mehreren Schritten:&lt;br /&gt;
* Definition des ASC-Devices&lt;br /&gt;
* Einstellung zentraler Vorgaben am ASC-Device&lt;br /&gt;
* Markieren der zukünftig zu steuernden Rollladen-Devices&lt;br /&gt;
* Einbinden der Rollladen-Devices in das ASC-Device&lt;br /&gt;
* Einstellen der individuellen Vorgaben je Rollladen (am Rollladen-Device)&lt;br /&gt;
Dabei geht man am einfachsten schrittweise vor und erweitert die Funktionalität nach und nach um die gewünschten Funktionen. Dann benötigt man jeweils nur einen kleinen Teil der vielen per Attribut einstellbaren Optionen, und kann die Auswirkungen der jeweiligen Änderung besser nachvollziehen. &lt;br /&gt;
&lt;br /&gt;
== Einrichtung ==&lt;br /&gt;
{{Hinweis|ASC kann auch verwendet werden, um lediglich Teilaufgaben der Rollladensteuerung zu erfüllen, also z.B. nur das morgendliche Öffnen der Rollläden. Allerdings geht dabei ein erheblicher Teil des Komforts verloren, der dadurch entsteht, dass die Steuerung innerhalb der vollintegrierten Lösung jeweils nachvollzieht, aus welchem Grund eine Fahrt erfolgt war und dies ggf. bei der nächsten Aktion berücksichtigt.}}&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitung ===&lt;br /&gt;
Zunächst sollten die in den [[Basics]] beschriebenen Geräte vorhanden und funktionsfähig sein. &lt;br /&gt;
&lt;br /&gt;
=== Define des ASC-Devices ===&lt;br /&gt;
Es genügt ein einfaches define ohne weitere Parameter.&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; AutoShuttersControl&amp;lt;/code&amp;gt;&lt;br /&gt;
Dies bewirkt neben der Anlage des Devices selbst auch, dass als weiteres globales Attribut &#039;&#039;ASC&#039;&#039; verfügbar wird.&lt;br /&gt;
&lt;br /&gt;
=== Einstellung zentraler Vorgaben ===&lt;br /&gt;
Es stehen am ASC-Device einige Attribute zur Verfügung, über die sich das Verhalten des ASC-Devices insgesamt steuern lässt, z.B. zur Vermeidung von morgendlichen oder abendlichen Fahrten sowie bei Gefahr von Schäden an den Rollläden durch Frost oder zur Reaktion auf Fensterkontakte. Details sind der Commandref zu entnehmen.&lt;br /&gt;
Diese Attribute können auch nachträglich noch geändert werden.&lt;br /&gt;
&lt;br /&gt;
=== Markieren zu steuernder Rollladen-Devices ===&lt;br /&gt;
Um einen oder mehrere Rollläden durch das ASC-Device zu steuern, wird für jeden Rollladen jeweils das neue globale Attribut &#039;&#039;ASC&#039;&#039; gesetzt. Der Wert ist mit 1 oder 2 festzulegen, wobei &#039;&#039;&#039;1&#039;&#039;&#039; bedeutet, dass &lt;br /&gt;
* die Offen-Position kleiner ist als die Geschlossen-Position, also typischerweise 0 &#039;&#039;offen&#039;&#039; bedeutet und 100 für &#039;&#039;geschlossen&#039;&#039; steht&lt;br /&gt;
* eine bestimmte Position mit &#039;&#039;&#039;position&#039;&#039;&#039; angefahren wird, also z.B. &amp;lt;code&amp;gt;set &amp;lt;name&amp;gt; position 70&amp;lt;/code&amp;gt;.&lt;br /&gt;
Dies ist z.B. die  passende Wahl für ROLLO-Devices&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;&#039;2&#039;&#039;&#039; steht für ein umgekehrtes Verhalten und den Befehlsteil &#039;&#039;pct&#039;&#039;, also &#039;&#039;offen&#039;&#039; für &amp;lt;code&amp;gt;set &amp;lt;name&amp;gt; pct 100&amp;lt;/code&amp;gt;. Typischer Vertreter dieses Typs sind HomeMatic (CUL_HM-) Geräte oder die Shelly2-Aktoren.&lt;br /&gt;
&lt;br /&gt;
=== Einbinden in das ASC-Device ===&lt;br /&gt;
Nachdem man das obige Attribut bei einem oder mehreren Rollladen-Devices gesetzt hat, kann mit &lt;br /&gt;
&amp;lt;code&amp;gt;set &amp;lt;name&amp;gt; scanForShutters&amp;lt;/code&amp;gt; ein Suchlauf gestartet werden, mit dem dann diese Rollläden durch das Modul gefunden und in die Steuerungslogik eingebunden werden.&lt;br /&gt;
&lt;br /&gt;
=== Einstellen der individuellen Vorgaben ===&lt;br /&gt;
Nach der Einbindung sind an den Rollladen-Devices weitere Attribute verfügbar, mit denen die für den jeweiligen Rollladen geltenden Einstellungen vorgenommen werden können. &lt;br /&gt;
Die Beschreibung der Attribute ist in der commandref enthalten.&lt;br /&gt;
&lt;br /&gt;
=== Einrichtungsbeispiel ===&lt;br /&gt;
==== Zielsetzung und Vorgaben ====&lt;br /&gt;
Es sollen alle Rollläden und Jalousien in einem Haus innerhalb bestimmter zeitlicher Grenzen Morgens und Abends sonnenstandsabhängig gefahren werden, an den Wochenenden und an Ferientagen soll etwas später geöffnet werden. Es sind Tür- und Fensterkontakte vorhanden (Türkontakte: twoState, Fensterkontakte: threeState), wobei bei jeder Öffnung ein eventuell geschlossener Rollladen geöffnet werden soll. Bei allen Rollladnaktoren, Tür- und Fensterkontakten handelt es sich um CUL_HM-Geräte.&lt;br /&gt;
&lt;br /&gt;
==== Vorarbeiten ==== &lt;br /&gt;
Im global-Device sind Angaben zu latitude und longitude vorhanden, holiday2we wie folgt&amp;lt;ref&amp;gt;ferien ist eine automatisiert erstellte holiday-Datei nach diesem Foren-Beitrag.&amp;lt;/ref&amp;gt;:&lt;br /&gt;
 attr global holiday2we bw,ferien&lt;br /&gt;
Weitere Angaben benötigen wir zunächst nicht, die Festlegung eines Astro-Devices erfolgt hier erst im Rahmen der Beschattung. &lt;br /&gt;
Dann erfolgt das &#039;&#039;Define des ASC-Devices&#039;&#039; wie oben beschrieben:&lt;br /&gt;
&amp;lt;code&amp;gt;define Rollladenautomatik AutoShuttersControl&amp;lt;/code&amp;gt;&lt;br /&gt;
Folgen die einzubindenden Rollladenaktoren einem einheitlichen Namensschema, können diese sodann z.B. mit &lt;br /&gt;
 attr (Jalousie|Rolladen)_.* ASC 2&lt;br /&gt;
auf einen Rutsch mit dem passenden ASC-Typ gekennzeichnet werden. Dann verteilen wir mir &lt;br /&gt;
 set Rollladenautomatik scanForShutters&lt;br /&gt;
die nachfolgend weiter zu bearbeitenden Attribute.&lt;br /&gt;
&lt;br /&gt;
===== Konfiguration des ASC-Devices =====&lt;br /&gt;
Da wir sonnenstandsabhängig Fahrzeiten wollen, legen wir erst einmal fest, dass dies morgens und abends berücksichtigt werden soll:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr Rollladenautomatik ASC_autoAstroModeEvening CIVIL&lt;br /&gt;
attr Rollladenautomatik ASC_autoAstroModeMorning CIVIL&lt;br /&gt;
attr Rollladenautomatik ASC_autoShuttersControlEvening on&lt;br /&gt;
attr Rollladenautomatik ASC_autoShuttersControlMorning on&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Aus der Angabe &#039;&#039;CIVIL&#039;&#039; und den Vorgaben in den einzelnen Rollladen wird dabei mit Hilfe von [[SUNRISE_EL]] die effektive Fahrzeit berechnet, dort finden sich auch weitere Hinweise, zu den meisten anderen Optionen für die ersten beiden Attribute.&lt;br /&gt;
Bei allen Fensteröffnungen soll auf Lüften-Position gefahren werden, also schalten wir diese Funktion ebenfalls zentral an&amp;lt;ref&amp;gt;Sonst wird bei threeState-Sensoren nur bei &#039;&#039;tilted&#039;&#039; gefahren.&amp;lt;/ref&amp;gt;:&lt;br /&gt;
 attr Rollladenautomatik ASC_autoShuttersControlComfort on &lt;br /&gt;
&lt;br /&gt;
Zuletzt legen wir noch einen Temperatur-Sensor fest. Dieser wird beim Frostschutz sowie bei der Beschattung berücksichtigt.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr Rollladenautomatik ASC_temperatureSensor Aussentemperatur_Nord&lt;br /&gt;
attr Rollladenautomatik ASC_temperatureReading temperature&lt;br /&gt;
attr Rollladenautomatik ASC_freezeTemp 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
tbd: Rain&lt;br /&gt;
&lt;br /&gt;
===== Fahrzeiten =====&lt;br /&gt;
Zur Konfiguration der Fahrzeiten bietet es sich an, eine ReadingsGroup zu nutzen, wie unter [[Hilfsmittel]] dargestellt. Alternativ kann man die Zeiten auch manuell in den einzelnen Rollläden hinterlegen.&lt;br /&gt;
&lt;br /&gt;
===== Fensterkontakte =====&lt;br /&gt;
&amp;lt;!-- 2. Schritt:&lt;br /&gt;
Festlegen der Roomates etc.; sollte soweit klar sein, cref ist an sich ok, das Wiki enthält dazu einige weitere Angaben, das ganze ist aber nicht im Sinne einer &amp;quot;Schritt-für-Schritt-Anleitung&amp;quot; ausgeführt: Das mit den Residents (und den Readings) findet sich (nur) im Zusammenhang mit den Voraussetzungen (sollte &amp;quot;man&amp;quot; ergänzen, oder?).&lt;br /&gt;
&lt;br /&gt;
3. Schritt:&lt;br /&gt;
Festlegen der Fensterkontakte&lt;br /&gt;
Von der Einrichtung her nachvollziehbar; unklar ist mir noch, ob auf meine Three-state richtig reagiert wird - habe das mit der neuen Version bisher nur bewußt im Schlafzimmer getestet, da ging der Rollladen beim Fenster-auf nicht hoch; kann aber auch am Status das Roommate-Devices gelegen haben. Muß ich selbst noch testen.&lt;br /&gt;
threeState/tilted: ASC_autoShuttersControlComfort im ASC auf on setzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. Wind&lt;br /&gt;
Ähm, bin nicht auf dem letzten Stand, aber sollte das nicht integriert werden? Passende Attribute finde ich aber keine...&lt;br /&gt;
(Ich habe hier 4 Außenjalousien, die ich bei unterschiedlichen Windgeschwindigkeiten gerne komplett einfahren würde; im Moment macht das noch ein separates notify).&lt;br /&gt;
&lt;br /&gt;
5. Beschattung&lt;br /&gt;
Dann wollte ich mich also an den eigentlichen neuen Teil machen, die Beschattung.&lt;br /&gt;
Wie die ganzen Attribute ineinandergreifen, steht scheinbar nirgends. M.E. ein dringliches todo.&lt;br /&gt;
a) Da finde ich ziemlich zentral ein &amp;quot;ASC_twilightDevice&amp;quot;, ohne dass hier irgendwo (cref/Wiki) mehr erläutert wäre, als dass man es irgendwie im Rahmen der Beschattung benötigt. Sehr aufschlußreich... Da es nicht irgendwas mit Brightness heißt, scheint es sich um was anderes zu handeln (&amp;quot;Informationen zum Sonnenstand&amp;quot;). Aber woher werden dann die Helligkeitsschwellen bedient, die man zentral bzw. an den Rollläden einstellen kann? OK, gesehen, das wird wieder (nur) verteilt an allen einzelnen Rollläden festgelegt. Hm, aber warum das? (Ich habe derzeit eigentlich nur einen Lieferanten für Brightness; es würde mir daher ausreichen, wenn der für alle zentral festlegbar wäre).&lt;br /&gt;
Daher die Frage zu ASC_twilightDevice: Für was wird es noch verwendet und wie im Rahmen der Beschattung?&lt;br /&gt;
Hab&#039;s also erst mal weggelassen, zumal das ausnahmsweise keine explizite Angabe eines Readingsnamens vorsah und es auch irgendwie ungut an das aktuell nicht funktionierende &amp;quot;twilight&amp;quot;-Modul anzuknüpfen scheint.&lt;br /&gt;
&lt;br /&gt;
CT: Um es gleich vorweg zu sagen. ASC_brightnessMinVal und ASC_brightnessMaxVal haben mit der Beschattung gar nichts zu tun.&lt;br /&gt;
Das Astro oder Twilight Modul (je nach dem welches als erstes gefunden wird bei einer automatischen Suche) wird verwendet um die Sonnenposition zu erkennen.&lt;br /&gt;
Azimut und Elevation. Der eigentliche Trigger ist aber in der Tat Brightness. Nur wenn sich der Brightness Wert ändert werden Azimut, Elevation, Temperatur und die Ein und Ausfallswinkel Ausgelesen und/oder Berechnet und basierend auf diesen Werten entschieden ob shading in oder shading out.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
b) Dann habe ich also erst mal die Winkelangaben gemacht. An sich selbsterklärend, aber was mache ich mit den Fenstern auf der Nordseite?&lt;br /&gt;
Auf Risiko haben die jetzt also erst mal alle einen Wert in der Nähe von 0, aber immer noch die Varianz von +/- 85°. Paßt das, oder sollte ich das ändern (so dass keine Werte &amp;lt;0° rauskommen können)?!? Oder gar das Attribut bei den Nordfenstern ganz löschen?&lt;br /&gt;
&lt;br /&gt;
c) Ok, dann gibt es eine Reihe weiterer &amp;quot;ASC_Shading.*&amp;quot;-Attribute. Die sind irgendwie vorbelegt, allerdings wäre es vermutlich hilfreich, wenn wir im Wiki ggf. erklären, wie die Werte zu verstehen sind und diese zusammenwirken.&lt;br /&gt;
&lt;br /&gt;
d) Letztlich scheinen die ASC_brightnessMinVal-etc.-Attribute die eigentich entscheidenen Angaben zu sein. Aber wie wirkt das alles jetzt zusammen?&lt;br /&gt;
Ein paar erläuternde Worte wären hilfreich, sonst muß ich doch Quellcode lesen oder einfach testen...&lt;br /&gt;
&lt;br /&gt;
6. Sonstiges&lt;br /&gt;
Dann gibt&#039;s da noch ein paar weitere Features, die zwar in der cref bzw. im Wiki erwähnt sind, deren Bedeutung sich mir aber nicht auf die Schnelle erschließt, so dass ich nicht beurteilen kann, ob und wie ich das anwende (-n will):&lt;br /&gt;
a) Privacy: Ist (praktisch) nur in der cref drin.&lt;br /&gt;
Möchte jemand ein Anwendungsbeispiel im Wiki ergänzen, damit man besser nachvollziehen kann, was die beiden Attribute bewirken?&lt;br /&gt;
CT: Hier geht es nur darum eine bestimmte Zeit vor dem eigentlichen schließen der Rollläden diese schon mal auf sagen wir 50% zu fahren. Ein Anwendungsfall war gewesen das die Rollläden zur Straße hin mit viel Fußgängerverkehr waren und Abends schon vor dem schließen dieser das Licht drin an ging. Somit konnte man gut rein schauen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
b) BlockingTime&lt;br /&gt;
In welchem Zusammenhang wirkt sich das jeweils aus, wann sollte/kann man das verwenden?&lt;br /&gt;
CT: Das verwendet sich von alleine. Nach einer manuellen Fahrt wird eine vom ASC Modul initiierte Fahrt ausgesetzt. Das geschieht so lange bis die im Attribute angegebene Zeit überschritten ist, eine dann vom ASC Modul initiierte Fahrt wird durchgeführt.&lt;br /&gt;
Genau so wird ein hochfahren eines Rollos durch das ASC Modul nicht mehr ausgeführt wenn es innerhalb der Zeit von ASC_BlockingTime_beforNightClose und das runterfahren wird nicht mehr erfolgen wenn es innerhalb von ASC_BlockingTime_beforDayOpen ist.&lt;br /&gt;
Beispiel: Meine Tochter geht früh aus Haus und Ihre Rollos sind nicht hoch gefahren. Diese fahren auch nicht mehr hoch da die ausschließlich bei home (anwesend) fahren sollen. Nun kommt sie am Nachmittag um 16:23 Uhr nach Hause, eigentlich sollten nun die Rollos fahren. Doch die Sonnenuntergangsfahrt (schließen) wäre schon 16:51 Uhr und damit innerhalb der 3600 ASC_BlockingTime_beforNightClose. Die Rollos bleiben also unten. Es lohnt sich für die paar Minuten einfach nicht mehr.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
c) wiggle&lt;br /&gt;
(OK, das ist klar, man kann mit einem &amp;quot;set &amp;lt;ASC-Device&amp;gt; wiggle&amp;quot; alle Rollladen mit einem entsprechenden Attribut zu einer kurzen Fahrt veranlassen. Gehe mal davon aus, dass um den Wert in Richtung closed gefahren wird, und dann nach Ablauf der Minute wieder um denselben Wert zurück.) Steht nur noch nichts im Wiki zu...&lt;br /&gt;
CT: Fast. Es wird geschaut wo der Rollladen steht und dann wird in die Richtung gefahren wo er den meisten Weg hat. Wenn also zu 70% geschlossen ist, wird er hoch fahren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
d) Partymode, lock-out etc&lt;br /&gt;
(Auch hier: Doku ist etwas verteilt, könnte man im Wiki jeweils unter einem eigenen Unterabschnitt im Zusammenhang darstellen)&lt;br /&gt;
&lt;br /&gt;
Wäre nett, wenn der eine oder andere Licht ins Dunkel bringen könnte, dann kann ich mich auch dran machen, das im Wiki irgendwie zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
CT: Noch mal ein zwei Worte zum Thema Dokumentation. Ich denke im Wiki wären Anwendungsbeispiele ganz gut aufgehoben.&lt;br /&gt;
Gerade die Sache mit dem Privacy. Wozu kann man es verwenden?&lt;br /&gt;
Dann auch SelfDefense. Das bei einem absent nur da die Rollläden geschlossen werden wo das Fenster vergessen wurde zu schließen.&lt;br /&gt;
Beim wechsel in gone wird nur an den makierten Terassentüren der Rollladen runter gefahren. --&amp;gt;&lt;br /&gt;
== Readings ==&lt;br /&gt;
&lt;br /&gt;
===Readings im ASC-Device selbst.===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Datentyp/&amp;lt;BR/&amp;gt;Wertebereich !! Bedeutung  &lt;br /&gt;
|-&lt;br /&gt;
|..._nextAstroTimeEvent || ||Uhrzeit des nächsten Astro-Events, Sonnenauf- oder Sonnenuntergang oder feste Zeit pro Rollonamen &lt;br /&gt;
|-&lt;br /&gt;
|..._lastPosValue || ||zuletzt abgesetzter Fahrbefehl pro Rollonamen&lt;br /&gt;
|-&lt;br /&gt;
|..._lastDelayPosValue || ||zuletzt abgesetzter Fahrbefehl, welcher beim nächsten zulässigen Event ausgeführt wird&lt;br /&gt;
|-&lt;br /&gt;
|partyMode ||on, off || aktiviert den globalen Partymodus. Alle Rollläden, welche das Attribut &#039;&#039;AutoShuttersControl_Partymode&#039;&#039; bei sich auf &#039;&#039;on&#039;&#039; gestellt haben, werden nicht mehr gesteuert. Der letzte Schaltbefehl, welcher durch ein Fensterevent oder Bewohnerstatus an die Rollläden gesendet wurde, wird erst beim off-setzen (set &amp;lt;ASC-Device&amp;gt; partyMode off) ausgeführt&lt;br /&gt;
|-&lt;br /&gt;
|lockOut || on, off ||für das Aktivieren des Aussperrschutzes gemäß des entsprechenden Attributs &#039;&#039;AutoShuttersControl_lock-out&#039;&#039; im jeweiligen Rolladen (siehe Beschreibung bei den Attributen für die Rolladendevices)&lt;br /&gt;
|-&lt;br /&gt;
|room_... || ||Auflistung aller Rollläden, welche in den jeweiligen Räumen gefunden wurden, Bsp.: room_Schlafzimmer,Terrasse&lt;br /&gt;
|-&lt;br /&gt;
|state || ||Status des &amp;lt;ASC-Device&amp;gt; active, enabled, disabled&lt;br /&gt;
|-&lt;br /&gt;
|sunriseTimeWeHoliday|| on,off ||legt fest, ob das Rolladendevice das Attribut &#039;&#039;AutoShuttersControl_Time_Up_WE_Holiday&#039;&#039; beachtet oder nicht&lt;br /&gt;
|-&lt;br /&gt;
|userAttrList || rolled out ||Status der UserAttribute, welche an die Rollläden gesendet werden&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Readings in den Rolllädendevices===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Bedeutung  &lt;br /&gt;
|-&lt;br /&gt;
|ASC_Time_DriveUp ||Sonnenaufgangszeit für das Rollo&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Time_DriveDown ||Sonnenuntergangszeit für das Rollo&lt;br /&gt;
|-&lt;br /&gt;
|ASC_ShuttersLastDrive ||Grund des letzten Fahrens vom Rolladen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Settings ==&lt;br /&gt;
&lt;br /&gt;
===Set Befehle für ASC-Device===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Datentyp/&amp;lt;BR/&amp;gt;Wertebereich !! Beschreibung  &lt;br /&gt;
|-&lt;br /&gt;
|partyMode ||on, off ||aktiviert den globalen Partymodus. Siehe Reading &#039;&#039;partyMode&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|lockOut ||on, off ||aktiviert den globalen Aussperrschutz. Siehe Reading &#039;&#039;lockOut&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|renewSetSunriseSunsetTimer || || erneuert bei allen Rollläden die Zeiten für Sunset und Sunrise und setzt die internen Timer neu.&lt;br /&gt;
|-&lt;br /&gt;
|scanForShutters || ||sucht alle FHEM Devices mit dem Attribut &#039;&#039;AutoShuttersControl&#039;&#039; &#039;&#039;1&#039;&#039; oder &#039;&#039;2&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|sunriseTimeWeHoliday || on,off ||aktiviert/deaktiviert die Beachtung des Attributes &#039;&#039;AutoShuttersControl_Time_Up_WE_Holiday&#039;&#039; für Rollladen-Devices&lt;br /&gt;
|-&lt;br /&gt;
|createNewNotifyDev || ||Legt die interne Struktur für NOTIFYDEV neu an&lt;br /&gt;
|-&lt;br /&gt;
|selfDefence ||on, off||aktiviert/deaktiviert den Selbstschutz: wenn das Residents-Device &#039;&#039;absent&#039;&#039; meldet, &#039;&#039;selfDefence&#039;&#039; aktiv ist und ein Fenster im Haus noch offen steht, wird an diesem Fenster das Rollo runtergefahren&lt;br /&gt;
|-&lt;br /&gt;
|wiggle ||||bewegt einen Rollladen oder alle Rollläden (für Abschreckungszwecke bei der Alarmierung) um &#039;&#039;ASC_WiggleValue&#039;&#039;-%, und nach 1 Minute wieder zurück zur Ursprungsposition&lt;br /&gt;
|-&lt;br /&gt;
|||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Get ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| showShuttersInformations ||zeigt eine Übersicht der Automatik-Fahrzeiten&lt;br /&gt;
|-&lt;br /&gt;
| showNotifyDevsInformations ||zeigt eine Übersicht der abgelegten NOTIFYDEV Struktur. Dient zur Kontrolle&lt;br /&gt;
|}&lt;br /&gt;
== Attribute ==&lt;br /&gt;
&lt;br /&gt;
===Attribute im AutoShuttersControl Device selbst.===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Datentyp/&amp;lt;BR/&amp;gt;Wertebereich !! Default-Wert !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|ASC_antifreezeTemp || || ||Temperatur, ab welcher der Frostschutz greift und das Rollo nicht mehr fährt. Der letzte Fahrbefehl wird gespeichert&lt;br /&gt;
|-&lt;br /&gt;
|ASC_autoAstroModeEvening ||aktuell REAL, CIVIL, NAUTIC, ASTRONOMIC || || (in genau dieser Schreibweise)&lt;br /&gt;
|-&lt;br /&gt;
|ASC_autoAstroModeEveningHorizon || || || Höhe über Horizont, wenn beim Attribut &#039;&#039;AutoShuttersControl_autoAstroModeEvening&#039;&#039; &#039;&#039;HORIZON&#039;&#039; ausgewählt&lt;br /&gt;
|-&lt;br /&gt;
|ASC_autoAstroModeMorning ||aktuell REAL, CIVIL, NAUTIC, ASTRONOMIC || ||(in genau dieser Schreibweise)&lt;br /&gt;
|-&lt;br /&gt;
|ASC_autoAstroModeMorningHorizon || || ||Höhe über Horizont, wenn beim Attribut &#039;&#039;AutoShuttersControl_autoAstroModeMorning&#039;&#039; &#039;&#039;HORIZON&#039;&#039; ausgewählt&lt;br /&gt;
|-&lt;br /&gt;
|ASC_autoShuttersControlComfort ||on, off || ||aktiviert die Komfortfunktion. Bedeutet, dass ein Rollladen mit einem threestate (Drehgriff-) Sensor am Fenster beim Öffnen in die &amp;quot;Komfortposition&amp;quot; fährt. Diese wird beim Rollladendevice über das Attribut &#039;&#039;AutoShuttersControl_Pos_after_ComfortOpen&#039;&#039; eingestellt.&lt;br /&gt;
|- &lt;br /&gt;
|ASC_autoShuttersControlEvening ||on, off || ||ob Abends die Rollläden automatisch zeitgesteuert werden sollen&lt;br /&gt;
|-&lt;br /&gt;
|ASC_autoShuttersControlMorning ||on, off || ||ob Morgens die Rollläden automatisch zeitgesteuert werden sollen&lt;br /&gt;
|-&lt;br /&gt;
|ASC_temperatureReading || || ||Reading für die Außentemperatur&lt;br /&gt;
|-&lt;br /&gt;
|ASC_temperatureSensor || || ||Device für die Außentemperatur&lt;br /&gt;
|-&lt;br /&gt;
|ASC_timeUpHolidayDevice || || ||Device zur Urlaubserkennung oder Sonstiges / muss &#039;&#039;0&#039;&#039; oder &#039;&#039;1&#039;&#039; im Reading &#039;&#039;state&#039;&#039; beinhalten.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_residentsDevice|| || ||Devicenamen des Residents-Device der obersten Ebene&lt;br /&gt;
|-&lt;br /&gt;
|ASC_residentsDeviceReading|| || ||Status Reading des Residents-Device der obersten Ebene&lt;br /&gt;
|-&lt;br /&gt;
|ASC_brightnessMinVal|| || ||minimaler Lichtwert, bei dem Schaltbedingungen noch geprüft werden sollen&lt;br /&gt;
|-&lt;br /&gt;
|ASC_brightnessMaxVal || || ||maximaler Lichtwert, bei dem Schaltbedingungen noch geprüft werden sollen&lt;br /&gt;
|-&lt;br /&gt;
|ASC_rainSensorDevice || || ||Device, welches bei Regen getriggert wird&lt;br /&gt;
|-&lt;br /&gt;
|ASC_rainSensorReading || || ||das ensprechende Reading zum Regendevice&lt;br /&gt;
|-&lt;br /&gt;
|ASC_rainSensorShuttersClosedPos || || ||Position in pct, welche der Rollladen bei Regen anfahren soll &lt;br /&gt;
|-&lt;br /&gt;
|ASC_shuttersDriveOffset  || || ||maximale zufällige Verzögerung in Sekunden bei der Berechnung der Fahrzeiten, &#039;&#039;0&#039;&#039; bedeutet keine Verzögerung&lt;br /&gt;
|-&lt;br /&gt;
|ASC_twilightDevice || || ||Device, welches Informationen zum Sonnenstand liefert, wird unter anderem für die Beschattung verwendet.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_expert || || ||bei &#039;&#039;1&#039;&#039; werden erweiterte Informationen bezüglich des NotifyDevs unter &#039;&#039;set&#039;&#039; und &#039;&#039;get&#039;&#039; angezeigt&lt;br /&gt;
|-&lt;br /&gt;
| || || ||&lt;br /&gt;
|-&lt;br /&gt;
| || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Attribute in den Rolllädendevices===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Datentyp/&amp;lt;BR/&amp;gt;Wertebereich !! Default-Wert !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|ASC || 0, 1, 2|| ||0 = &amp;quot;kein Anlegen der Attribute beim ersten Scan bzw. keine Beachtung eines Fahrbefehles&amp;quot;,1 = &amp;quot;Inverse oder Rollo - Bsp.: Rollo Oben 0, Rollo Unten 100 und der Befehl zum prozentualen Fahren ist position&amp;quot;,2 = &amp;quot;Homematic Style - Bsp.: Rollo Oben 100, Rollo Unten 0 und der Befehl zum prozentualen Fahren ist pct&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Antifreeze || soft, am, pm, hard, off|| ||Frostschutz, wenn &#039;&#039;soft&#039;&#039; fährt der Rollladen in die &#039;&#039;ASC_Antifreeze_Pos&#039;&#039;, bei &#039;&#039;hard/am/pm&#039;&#039; wird gar nicht oder innerhalb der entsprechenden Tageszeit nicht gefahren&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Antifreeze_Pos || || ||Position, die angefahren werden soll, wenn der Fahrbefehl komplett schließen lautet, aber der Frostschutz aktiv ist&lt;br /&gt;
|-&lt;br /&gt;
|ASC_AutoAstroModeEvening ||REAL, CIVIL, NAUTIC, ASTRONOMIC|| ||aktuell REAL,CIVIL,NAUTIC,ASTRONOMIC&lt;br /&gt;
|-&lt;br /&gt;
|ASC_AutoAstroModeEveningHorizon || || ||Höhe über Horizont, wenn beim Attribut &#039;&#039;ASC_autoAstroModeEvening&#039;&#039; &#039;&#039;HORIZON&#039;&#039; ausgewählt ist&lt;br /&gt;
|-&lt;br /&gt;
|ASC_AutoAstroModeMorning ||REAL, CIVIL, NAUTIC, ASTRONOMIC|| ||aktuell REAL,CIVIL,NAUTIC,ASTRONOMIC&lt;br /&gt;
|-&lt;br /&gt;
|ASC_AutoAstroModeMorningHorizon || || ||Höhe über Horizont, wenn beim Attribut &#039;&#039;ASC_autoAstroModeMorning&#039;&#039; &#039;&#039;HORIZON&#039;&#039; ausgewählt ist&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Closed_Pos || || ||in 10er Schritten von 0 bis 100,default Vorgabe ist abhängig vom Attribut &#039;&#039;ASC&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Down || astro, time, brightness || ||bei &#039;&#039;astro&#039;&#039; wird Sonnenuntergang berechnet, bei &#039;&#039;time&#039;&#039; wird der Wert aus &#039;&#039;ASC_Time_Down_Early&#039;&#039; als Fahrzeit verwendet und bei &#039;&#039;brightness&#039;&#039; muss &#039;&#039;ASC_Time_Down_Early&#039;&#039; und &#039;&#039;ASC_Time_Down_Late&#039;&#039; korrekt gesetzt werden. Der Timer läuft dann nach &#039;&#039;ASC_Time_Down_Late&#039;&#039;-Zeit,es wird aber in der Zeit zwischen &#039;&#039;ASC_Time_Down_Early&#039;&#039; und &#039;&#039;ASC_Time_Down_Late&#039;&#039; geschaut, ob die als Attribut im Moduldevice hinterlegte &#039;&#039;ASC_brightnessMinVal&#039;&#039; erreicht wurde. Wenn ja, wird der Rolladen runter gefahren&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Mode_Down ||always, home, absent, off || ||wann darf die Automatik herunterfahren. immer, niemals oder bei Abwesenheit des Roommate (ist kein Roommate und &#039;&#039;absent&#039;&#039; eingestellt, wird gar nicht gesteuert)&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Mode_Up ||always, home, absent, off || ||wann darf die Automatik hochfahren. immer, niemals oder bei Abwesenheit des Roommate (ist kein Roommate und &#039;&#039;absent&#039;&#039; eingestellt, wird gar nicht gesteuert)&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Drive_Offset || || ||maximale zufällige Verzögerung in Sekunden bei der Berechnung der Fahrzeiten, &#039;&#039;0&#039;&#039; bedeutet sofort, &#039;&#039;-1&#039;&#039; bedeutet, dass das gleichwertige Attribut aus dem ASC-Device ausgewertet werden soll&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Open_Pos || || ||in 10er-Schritten von 0 bis 100, default Vorgabe ist abhängig vom Attribut &#039;&#039;ASC&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Partymode || on, off || ||schaltet den Partymodus an oder aus. Wird dann am ASC Device &#039;&#039;set &amp;lt;ASC-DEVICE&amp;gt; partyMode on&#039;&#039; geschaltet, werden alle Fahrbefehle an den Rollläden, welche das Attribut auf &#039;&#039;on&#039;&#039; haben, zwischengespeichert und erst später ausgeführt&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Pos_Reading || || ||Name des Readings, welches die Position des Rollladen in Prozent angibt. Wird bei unbekannten Device-Typen auch als &#039;&#039;set&#039;&#039; Befehl zum Fahren verwendet&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Pos_after_ComfortOpen || || ||in 10er-Schritten von 0 bis 100, default Vorgabe ist abhängig vom Attribut &#039;&#039;ASC&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Roommate_Reading || || ||Reading des Roommate-Device, welches den Status wieder gibt&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Roommate_Device || || ||mit Komma getrennte Namen des/der Roommate-Device/s welche den/die Bewohner des Rollladen-Raumes wiedergibt. Macht nur Sinn in Schlaf- oder Kinderzimmern&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Time_Down_Early || || ||Sunset früheste Zeit zum Runterfahren&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Time_Down_Late || || ||Sunset späteste Zeit zum Runterfahren&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Time_Up_Early || || ||Sunrise früheste Zeit zum Hochfahren&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Time_Up_Late || || ||Sunrise späteste Zeit zum Hochfahren&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Time_Up_WE_Holiday || || ||Sunrise früheste Zeit zum Hochfahren am Wochenende und/oder Urlaub (holiday2we wird beachtet).&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Up || astro, time, brightness || ||bei &#039;&#039;astro&#039;&#039; wird Sonnenaufgang berechnet, bei &#039;&#039;time&#039;&#039; wird der Wert aus &#039;&#039;ASC_Time_Up_Early&#039;&#039; als Fahrzeit verwendet und bei &#039;&#039;brightness&#039;&#039; müssen &#039;&#039;ASC_Time_Up_Early&#039;&#039; und &#039;&#039;ASC_Time_Up_Late&#039;&#039; korrekt gesetzt werden. Der Timer läuft dann nach &#039;&#039;ASC_Time_Up_Late&#039;&#039;-Zeit, es wird aber in der Zeit zwischen &#039;&#039;ASC_Time_Up_Early&#039;&#039; und &#039;&#039;ASC_Time_Up_Late&#039;&#039; geschaut, ob die als Attribut im Moduldevice hinterlegte &#039;&#039;ASC_brightnessMinVal&#039;&#039; erreicht wurde. Wenn ja, wird der Rolladen runter gefahren&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Ventilate_Pos || || ||in 10er-Schritten von 0 bis 100, default Vorgabe ist abhängig vom Attribut &#039;&#039;ASC&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Ventilate_Window_Open || || ||auf lüften, wenn das Fenster gekippt/geöffnet wird und aktuelle Position unterhalb der Lüften-Position ist&lt;br /&gt;
|-&lt;br /&gt;
|ASC_WindowRec || || ||Name des Fensterkontakts, an welchen Fenster der Rollladen angebracht ist. Sein Reading &#039;&#039;state&#039;&#039; muss die Werte &#039;&#039;open&#039;&#039;, &#039;&#039;closed&#039;&#039; oder &#039;&#039;tilted&#039;&#039; enthalten.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_WindowRec_subType || || ||Typ des verwendeten Fensterkontakts: &#039;&#039;twostate&#039;&#039; (optisch oder magnetisch) oder &#039;&#039;threestate&#039;&#039; (Drehgriffkontakt)&lt;br /&gt;
|-&lt;br /&gt;
|ASC_lock-out || soft, hard || ||stellt entsprechend den Aussperrschutz ein. Bei global aktiven Aussperrschutz (&#039;&#039;set ASC-Device lockOut soft&#039;&#039;) und einem Fensterkontakt &#039;&#039;open&#039;&#039; bleibt dann der Rolladen oben. Dies gilt nur bei Steuerbefehle über das ASC-Modul. Stellt man global auf &#039;&#039;hard&#039;&#039;, wird bei entsprechender Möglichkeit versucht, den Rollladen hardwareseitig zu blockieren. Dann ist auch ein Fahren über die Taster nicht mehr möglich.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_lock-outCmd || inhibit, blocked || ||set Befehl für das Rolladen-Device zum Sperren per Hardware. Der Befehl wird verwendet, wenn &#039;&#039;ASC_lock-out&#039;&#039; auf &#039;&#039;hard&#039;&#039; gesetzt ist&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Self_Defense_Exclude || on, off || ||bei &#039;&#039;on&#039;&#039; wird dieser Rolladen bei aktiven &#039;&#039;selfDefence&#039;&#039; und offenen Fenster nicht runter gefahren, wenn Residents absent ist&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Shading_Brightness_Sensor || || ||Sensor-Device, welches für die Lichtwerte verwendet wird. ACHTUNG! Findet auch Verwendung bei ASC_Down - brightness&lt;br /&gt;
|-&lt;br /&gt;
|ASC_BrightnessMinVal || || ||minimaler Lichtwert, bei dem Schaltbedingungen noch geprüft werden sollen / wird der Wert von &#039;&#039;-1&#039;&#039; nicht geändert, so wird automatisch der Wert aus dem Moduldevice genommen&lt;br /&gt;
|-&lt;br /&gt;
|ASC_BrightnessMaxVal || || ||maximaler Lichtwert, bei dem Schaltbedingungen noch geprüft werden sollen / wird der Wert von &#039;&#039;-1&#039;&#039; nicht geändert, so wird automatisch der Wert aus dem Moduldevice genommen&lt;br /&gt;
|-&lt;br /&gt;
|ASC_ShuttersPlace || window, terrace || ||wenn dieses Attribut auf &#039;&#039;terrace&#039;&#039; gesetzt ist und das Residents-Device in den Status &#039;&#039;gone&#039;&#039; geht und &#039;&#039;selfDefence&#039;&#039; aktiv ist, wird das Rollo geschlossen&lt;br /&gt;
|-  &lt;br /&gt;
|ASC_WiggleValue || || ||Wert, um welchen sich die Position des Rollladens bei &#039;&#039;Wiggle&#039;&#039; ändern soll &lt;br /&gt;
|-&lt;br /&gt;
| || || ||&lt;br /&gt;
|-  &lt;br /&gt;
| || || ||&lt;br /&gt;
|-&lt;br /&gt;
| || || ||    &lt;br /&gt;
|-  &lt;br /&gt;
| || || ||&lt;br /&gt;
|-&lt;br /&gt;
| || || ||    &lt;br /&gt;
|-  &lt;br /&gt;
| || || ||&lt;br /&gt;
|-&lt;br /&gt;
| || || ||        &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Hilfsmittel Allgemein==&lt;br /&gt;
Achtung: Die Device-Namen sind auf die entsprechende Konfiguration des einzelnen Anzupassen.&lt;br /&gt;
&lt;br /&gt;
=== Hilfsmittel Übersicht ===&lt;br /&gt;
&lt;br /&gt;
 define ASC_Jalousie_Info weblink htmlCode {AutoShuttersControl::GetShuttersInformation($defs{&#039;JalousieControl&#039;})}&lt;br /&gt;
&lt;br /&gt;
[[Datei:ASC Overview.JPG|600px|]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hilfsmittel Reading Group für Homematic Devices==&lt;br /&gt;
readingsGroup, um die diversen Level einzustellen&lt;br /&gt;
&lt;br /&gt;
Erfolgreich getestet mit Homematic Devices, Stand 2019-01-28 no_Legend&lt;br /&gt;
&lt;br /&gt;
Achtung: Codezeilen wurden aus der Config Datei kopiert.&lt;br /&gt;
 &lt;br /&gt;
[[Datei:RG AutoShuttersControl Homematic.png|600px|]]&lt;br /&gt;
&lt;br /&gt;
 define rg_ASC_Rollaeden_Level readingsGroup &amp;lt;Gerät&amp;gt;,&amp;lt;ASC&amp;gt;,&amp;lt;Antifreeze&amp;gt;,&amp;lt;Antifreeze_Pos&amp;gt;,&amp;lt;Closed_Pos&amp;gt;,&amp;lt;Open_Pos&amp;gt;,&amp;lt;ASC_Ventilate_Pos&amp;gt; \&lt;br /&gt;
 (.*Rollladen.*|.*Rollladen|Jalousie_.*):?ASC,?ASC_Antifreeze,?ASC_Antifreeze_Pos,?ASC_Closed_Pos,?ASC_Open_Pos,?ASC_Ventilate_Pos&lt;br /&gt;
 setuuid rg_ASC_Rollaeden_Level 5c4308e1-f33f-abd1-167d-cc1b5f137cf793c8&lt;br /&gt;
 attr rg_ASC_Rollaeden_Level commands {ASC =&amp;gt; &#039;ASC:0,1,2&#039;,\&lt;br /&gt;
 ASC_Antifreeze =&amp;gt; &#039;ASC_Antifreeze:off,soft,hard,am,pm&#039;,\&lt;br /&gt;
 ASC_Antifreeze_Pos =&amp;gt;&#039;ASC_Antifreeze_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100&#039;, \&lt;br /&gt;
 ASC_Closed_Pos =&amp;gt; &#039;ASC_Closed_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100&#039;, \&lt;br /&gt;
 ASC_Open_Pos =&amp;gt; &#039;ASC_Open_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100&#039;, \&lt;br /&gt;
 ASC_Ventilate_Pos =&amp;gt; &#039;ASC_Ventilate_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100&#039;}&lt;br /&gt;
 attr rg_ASC_Rollaeden_Level room 9.72_Rolladen&lt;br /&gt;
&lt;br /&gt;
 define rg_ASC_Rollaeden_Times readingsGroup &amp;lt;Gerät&amp;gt;,&amp;lt;Position&amp;gt;,&amp;lt;Time_Up_Early&amp;gt;,&amp;lt;Time_Up_Late&amp;gt;,&amp;lt;Time_Up_WE/Hol&amp;gt;,&amp;lt;Time_Down_Early&amp;gt;,&amp;lt;Time_Down_Late&amp;gt;,&amp;lt;Mode_Down&amp;gt;,&amp;lt;Mode_Up&amp;gt; \&lt;br /&gt;
 (.*Rollladen.*|.*Rollladen|Jalousie_.*):level,?ASC_Time_Up_Early,?ASC_Time_Up_Late,?ASC_Time_Up_WE_Holiday,?ASC_Time_Down_Early,?ASC_Time_Down_Late,?ASC_Mode_Down,?ASC_Mode_Up&lt;br /&gt;
 setuuid rg_ASC_Rollaeden_Times 5c4308e1-f33f-abd1-94a7-fbf717635760f863&lt;br /&gt;
 attr rg_ASC_Rollaeden_Times commands {level =&amp;gt; &#039;pct:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100&#039;, \&lt;br /&gt;
 ASC_Time_Down_Early =&amp;gt; &#039;ASC_Time_Down_Early:15:00,15:15,15:30,15:45,16:00,16:15,16:30,16:45,17:00,17:15,17:30,17:45,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00&#039;, \&lt;br /&gt;
 ASC_Time_Down_Late  =&amp;gt; &#039;ASC_Time_Down_Late:19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:15,23:30&#039;, \&lt;br /&gt;
 ASC_Time_Up_WE_Holiday =&amp;gt; &#039;ASC_Time_Up_WE_Holiday:06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00&#039;,\&lt;br /&gt;
 ASC_Time_Up_Early =&amp;gt; &#039;ASC_Time_Up_Early:05:00,05:05,05:30,05:45,06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00&#039;,  \&lt;br /&gt;
 ASC_Time_Up_Late =&amp;gt; &#039;ASC_Time_Up_Late:06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00&#039;, \&lt;br /&gt;
 ASC_Mode_Down =&amp;gt; &#039;ASC_Mode_Down:always,absent,off&#039;, \&lt;br /&gt;
 ASC_Mode_Up =&amp;gt; &#039;ASC_Mode_Up:always,absent,off&#039; }&lt;br /&gt;
 attr rg_ASC_Rollaeden_Times room 9.72_Rolladen&lt;br /&gt;
&lt;br /&gt;
=== Hilfsmittel Reading Group für FIBARO Roller Shutter FGR-222 Devices===&lt;br /&gt;
&lt;br /&gt;
Getestet von majestro84 https://forum.fhem.de/index.php/topic,92628.msg897099.html#msg897099&lt;br /&gt;
&lt;br /&gt;
Stand 2019-01-28  &lt;br /&gt;
&lt;br /&gt;
[[Datei:ASC Jalousien Level.JPG|600px|]]&lt;br /&gt;
&lt;br /&gt;
[[Datei:ASC Jalousien Times.JPG|600px|]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 define ASC_Jalousien_Times readingsGroup &amp;lt;Gerät&amp;gt;,&amp;lt;Stand&amp;gt;,&amp;lt;Time_Up_Early&amp;gt;,&amp;lt;Time_Up_WE&amp;gt;,&amp;lt;Time_Up_Late&amp;gt;,&amp;lt;Time_Down_Early&amp;gt;,&amp;lt;Time_Down_Late&amp;gt;,&amp;lt;Mode_Down&amp;gt;,&amp;lt;Mode_Up&amp;gt;,&amp;lt;PartyMode&amp;gt;,&amp;lt;LockOut&amp;gt; (.*_Jalousie.*):position,?ASC_Time_Up_Early,?ASC_Time_Up_WE_Holiday,?ASC_Time_Up_Late,?ASC_Time_Down_Early,?ASC_Time_Down_Late,?ASC_Mode_Down,?ASC_Mode_Up,?ASC_Partymode,?ASC_LockOut&lt;br /&gt;
 attr ASC_Jalousien_Times commands {position =&amp;gt; &#039;dim:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,99&#039;,&lt;br /&gt;
 ASC_Mode_Down =&amp;gt; &#039;ASC_Mode_Down:always,absent,off&#039;,&lt;br /&gt;
 ASC_Mode_Up =&amp;gt; &#039;ASC_Mode_Up:always,absent,off&#039;,&lt;br /&gt;
 ASC_Partymode =&amp;gt; &#039;ASC_Partymode:on,off&#039;,&lt;br /&gt;
 ASC_LockOut =&amp;gt; &#039;ASC_LockOut:soft,hard,off&#039;,&lt;br /&gt;
 ASC_Time_Down_Early =&amp;gt; &#039;ASC_Time_Down_Early:15:00,15:15,15:30,15:45,16:00,16:15,16:30,16:45,17:00,17:15,17:30,17:45,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00&#039;, &lt;br /&gt;
 ASC_Time_Down_Late  =&amp;gt; &#039;ASC_Time_Down_Late:20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:15,23:30&#039;,&lt;br /&gt;
 ASC_Time_Up_Early =&amp;gt; &#039;ASC_Time_Up_Early:05:00,05:05,05:30,05:45,06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00&#039;,&lt;br /&gt;
 ASC_Time_Up_Late =&amp;gt;&#039;ASC_Time_Up_Late:06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00&#039;,&lt;br /&gt;
 ASC_Time_Up_WE_Holiday =&amp;gt; &#039;ASC_Time_Up_WE_Holiday:06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00&#039;}&lt;br /&gt;
 attr ASC_Jalousien_Times room Jalousien&lt;br /&gt;
&lt;br /&gt;
 define Jalousien_Level readingsGroup &amp;lt;Gerät&amp;gt;,&amp;lt;Closed_Pos&amp;gt;,&amp;lt;Open_Pos&amp;gt;,&amp;lt;Comfort_Pos&amp;gt;,&amp;lt;Ventilate_Pos&amp;gt;,&amp;lt;PrivacyDown_Pos&amp;gt;,&amp;lt;Shading_Pos&amp;gt; (.*_Jalousie.*):?ASC_Closed_Pos,?ASC_Open_Pos,?ASC_ComfortOpen_Pos,?ASC_Ventilate_Pos,?ASC_PrivacyDown_Pos,?ASC_Shading_Pos&lt;br /&gt;
 attr Jalousien_Level commands { ASC_Closed_Pos =&amp;gt; &#039;ASC_Closed_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,99&#039;,&lt;br /&gt;
 ASC_Open_Pos =&amp;gt; &#039;ASC_Open_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,99&#039;,&lt;br /&gt;
 ASC_ComfortOpen_Pos =&amp;gt; &#039;ASC_ComfortOpen_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,99&#039;,&lt;br /&gt;
 ASC_Ventilate_Pos =&amp;gt; &#039;ASC_Ventilate_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,99&#039;,&lt;br /&gt;
 ASC_PrivacyDown_Pos =&amp;gt; &#039;ASC_PrivacyDown_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,99&#039;,&lt;br /&gt;
 ASC_Shading_Pos =&amp;gt; &#039;ASC_Shading_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,99&#039;}&lt;br /&gt;
 attr Jalousien_Level room Jalousien&lt;br /&gt;
&lt;br /&gt;
=== Hilfsmittel ===&lt;br /&gt;
tbd&lt;br /&gt;
&lt;br /&gt;
readingsGroup, um die diversen Level einzustellen: &lt;br /&gt;
&lt;br /&gt;
 define rg_ASC_Rollaeden_Level readingsGroup &amp;lt;Gerät&amp;gt;,&amp;lt;Closed_Pos&amp;gt;,&amp;lt;Open_Pos&amp;gt;,&amp;lt;Shading_Pos&amp;gt;,&amp;lt;Ventilate_Pos&amp;gt; (Rolladen_.*|Jalousie_.*)..:?ASC_Closed_Pos,?ASC_Open_Pos,?ASC_Shading_Pos,?ASC_Ventilate_Pos&lt;br /&gt;
 attr rg_ASC_Rollaeden_Level commands { ASC_Closed_Pos =&amp;gt; &#039;ASC_Closed_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100&#039;,\&lt;br /&gt;
 ASC_Open_Pos =&amp;gt; &#039;ASC_Open_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100&#039;,\&lt;br /&gt;
 ASC_Shading_Pos =&amp;gt; &#039;ASC_Shading_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100&#039;,\&lt;br /&gt;
 ASC_Ventilate_Pos =&amp;gt; &#039;ASC_Ventilate_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100&#039;}&lt;br /&gt;
[[Datei:ReadingsGroup ASC Level.png|600px|]]&lt;br /&gt;
readingsGroup, um die diversen Zeiten einzustellen:&lt;br /&gt;
&lt;br /&gt;
 define rg_ASC_Rollaeden_Times readingsGroup &amp;lt;Gerät&amp;gt;,&amp;lt;Stand&amp;gt;,&amp;lt;Time_Up_Early&amp;gt;,&amp;lt;Time_Up_WE&amp;gt;,&amp;lt;Time_Up_Late&amp;gt;,&amp;lt;Time_Down_Early&amp;gt;,&amp;lt;Time_Down_Late&amp;gt;,&amp;lt;Mode_Down&amp;gt;,&amp;lt;Mode_Up&amp;gt; (Rolladen_.*|Jalousie_.*)..:level,?ASC_Time_Up_Early,?ASC_Time_Up_WE_Holiday,?ASC_Time_Up_Late,?ASC_Time_Down_Early,?ASC_Time_Down_Late,?ASC_Mode_Down,?ASC_Mode_Up&lt;br /&gt;
 attr rg_ASC_Rollaeden_Times commands {level =&amp;gt; &#039;pct:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100&#039;, \&lt;br /&gt;
 ASC_Mode_Down =&amp;gt; &#039;ASC_Mode_Down:always,absent,off&#039;,\&lt;br /&gt;
 ASC_Mode_Up =&amp;gt; &#039;ASC_Mode_Up:always,absent,off&#039;,\&lt;br /&gt;
 ASC_Time_Down_Early =&amp;gt; &#039;ASC_Time_Down_Early:15:00,15:15,15:30,15:45,16:00,16:15,16:30,16:45,17:00,17:15,17:30,17:45,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00&#039;, \&lt;br /&gt;
 ASC_Time_Down_Late  =&amp;gt; &#039;ASC_Time_Down_Late:20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:15,23:30&#039;,\&lt;br /&gt;
 ASC_Time_Up_Early =&amp;gt; &#039;ASC_Time_Up_Early:05:00,05:05,05:30,05:45,06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00&#039;, \&lt;br /&gt;
 ASC_Time_Up_Late =&amp;gt;&#039;ASC_Time_Up_Late:06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00&#039;,ASC_Time_Up_WE_Holiday =&amp;gt; &#039;ASC_Time_Up_WE_Holiday:06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00&#039;}&lt;br /&gt;
[[Datei:ReadingsGroup ASC Times.png|600px|]]&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* {{Link2Forum|Topic=92628|LinkText=&amp;quot;Thread zum Modul im Forum&amp;quot;}}&lt;br /&gt;
* {{Link2Forum|Topic=90751|LinkText=&amp;quot;Thread zur Entwicklung im Forum&amp;quot;}} &lt;br /&gt;
* {{Link2Forum|Topic=73964|LinkText=&amp;quot;Thread zu den Scripten von user cluni&amp;quot;}}, die der Entwicklung des Moduls zugrunde liegen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:Rollladensteuerung]]&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=AutoShuttersControl&amp;diff=29533</id>
		<title>AutoShuttersControl</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=AutoShuttersControl&amp;diff=29533"/>
		<updated>2019-02-17T13:41:12Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: /* Attribute in den Rolllädendevices */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuerung von Rollläden&lt;br /&gt;
|ModCategory=Automatisierung&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Automatisierung&lt;br /&gt;
|ModTechName=73_AutoShuttersControl.pm&lt;br /&gt;
|ModOwner=CoolTux ({{Link2FU|13684|Forum}}/[[Benutzer Diskussion:CoolTux|Wiki]])}}&lt;br /&gt;
&lt;br /&gt;
Mit [[AutoShuttersControl]] oder kurz ASC können typische Aufgabenstellungen im Zusammenhang mit Rollläden u.ä. automatisiert werden, wie zum Beispiel das Öffnen bei Sonnenaufgang, Schließen bei Sonnenuntergang oder das Anfahren von Lüftungspositionen beim Öffnen des zugehörigen Fensters. &lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Das Modul befindet sich derzeit noch in der Entwicklung; der jeweils aktuelle Stand ist  diesem {{Link2Forum|Topic=90751|LinkText=&amp;quot;Thread im Forum&amp;quot;}} zu entnehmen.}}&lt;br /&gt;
&lt;br /&gt;
== Basics ==&lt;br /&gt;
Zur Nutzung des Moduls sollten folgende andere FHEM-Devices vorhanden sein:&lt;br /&gt;
* Rollläden&lt;br /&gt;
* Fensterkontakte und &lt;br /&gt;
* Bewohnerstatus auf Basis von Residents/Roomates in englisch. Ersatzweise andere Devices, z.B. Dummys, welche als &#039;&#039;state&#039;&#039; &#039;&#039;home&#039;&#039;, &#039;&#039;asleep&#039;&#039;, &#039;&#039;gotosleep&#039;&#039; und &#039;&#039;awoken&#039;&#039; setzen sowie ein Reading &#039;&#039;lastState&#039;&#039;.&lt;br /&gt;
* Optional:&lt;br /&gt;
** Ein Helligkeitssensor (Steuerung nach Helligkeit und Beschattung)&lt;br /&gt;
** Ein Device zur Bestimmung des Sonnenstands (nur für Beschattungf). Unterstützt werden derzeit [[Astro]] und [[twilight]]&amp;lt;ref&amp;gt;Dabei müssen ggf. in [[global]] auch Angaben zu longitude und latitude vorhanden sein&amp;lt;/ref&amp;gt;. &lt;br /&gt;
** Wenn Feiertage berücksichtigt werden sollen: Ein oder mehrere [[holiday2we]]-Angaben in [[global]] samt entsprechender [[holiday]]-Dateien&amp;lt;ref&amp;gt;Es kann auch z.B. ein Dummy-Device verwendet werden, dieses sollte dann aber auch in einem Reading &#039;&#039;tomorrow&#039;&#039; Angaben zu anstehenden Feiertagen enthalten.&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Bitte verfahren Sie entsprechend, wenn Urlaubs- oder Ferientage wie Feiertage behandelt werden sollen.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Die Einrichtung des Moduls bzw. dessen Funktionalität erfolgt in mehreren Schritten:&lt;br /&gt;
* Definition des ASC-Devices&lt;br /&gt;
* Einstellung zentraler Vorgaben am ASC-Device&lt;br /&gt;
* Markieren der zukünftig zu steuernden Rollladen-Devices&lt;br /&gt;
* Einbinden der Rollladen-Devices in das ASC-Device&lt;br /&gt;
* Einstellen der individuellen Vorgaben je Rollladen (am Rollladen-Device)&lt;br /&gt;
Dabei geht man am einfachsten schrittweise vor und erweitert die Funktionalität nach und nach um die gewünschten Funktionen. Dann benötigt man jeweils nur einen kleinen Teil der vielen per Attribut einstellbaren Optionen, und kann die Auswirkungen der jeweiligen Änderung besser nachvollziehen. &lt;br /&gt;
&lt;br /&gt;
== Einrichtung ==&lt;br /&gt;
{{Hinweis|ASC kann auch verwendet werden, um lediglich Teilaufgaben der Rollladensteuerung zu erfüllen, also z.B. nur das morgendliche Öffnen der Rollläden. Allerdings geht dabei ein erheblicher Teil des Komforts verloren, der dadurch entsteht, dass die Steuerung innerhalb der vollintegrierten Lösung jeweils nachvollzieht, aus welchem Grund eine Fahrt erfolgt war und dies ggf. bei der nächsten Aktion berücksichtigt.}}&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitung ===&lt;br /&gt;
Zunächst sollten die in den [[Basics]] beschriebenen Geräte vorhanden und funktionsfähig sein. &lt;br /&gt;
&lt;br /&gt;
=== Define des ASC-Devices ===&lt;br /&gt;
Es genügt ein einfaches define ohne weitere Parameter.&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; AutoShuttersControl&amp;lt;/code&amp;gt;&lt;br /&gt;
Dies bewirkt neben der Anlage des Devices selbst auch, dass als weiteres globales Attribut &#039;&#039;ASC&#039;&#039; verfügbar wird.&lt;br /&gt;
&lt;br /&gt;
=== Einstellung zentraler Vorgaben ===&lt;br /&gt;
Es stehen am ASC-Device einige Attribute zur Verfügung, über die sich das Verhalten des ASC-Devices insgesamt steuern lässt, z.B. zur Vermeidung von morgendlichen oder abendlichen Fahrten sowie bei Gefahr von Schäden an den Rollläden durch Frost oder zur Reaktion auf Fensterkontakte. Details sind der Commandref zu entnehmen.&lt;br /&gt;
Diese Attribute können auch nachträglich noch geändert werden.&lt;br /&gt;
&lt;br /&gt;
=== Markieren zu steuernder Rollladen-Devices ===&lt;br /&gt;
Um einen oder mehrere Rollläden durch das ASC-Device zu steuern, wird für jeden Rollladen jeweils das neue globale Attribut &#039;&#039;ASC&#039;&#039; gesetzt. Der Wert ist mit 1 oder 2 festzulegen, wobei &#039;&#039;&#039;1&#039;&#039;&#039; bedeutet, dass &lt;br /&gt;
* die Offen-Position kleiner ist als die Geschlossen-Position, also typischerweise 0 &#039;&#039;offen&#039;&#039; bedeutet und 100 für &#039;&#039;geschlossen&#039;&#039; steht&lt;br /&gt;
* eine bestimmte Position mit &#039;&#039;&#039;position&#039;&#039;&#039; angefahren wird, also z.B. &amp;lt;code&amp;gt;set &amp;lt;name&amp;gt; position 70&amp;lt;/code&amp;gt;.&lt;br /&gt;
Dies ist z.B. die  passende Wahl für ROLLO-Devices&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;&#039;2&#039;&#039;&#039; steht für ein umgekehrtes Verhalten und den Befehlsteil &#039;&#039;pct&#039;&#039;, also &#039;&#039;offen&#039;&#039; für &amp;lt;code&amp;gt;set &amp;lt;name&amp;gt; pct 100&amp;lt;/code&amp;gt;. Typischer Vertreter dieses Typs sind HomeMatic (CUL_HM-) Geräte oder die Shelly2-Aktoren.&lt;br /&gt;
&lt;br /&gt;
=== Einbinden in das ASC-Device ===&lt;br /&gt;
Nachdem man das obige Attribut bei einem oder mehreren Rollladen-Devices gesetzt hat, kann mit &lt;br /&gt;
&amp;lt;code&amp;gt;set &amp;lt;name&amp;gt; scanForShutters&amp;lt;/code&amp;gt; ein Suchlauf gestartet werden, mit dem dann diese Rollläden durch das Modul gefunden und in die Steuerungslogik eingebunden werden.&lt;br /&gt;
&lt;br /&gt;
=== Einstellen der individuellen Vorgaben ===&lt;br /&gt;
Nach der Einbindung sind an den Rollladen-Devices weitere Attribute verfügbar, mit denen die für den jeweiligen Rollladen geltenden Einstellungen vorgenommen werden können. &lt;br /&gt;
Die Beschreibung der Attribute ist in der commandref enthalten.&lt;br /&gt;
&lt;br /&gt;
=== Einrichtungsbeispiel ===&lt;br /&gt;
==== Zielsetzung und Vorgaben ====&lt;br /&gt;
Es sollen alle Rollläden und Jalousien in einem Haus innerhalb bestimmter zeitlicher Grenzen Morgens und Abends sonnenstandsabhängig gefahren werden, an den Wochenenden und an Ferientagen soll etwas später geöffnet werden. Es sind Tür- und Fensterkontakte vorhanden (Türkontakte: twoState, Fensterkontakte: threeState), wobei bei jeder Öffnung ein eventuell geschlossener Rollladen geöffnet werden soll. Bei allen Rollladnaktoren, Tür- und Fensterkontakten handelt es sich um CUL_HM-Geräte.&lt;br /&gt;
&lt;br /&gt;
==== Vorarbeiten ==== &lt;br /&gt;
Im global-Device sind Angaben zu latitude und longitude vorhanden, holiday2we wie folgt&amp;lt;ref&amp;gt;ferien ist eine automatisiert erstellte holiday-Datei nach diesem Foren-Beitrag.&amp;lt;/ref&amp;gt;:&lt;br /&gt;
 attr global holiday2we bw,ferien&lt;br /&gt;
Weitere Angaben benötigen wir zunächst nicht, die Festlegung eines Astro-Devices erfolgt hier erst im Rahmen der Beschattung. &lt;br /&gt;
Dann erfolgt das &#039;&#039;Define des ASC-Devices&#039;&#039; wie oben beschrieben:&lt;br /&gt;
&amp;lt;code&amp;gt;define Rollladenautomatik AutoShuttersControl&amp;lt;/code&amp;gt;&lt;br /&gt;
Folgen die einzubindenden Rollladenaktoren einem einheitlichen Namensschema, können diese sodann z.B. mit &lt;br /&gt;
 attr (Jalousie|Rolladen)_.* ASC 2&lt;br /&gt;
auf einen Rutsch mit dem passenden ASC-Typ gekennzeichnet werden. Dann verteilen wir mir &lt;br /&gt;
 set Rollladenautomatik scanForShutters&lt;br /&gt;
die nachfolgend weiter zu bearbeitenden Attribute.&lt;br /&gt;
&lt;br /&gt;
===== Konfiguration des ASC-Devices =====&lt;br /&gt;
Da wir sonnenstandsabhängig Fahrzeiten wollen, legen wir erst einmal fest, dass dies morgens und abends berücksichtigt werden soll:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr Rollladenautomatik ASC_autoAstroModeEvening CIVIL&lt;br /&gt;
attr Rollladenautomatik ASC_autoAstroModeMorning CIVIL&lt;br /&gt;
attr Rollladenautomatik ASC_autoShuttersControlEvening on&lt;br /&gt;
attr Rollladenautomatik ASC_autoShuttersControlMorning on&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Aus der Angabe &#039;&#039;CIVIL&#039;&#039; und den Vorgaben in den einzelnen Rollladen wird dabei mit Hilfe von [[SUNRISE_EL]] die effektive Fahrzeit berechnet, dort finden sich auch weitere Hinweise, zu den meisten anderen Optionen für die ersten beiden Attribute.&lt;br /&gt;
Bei allen Fensteröffnungen soll auf Lüften-Position gefahren werden, also schalten wir diese Funktion ebenfalls zentral an&amp;lt;ref&amp;gt;Sonst wird bei threeState-Sensoren nur bei &#039;&#039;tilted&#039;&#039; gefahren.&amp;lt;/ref&amp;gt;:&lt;br /&gt;
 attr Rollladenautomatik ASC_autoShuttersControlComfort on &lt;br /&gt;
&lt;br /&gt;
Zuletzt legen wir noch einen Temperatur-Sensor fest. Dieser wird beim Frostschutz sowie bei der Beschattung berücksichtigt.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr Rollladenautomatik ASC_temperatureSensor Aussentemperatur_Nord&lt;br /&gt;
attr Rollladenautomatik ASC_temperatureReading temperature&lt;br /&gt;
attr Rollladenautomatik ASC_freezeTemp 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
tbd: Rain&lt;br /&gt;
&lt;br /&gt;
===== Fahrzeiten =====&lt;br /&gt;
Zur Konfiguration der Fahrzeiten bietet es sich an, eine ReadingsGroup zu nutzen, wie unter [[Hilfsmittel]] dargestellt. Alternativ kann man die Zeiten auch manuell in den einzelnen Rollläden hinterlegen.&lt;br /&gt;
&lt;br /&gt;
===== Fensterkontakte =====&lt;br /&gt;
&amp;lt;!-- 2. Schritt:&lt;br /&gt;
Festlegen der Roomates etc.; sollte soweit klar sein, cref ist an sich ok, das Wiki enthält dazu einige weitere Angaben, das ganze ist aber nicht im Sinne einer &amp;quot;Schritt-für-Schritt-Anleitung&amp;quot; ausgeführt: Das mit den Residents (und den Readings) findet sich (nur) im Zusammenhang mit den Voraussetzungen (sollte &amp;quot;man&amp;quot; ergänzen, oder?).&lt;br /&gt;
&lt;br /&gt;
3. Schritt:&lt;br /&gt;
Festlegen der Fensterkontakte&lt;br /&gt;
Von der Einrichtung her nachvollziehbar; unklar ist mir noch, ob auf meine Three-state richtig reagiert wird - habe das mit der neuen Version bisher nur bewußt im Schlafzimmer getestet, da ging der Rollladen beim Fenster-auf nicht hoch; kann aber auch am Status das Roommate-Devices gelegen haben. Muß ich selbst noch testen.&lt;br /&gt;
threeState/tilted: ASC_autoShuttersControlComfort im ASC auf on setzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. Wind&lt;br /&gt;
Ähm, bin nicht auf dem letzten Stand, aber sollte das nicht integriert werden? Passende Attribute finde ich aber keine...&lt;br /&gt;
(Ich habe hier 4 Außenjalousien, die ich bei unterschiedlichen Windgeschwindigkeiten gerne komplett einfahren würde; im Moment macht das noch ein separates notify).&lt;br /&gt;
&lt;br /&gt;
5. Beschattung&lt;br /&gt;
Dann wollte ich mich also an den eigentlichen neuen Teil machen, die Beschattung.&lt;br /&gt;
Wie die ganzen Attribute ineinandergreifen, steht scheinbar nirgends. M.E. ein dringliches todo.&lt;br /&gt;
a) Da finde ich ziemlich zentral ein &amp;quot;ASC_twilightDevice&amp;quot;, ohne dass hier irgendwo (cref/Wiki) mehr erläutert wäre, als dass man es irgendwie im Rahmen der Beschattung benötigt. Sehr aufschlußreich... Da es nicht irgendwas mit Brightness heißt, scheint es sich um was anderes zu handeln (&amp;quot;Informationen zum Sonnenstand&amp;quot;). Aber woher werden dann die Helligkeitsschwellen bedient, die man zentral bzw. an den Rollläden einstellen kann? OK, gesehen, das wird wieder (nur) verteilt an allen einzelnen Rollläden festgelegt. Hm, aber warum das? (Ich habe derzeit eigentlich nur einen Lieferanten für Brightness; es würde mir daher ausreichen, wenn der für alle zentral festlegbar wäre).&lt;br /&gt;
Daher die Frage zu ASC_twilightDevice: Für was wird es noch verwendet und wie im Rahmen der Beschattung?&lt;br /&gt;
Hab&#039;s also erst mal weggelassen, zumal das ausnahmsweise keine explizite Angabe eines Readingsnamens vorsah und es auch irgendwie ungut an das aktuell nicht funktionierende &amp;quot;twilight&amp;quot;-Modul anzuknüpfen scheint.&lt;br /&gt;
&lt;br /&gt;
CT: Um es gleich vorweg zu sagen. ASC_brightnessMinVal und ASC_brightnessMaxVal haben mit der Beschattung gar nichts zu tun.&lt;br /&gt;
Das Astro oder Twilight Modul (je nach dem welches als erstes gefunden wird bei einer automatischen Suche) wird verwendet um die Sonnenposition zu erkennen.&lt;br /&gt;
Azimut und Elevation. Der eigentliche Trigger ist aber in der Tat Brightness. Nur wenn sich der Brightness Wert ändert werden Azimut, Elevation, Temperatur und die Ein und Ausfallswinkel Ausgelesen und/oder Berechnet und basierend auf diesen Werten entschieden ob shading in oder shading out.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
b) Dann habe ich also erst mal die Winkelangaben gemacht. An sich selbsterklärend, aber was mache ich mit den Fenstern auf der Nordseite?&lt;br /&gt;
Auf Risiko haben die jetzt also erst mal alle einen Wert in der Nähe von 0, aber immer noch die Varianz von +/- 85°. Paßt das, oder sollte ich das ändern (so dass keine Werte &amp;lt;0° rauskommen können)?!? Oder gar das Attribut bei den Nordfenstern ganz löschen?&lt;br /&gt;
&lt;br /&gt;
c) Ok, dann gibt es eine Reihe weiterer &amp;quot;ASC_Shading.*&amp;quot;-Attribute. Die sind irgendwie vorbelegt, allerdings wäre es vermutlich hilfreich, wenn wir im Wiki ggf. erklären, wie die Werte zu verstehen sind und diese zusammenwirken.&lt;br /&gt;
&lt;br /&gt;
d) Letztlich scheinen die ASC_brightnessMinVal-etc.-Attribute die eigentich entscheidenen Angaben zu sein. Aber wie wirkt das alles jetzt zusammen?&lt;br /&gt;
Ein paar erläuternde Worte wären hilfreich, sonst muß ich doch Quellcode lesen oder einfach testen...&lt;br /&gt;
&lt;br /&gt;
6. Sonstiges&lt;br /&gt;
Dann gibt&#039;s da noch ein paar weitere Features, die zwar in der cref bzw. im Wiki erwähnt sind, deren Bedeutung sich mir aber nicht auf die Schnelle erschließt, so dass ich nicht beurteilen kann, ob und wie ich das anwende (-n will):&lt;br /&gt;
a) Privacy: Ist (praktisch) nur in der cref drin.&lt;br /&gt;
Möchte jemand ein Anwendungsbeispiel im Wiki ergänzen, damit man besser nachvollziehen kann, was die beiden Attribute bewirken?&lt;br /&gt;
CT: Hier geht es nur darum eine bestimmte Zeit vor dem eigentlichen schließen der Rollläden diese schon mal auf sagen wir 50% zu fahren. Ein Anwendungsfall war gewesen das die Rollläden zur Straße hin mit viel Fußgängerverkehr waren und Abends schon vor dem schließen dieser das Licht drin an ging. Somit konnte man gut rein schauen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
b) BlockingTime&lt;br /&gt;
In welchem Zusammenhang wirkt sich das jeweils aus, wann sollte/kann man das verwenden?&lt;br /&gt;
CT: Das verwendet sich von alleine. Nach einer manuellen Fahrt wird eine vom ASC Modul initiierte Fahrt ausgesetzt. Das geschieht so lange bis die im Attribute angegebene Zeit überschritten ist, eine dann vom ASC Modul initiierte Fahrt wird durchgeführt.&lt;br /&gt;
Genau so wird ein hochfahren eines Rollos durch das ASC Modul nicht mehr ausgeführt wenn es innerhalb der Zeit von ASC_BlockingTime_beforNightClose und das runterfahren wird nicht mehr erfolgen wenn es innerhalb von ASC_BlockingTime_beforDayOpen ist.&lt;br /&gt;
Beispiel: Meine Tochter geht früh aus Haus und Ihre Rollos sind nicht hoch gefahren. Diese fahren auch nicht mehr hoch da die ausschließlich bei home (anwesend) fahren sollen. Nun kommt sie am Nachmittag um 16:23 Uhr nach Hause, eigentlich sollten nun die Rollos fahren. Doch die Sonnenuntergangsfahrt (schließen) wäre schon 16:51 Uhr und damit innerhalb der 3600 ASC_BlockingTime_beforNightClose. Die Rollos bleiben also unten. Es lohnt sich für die paar Minuten einfach nicht mehr.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
c) wiggle&lt;br /&gt;
(OK, das ist klar, man kann mit einem &amp;quot;set &amp;lt;ASC-Device&amp;gt; wiggle&amp;quot; alle Rollladen mit einem entsprechenden Attribut zu einer kurzen Fahrt veranlassen. Gehe mal davon aus, dass um den Wert in Richtung closed gefahren wird, und dann nach Ablauf der Minute wieder um denselben Wert zurück.) Steht nur noch nichts im Wiki zu...&lt;br /&gt;
CT: Fast. Es wird geschaut wo der Rollladen steht und dann wird in die Richtung gefahren wo er den meisten Weg hat. Wenn also zu 70% geschlossen ist, wird er hoch fahren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
d) Partymode, lock-out etc&lt;br /&gt;
(Auch hier: Doku ist etwas verteilt, könnte man im Wiki jeweils unter einem eigenen Unterabschnitt im Zusammenhang darstellen)&lt;br /&gt;
&lt;br /&gt;
Wäre nett, wenn der eine oder andere Licht ins Dunkel bringen könnte, dann kann ich mich auch dran machen, das im Wiki irgendwie zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
CT: Noch mal ein zwei Worte zum Thema Dokumentation. Ich denke im Wiki wären Anwendungsbeispiele ganz gut aufgehoben.&lt;br /&gt;
Gerade die Sache mit dem Privacy. Wozu kann man es verwenden?&lt;br /&gt;
Dann auch SelfDefense. Das bei einem absent nur da die Rollläden geschlossen werden wo das Fenster vergessen wurde zu schließen.&lt;br /&gt;
Beim wechsel in gone wird nur an den makierten Terassentüren der Rollladen runter gefahren. --&amp;gt;&lt;br /&gt;
== Readings ==&lt;br /&gt;
&lt;br /&gt;
===Readings im ASC-Device selbst.===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Datentyp/&amp;lt;BR/&amp;gt;Wertebereich !! Bedeutung  &lt;br /&gt;
|-&lt;br /&gt;
|..._nextAstroTimeEvent || ||Uhrzeit des nächsten Astro-Events, Sonnenauf- oder Sonnenuntergang oder feste Zeit pro Rollonamen &lt;br /&gt;
|-&lt;br /&gt;
|..._lastPosValue || ||zuletzt abgesetzter Fahrbefehl pro Rollonamen&lt;br /&gt;
|-&lt;br /&gt;
|..._lastDelayPosValue || ||zuletzt abgesetzter Fahrbefehl, welcher beim nächsten zulässigen Event ausgeführt wird&lt;br /&gt;
|-&lt;br /&gt;
|partyMode ||on, off || aktiviert den globalen Partymodus. Alle Rollläden, welche das Attribut &#039;&#039;AutoShuttersControl_Partymode&#039;&#039; bei sich auf &#039;&#039;on&#039;&#039; gestellt haben, werden nicht mehr gesteuert. Der letzte Schaltbefehl, welcher durch ein Fensterevent oder Bewohnerstatus an die Rollläden gesendet wurde, wird erst beim off-setzen (set &amp;lt;ASC-Device&amp;gt; partyMode off) ausgeführt&lt;br /&gt;
|-&lt;br /&gt;
|lockOut || on, off ||für das Aktivieren des Aussperrschutzes gemäß des entsprechenden Attributs &#039;&#039;AutoShuttersControl_lock-out&#039;&#039; im jeweiligen Rolladen (siehe Beschreibung bei den Attributen für die Rolladendevices)&lt;br /&gt;
|-&lt;br /&gt;
|room_... || ||Auflistung aller Rollläden, welche in den jeweiligen Räumen gefunden wurden, Bsp.: room_Schlafzimmer,Terrasse&lt;br /&gt;
|-&lt;br /&gt;
|state || ||Status des &amp;lt;ASC-Device&amp;gt; active, enabled, disabled&lt;br /&gt;
|-&lt;br /&gt;
|sunriseTimeWeHoliday|| on,off ||legt fest, ob das Rolladendevice das Attribut &#039;&#039;AutoShuttersControl_Time_Up_WE_Holiday&#039;&#039; beachtet oder nicht&lt;br /&gt;
|-&lt;br /&gt;
|userAttrList || rolled out ||Status der UserAttribute, welche an die Rollläden gesendet werden&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Readings in den Rolllädendevices===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Bedeutung  &lt;br /&gt;
|-&lt;br /&gt;
|ASC_Time_DriveUp ||Sonnenaufgangszeit für das Rollo&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Time_DriveDown ||Sonnenuntergangszeit für das Rollo&lt;br /&gt;
|-&lt;br /&gt;
|ASC_ShuttersLastDrive ||Grund des letzten Fahrens vom Rolladen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Settings ==&lt;br /&gt;
&lt;br /&gt;
===Set Befehle für ASC-Device===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Datentyp/&amp;lt;BR/&amp;gt;Wertebereich !! Beschreibung  &lt;br /&gt;
|-&lt;br /&gt;
|partyMode ||on, off ||aktiviert den globalen Partymodus. Siehe Reading &#039;&#039;partyMode&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|lockOut ||on, off ||aktiviert den globalen Aussperrschutz. Siehe Reading &#039;&#039;lockOut&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|renewSetSunriseSunsetTimer || || erneuert bei allen Rollläden die Zeiten für Sunset und Sunrise und setzt die internen Timer neu.&lt;br /&gt;
|-&lt;br /&gt;
|scanForShutters || ||sucht alle FHEM Devices mit dem Attribut &#039;&#039;AutoShuttersControl&#039;&#039; &#039;&#039;1&#039;&#039; oder &#039;&#039;2&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|sunriseTimeWeHoliday || on,off ||aktiviert/deaktiviert die Beachtung des Attributes &#039;&#039;AutoShuttersControl_Time_Up_WE_Holiday&#039;&#039; für Rollladen-Devices&lt;br /&gt;
|-&lt;br /&gt;
|createNewNotifyDev || ||Legt die interne Struktur für NOTIFYDEV neu an&lt;br /&gt;
|-&lt;br /&gt;
|selfDefence ||on, off||aktiviert/deaktiviert den Selbstschutz: wenn das Residents-Device &#039;&#039;absent&#039;&#039; meldet, &#039;&#039;selfDefence&#039;&#039; aktiv ist und ein Fenster im Haus noch offen steht, wird an diesem Fenster das Rollo runtergefahren&lt;br /&gt;
|-&lt;br /&gt;
|wiggle ||||bewegt einen Rollladen oder alle Rollläden (für Abschreckungszwecke bei der Alarmierung) um &#039;&#039;ASC_WiggleValue&#039;&#039;-%, und nach 1 Minute wieder zurück zur Ursprungsposition&lt;br /&gt;
|-&lt;br /&gt;
|||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Get ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| showShuttersInformations ||zeigt eine Übersicht der Automatik-Fahrzeiten&lt;br /&gt;
|-&lt;br /&gt;
| showNotifyDevsInformations ||zeigt eine Übersicht der abgelegten NOTIFYDEV Struktur. Dient zur Kontrolle&lt;br /&gt;
|}&lt;br /&gt;
== Attribute ==&lt;br /&gt;
&lt;br /&gt;
===Attribute im AutoShuttersControl Device selbst.===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Datentyp/&amp;lt;BR/&amp;gt;Wertebereich !! Default-Wert !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|ASC_antifreezeTemp || || ||Temperatur, ab welcher der Frostschutz greift und das Rollo nicht mehr fährt. Der letzte Fahrbefehl wird gespeichert&lt;br /&gt;
|-&lt;br /&gt;
|ASC_autoAstroModeEvening ||aktuell REAL, CIVIL, NAUTIC, ASTRONOMIC || || (in genau dieser Schreibweise)&lt;br /&gt;
|-&lt;br /&gt;
|ASC_autoAstroModeEveningHorizon || || || Höhe über Horizont, wenn beim Attribut &#039;&#039;AutoShuttersControl_autoAstroModeEvening&#039;&#039; &#039;&#039;HORIZON&#039;&#039; ausgewählt&lt;br /&gt;
|-&lt;br /&gt;
|ASC_autoAstroModeMorning ||aktuell REAL, CIVIL, NAUTIC, ASTRONOMIC || ||(in genau dieser Schreibweise)&lt;br /&gt;
|-&lt;br /&gt;
|ASC_autoAstroModeMorningHorizon || || ||Höhe über Horizont, wenn beim Attribut &#039;&#039;AutoShuttersControl_autoAstroModeMorning&#039;&#039; &#039;&#039;HORIZON&#039;&#039; ausgewählt&lt;br /&gt;
|-&lt;br /&gt;
|ASC_autoShuttersControlComfort ||on, off || ||aktiviert die Komfortfunktion. Bedeutet, dass ein Rollladen mit einem threestate (Drehgriff-) Sensor am Fenster beim Öffnen in die &amp;quot;Komfortposition&amp;quot; fährt. Diese wird beim Rollladendevice über das Attribut &#039;&#039;AutoShuttersControl_Pos_after_ComfortOpen&#039;&#039; eingestellt.&lt;br /&gt;
|- &lt;br /&gt;
|ASC_autoShuttersControlEvening ||on, off || ||ob Abends die Rollläden automatisch zeitgesteuert werden sollen&lt;br /&gt;
|-&lt;br /&gt;
|ASC_autoShuttersControlMorning ||on, off || ||ob Morgens die Rollläden automatisch zeitgesteuert werden sollen&lt;br /&gt;
|-&lt;br /&gt;
|ASC_temperatureReading || || ||Reading für die Außentemperatur&lt;br /&gt;
|-&lt;br /&gt;
|ASC_temperatureSensor || || ||Device für die Außentemperatur&lt;br /&gt;
|-&lt;br /&gt;
|ASC_timeUpHolidayDevice || || ||Device zur Urlaubserkennung oder Sonstiges / muss &#039;&#039;0&#039;&#039; oder &#039;&#039;1&#039;&#039; im Reading &#039;&#039;state&#039;&#039; beinhalten.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_residentsDevice|| || ||Devicenamen des Residents-Device der obersten Ebene&lt;br /&gt;
|-&lt;br /&gt;
|ASC_residentsDeviceReading|| || ||Status Reading des Residents-Device der obersten Ebene&lt;br /&gt;
|-&lt;br /&gt;
|ASC_brightnessMinVal|| || ||minimaler Lichtwert, bei dem Schaltbedingungen noch geprüft werden sollen&lt;br /&gt;
|-&lt;br /&gt;
|ASC_brightnessMaxVal || || ||maximaler Lichtwert, bei dem Schaltbedingungen noch geprüft werden sollen&lt;br /&gt;
|-&lt;br /&gt;
|ASC_rainSensorDevice || || ||Device, welches bei Regen getriggert wird&lt;br /&gt;
|-&lt;br /&gt;
|ASC_rainSensorReading || || ||das ensprechende Reading zum Regendevice&lt;br /&gt;
|-&lt;br /&gt;
|ASC_rainSensorShuttersClosedPos || || ||Position in pct, welche der Rollladen bei Regen anfahren soll &lt;br /&gt;
|-&lt;br /&gt;
|ASC_shuttersDriveOffset  || || ||maximale zufällige Verzögerung in Sekunden bei der Berechnung der Fahrzeiten, &#039;&#039;0&#039;&#039; bedeutet keine Verzögerung&lt;br /&gt;
|-&lt;br /&gt;
|ASC_twilightDevice || || ||Device, welches Informationen zum Sonnenstand liefert, wird unter anderem für die Beschattung verwendet.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_expert || || ||bei &#039;&#039;1&#039;&#039; werden erweiterte Informationen bezüglich des NotifyDevs unter &#039;&#039;set&#039;&#039; und &#039;&#039;get&#039;&#039; angezeigt&lt;br /&gt;
|-&lt;br /&gt;
| || || ||&lt;br /&gt;
|-&lt;br /&gt;
| || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Attribute in den Rolllädendevices===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Datentyp/&amp;lt;BR/&amp;gt;Wertebereich !! Default-Wert !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|ASC || 0, 1, 2|| ||0 = &amp;quot;kein Anlegen der Attribute beim ersten Scan bzw. keine Beachtung eines Fahrbefehles&amp;quot;,1 = &amp;quot;Inverse oder Rollo - Bsp.: Rollo Oben 0, Rollo Unten 100 und der Befehl zum prozentualen Fahren ist position&amp;quot;,2 = &amp;quot;Homematic Style - Bsp.: Rollo Oben 100, Rollo Unten 0 und der Befehl zum prozentualen Fahren ist pct&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Antifreeze || soft, am, pm, hard, off|| ||Frostschutz, wenn &#039;&#039;soft&#039;&#039; fährt der Rollladen in die &#039;&#039;ASC_Antifreeze_Pos&#039;&#039;, bei &#039;&#039;hard/am/pm&#039;&#039; wird gar nicht oder innerhalb der entsprechenden Tageszeit nicht gefahren&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Antifreeze_Pos || || ||Position, die angefahren werden soll, wenn der Fahrbefehl komplett schließen lautet, aber der Frostschutz aktiv ist&lt;br /&gt;
|-&lt;br /&gt;
|ASC_AutoAstroModeEvening ||REAL, CIVIL, NAUTIC, ASTRONOMIC|| ||aktuell REAL,CIVIL,NAUTIC,ASTRONOMIC&lt;br /&gt;
|-&lt;br /&gt;
|ASC_AutoAstroModeEveningHorizon || || ||Höhe über Horizont, wenn beim Attribut &#039;&#039;ASC_autoAstroModeEvening&#039;&#039; &#039;&#039;HORIZON&#039;&#039; ausgewählt ist&lt;br /&gt;
|-&lt;br /&gt;
|ASC_AutoAstroModeMorning ||REAL, CIVIL, NAUTIC, ASTRONOMIC|| ||aktuell REAL,CIVIL,NAUTIC,ASTRONOMIC&lt;br /&gt;
|-&lt;br /&gt;
|ASC_AutoAstroModeMorningHorizon || || ||Höhe über Horizont, wenn beim Attribut &#039;&#039;ASC_autoAstroModeMorning&#039;&#039; &#039;&#039;HORIZON&#039;&#039; ausgewählt ist&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Closed_Pos || || ||in 10er Schritten von 0 bis 100,default Vorgabe ist abhängig vom Attribut &#039;&#039;ASC&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Down || astro, time, brightness || ||bei &#039;&#039;astro&#039;&#039; wird Sonnenuntergang berechnet, bei &#039;&#039;time&#039;&#039; wird der Wert aus &#039;&#039;ASC_Time_Down_Early&#039;&#039; als Fahrzeit verwendet und bei &#039;&#039;brightness&#039;&#039; muss &#039;&#039;ASC_Time_Down_Early&#039;&#039; und &#039;&#039;ASC_Time_Down_Late&#039;&#039; korrekt gesetzt werden. Der Timer läuft dann nach &#039;&#039;ASC_Time_Down_Late&#039;&#039;-Zeit,es wird aber in der Zeit zwischen &#039;&#039;ASC_Time_Down_Early&#039;&#039; und &#039;&#039;ASC_Time_Down_Late&#039;&#039; geschaut, ob die als Attribut im Moduldevice hinterlegte &#039;&#039;ASC_brightnessMinVal&#039;&#039; erreicht wurde. Wenn ja, wird der Rolladen runter gefahren&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Mode_Down ||always, home, absent, off || ||wann darf die Automatik herunterfahren. immer, niemals oder bei Abwesenheit des Roommate (ist kein Roommate und &#039;&#039;absent&#039;&#039; eingestellt, wird gar nicht gesteuert)&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Mode_Up ||always, home, absent, off || ||wann darf die Automatik hochfahren. immer, niemals oder bei Abwesenheit des Roommate (ist kein Roommate und &#039;&#039;absent&#039;&#039; eingestellt, wird gar nicht gesteuert)&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Drive_Offset || || ||maximale zufällige Verzögerung in Sekunden bei der Berechnung der Fahrzeiten, &#039;&#039;0&#039;&#039; bedeutet sofort, &#039;&#039;-1&#039;&#039; bedeutet, dass das gleichwertige Attribut aus dem ASC-Device ausgewertet werden soll&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Open_Pos || || ||in 10er-Schritten von 0 bis 100, default Vorgabe ist abhängig vom Attribut &#039;&#039;ASC&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Partymode || on, off || ||schaltet den Partymodus an oder aus. Wird dann am ASC Device &#039;&#039;set &amp;lt;ASC-DEVICE&amp;gt; partyMode on&#039;&#039; geschaltet, werden alle Fahrbefehle an den Rollläden, welche das Attribut auf &#039;&#039;on&#039;&#039; haben, zwischengespeichert und erst später ausgeführt&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Pos_Reading || || ||Name des Readings, welches die Position des Rollladen in Prozent angibt. Wird bei unbekannten Device-Typen auch als &#039;&#039;set&#039;&#039; Befehl zum Fahren verwendet&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Pos_after_ComfortOpen || || ||in 10er-Schritten von 0 bis 100, default Vorgabe ist abhängig vom Attribut &#039;&#039;ASC&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Roommate_Reading || || ||Reading des Roommate-Device, welches den Status wieder gibt&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Roommate_Device || || ||mit Komma getrennte Namen des/der Roommate-Device/s welche den/die Bewohner des Rollladen-Raumes wiedergibt. Macht nur Sinn in Schlaf- oder Kinderzimmern&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Time_Down_Early || || ||Sunset früheste Zeit zum Runterfahren&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Time_Down_Late || || ||Sunset späteste Zeit zum Runterfahren&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Time_Up_Early || || ||Sunrise früheste Zeit zum Hochfahren&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Time_Up_Late || || ||Sunrise späteste Zeit zum Hochfahren&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Time_Up_WE_Holiday || || ||Sunrise früheste Zeit zum Hochfahren am Wochenende und/oder Urlaub (we2holiday wird beachtet).&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Up || astro, time, brightness || ||bei &#039;&#039;astro&#039;&#039; wird Sonnenaufgang berechnet, bei &#039;&#039;time&#039;&#039; wird der Wert aus &#039;&#039;ASC_Time_Up_Early&#039;&#039; als Fahrzeit verwendet und bei &#039;&#039;brightness&#039;&#039; müssen &#039;&#039;ASC_Time_Up_Early&#039;&#039; und &#039;&#039;ASC_Time_Up_Late&#039;&#039; korrekt gesetzt werden. Der Timer läuft dann nach &#039;&#039;ASC_Time_Up_Late&#039;&#039;-Zeit, es wird aber in der Zeit zwischen &#039;&#039;ASC_Time_Up_Early&#039;&#039; und &#039;&#039;ASC_Time_Up_Late&#039;&#039; geschaut, ob die als Attribut im Moduldevice hinterlegte &#039;&#039;ASC_brightnessMinVal&#039;&#039; erreicht wurde. Wenn ja, wird der Rolladen runter gefahren&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Ventilate_Pos || || ||in 10er-Schritten von 0 bis 100, default Vorgabe ist abhängig vom Attribut &#039;&#039;ASC&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Ventilate_Window_Open || || ||auf lüften, wenn das Fenster gekippt/geöffnet wird und aktuelle Position unterhalb der Lüften-Position ist&lt;br /&gt;
|-&lt;br /&gt;
|ASC_WindowRec || || ||Name des Fensterkontakts, an welchen Fenster der Rollladen angebracht ist. Sein Reading &#039;&#039;state&#039;&#039; muss die Werte &#039;&#039;open&#039;&#039;, &#039;&#039;closed&#039;&#039; oder &#039;&#039;tilted&#039;&#039; enthalten.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_WindowRec_subType || || ||Typ des verwendeten Fensterkontakts: &#039;&#039;twostate&#039;&#039; (optisch oder magnetisch) oder &#039;&#039;threestate&#039;&#039; (Drehgriffkontakt)&lt;br /&gt;
|-&lt;br /&gt;
|ASC_lock-out || soft, hard || ||stellt entsprechend den Aussperrschutz ein. Bei global aktiven Aussperrschutz (&#039;&#039;set ASC-Device lockOut soft&#039;&#039;) und einem Fensterkontakt &#039;&#039;open&#039;&#039; bleibt dann der Rolladen oben. Dies gilt nur bei Steuerbefehle über das ASC-Modul. Stellt man global auf &#039;&#039;hard&#039;&#039;, wird bei entsprechender Möglichkeit versucht, den Rollladen hardwareseitig zu blockieren. Dann ist auch ein Fahren über die Taster nicht mehr möglich.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_lock-outCmd || inhibit, blocked || ||set Befehl für das Rolladen-Device zum Sperren per Hardware. Der Befehl wird verwendet, wenn &#039;&#039;ASC_lock-out&#039;&#039; auf &#039;&#039;hard&#039;&#039; gesetzt ist&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Self_Defense_Exclude || on, off || ||bei &#039;&#039;on&#039;&#039; wird dieser Rolladen bei aktiven &#039;&#039;selfDefence&#039;&#039; und offenen Fenster nicht runter gefahren, wenn Residents absent ist&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Shading_Brightness_Sensor || || ||Sensor-Device, welches für die Lichtwerte verwendet wird. ACHTUNG! Findet auch Verwendung bei ASC_Down - brightness&lt;br /&gt;
|-&lt;br /&gt;
|ASC_BrightnessMinVal || || ||minimaler Lichtwert, bei dem Schaltbedingungen noch geprüft werden sollen / wird der Wert von &#039;&#039;-1&#039;&#039; nicht geändert, so wird automatisch der Wert aus dem Moduldevice genommen&lt;br /&gt;
|-&lt;br /&gt;
|ASC_BrightnessMaxVal || || ||maximaler Lichtwert, bei dem Schaltbedingungen noch geprüft werden sollen / wird der Wert von &#039;&#039;-1&#039;&#039; nicht geändert, so wird automatisch der Wert aus dem Moduldevice genommen&lt;br /&gt;
|-&lt;br /&gt;
|ASC_ShuttersPlace || window, terrace || ||wenn dieses Attribut auf &#039;&#039;terrace&#039;&#039; gesetzt ist und das Residents-Device in den Status &#039;&#039;gone&#039;&#039; geht und &#039;&#039;selfDefence&#039;&#039; aktiv ist, wird das Rollo geschlossen&lt;br /&gt;
|-  &lt;br /&gt;
|ASC_WiggleValue || || ||Wert, um welchen sich die Position des Rollladens bei &#039;&#039;Wiggle&#039;&#039; ändern soll &lt;br /&gt;
|-&lt;br /&gt;
| || || ||&lt;br /&gt;
|-  &lt;br /&gt;
| || || ||&lt;br /&gt;
|-&lt;br /&gt;
| || || ||    &lt;br /&gt;
|-  &lt;br /&gt;
| || || ||&lt;br /&gt;
|-&lt;br /&gt;
| || || ||    &lt;br /&gt;
|-  &lt;br /&gt;
| || || ||&lt;br /&gt;
|-&lt;br /&gt;
| || || ||        &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Hilfsmittel Allgemein==&lt;br /&gt;
Achtung: Die Device-Namen sind auf die entsprechende Konfiguration des einzelnen Anzupassen.&lt;br /&gt;
&lt;br /&gt;
=== Hilfsmittel Übersicht ===&lt;br /&gt;
&lt;br /&gt;
 define ASC_Jalousie_Info weblink htmlCode {AutoShuttersControl::GetShuttersInformation($defs{&#039;JalousieControl&#039;})}&lt;br /&gt;
&lt;br /&gt;
[[Datei:ASC Overview.JPG|600px|]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hilfsmittel Reading Group für Homematic Devices==&lt;br /&gt;
readingsGroup, um die diversen Level einzustellen&lt;br /&gt;
&lt;br /&gt;
Erfolgreich getestet mit Homematic Devices, Stand 2019-01-28 no_Legend&lt;br /&gt;
&lt;br /&gt;
Achtung: Codezeilen wurden aus der Config Datei kopiert.&lt;br /&gt;
 &lt;br /&gt;
[[Datei:RG AutoShuttersControl Homematic.png|600px|]]&lt;br /&gt;
&lt;br /&gt;
 define rg_ASC_Rollaeden_Level readingsGroup &amp;lt;Gerät&amp;gt;,&amp;lt;ASC&amp;gt;,&amp;lt;Antifreeze&amp;gt;,&amp;lt;Antifreeze_Pos&amp;gt;,&amp;lt;Closed_Pos&amp;gt;,&amp;lt;Open_Pos&amp;gt;,&amp;lt;ASC_Ventilate_Pos&amp;gt; \&lt;br /&gt;
 (.*Rollladen.*|.*Rollladen|Jalousie_.*):?ASC,?ASC_Antifreeze,?ASC_Antifreeze_Pos,?ASC_Closed_Pos,?ASC_Open_Pos,?ASC_Ventilate_Pos&lt;br /&gt;
 setuuid rg_ASC_Rollaeden_Level 5c4308e1-f33f-abd1-167d-cc1b5f137cf793c8&lt;br /&gt;
 attr rg_ASC_Rollaeden_Level commands {ASC =&amp;gt; &#039;ASC:0,1,2&#039;,\&lt;br /&gt;
 ASC_Antifreeze =&amp;gt; &#039;ASC_Antifreeze:off,soft,hard,am,pm&#039;,\&lt;br /&gt;
 ASC_Antifreeze_Pos =&amp;gt;&#039;ASC_Antifreeze_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100&#039;, \&lt;br /&gt;
 ASC_Closed_Pos =&amp;gt; &#039;ASC_Closed_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100&#039;, \&lt;br /&gt;
 ASC_Open_Pos =&amp;gt; &#039;ASC_Open_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100&#039;, \&lt;br /&gt;
 ASC_Ventilate_Pos =&amp;gt; &#039;ASC_Ventilate_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100&#039;}&lt;br /&gt;
 attr rg_ASC_Rollaeden_Level room 9.72_Rolladen&lt;br /&gt;
&lt;br /&gt;
 define rg_ASC_Rollaeden_Times readingsGroup &amp;lt;Gerät&amp;gt;,&amp;lt;Position&amp;gt;,&amp;lt;Time_Up_Early&amp;gt;,&amp;lt;Time_Up_Late&amp;gt;,&amp;lt;Time_Up_WE/Hol&amp;gt;,&amp;lt;Time_Down_Early&amp;gt;,&amp;lt;Time_Down_Late&amp;gt;,&amp;lt;Mode_Down&amp;gt;,&amp;lt;Mode_Up&amp;gt; \&lt;br /&gt;
 (.*Rollladen.*|.*Rollladen|Jalousie_.*):level,?ASC_Time_Up_Early,?ASC_Time_Up_Late,?ASC_Time_Up_WE_Holiday,?ASC_Time_Down_Early,?ASC_Time_Down_Late,?ASC_Mode_Down,?ASC_Mode_Up&lt;br /&gt;
 setuuid rg_ASC_Rollaeden_Times 5c4308e1-f33f-abd1-94a7-fbf717635760f863&lt;br /&gt;
 attr rg_ASC_Rollaeden_Times commands {level =&amp;gt; &#039;pct:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100&#039;, \&lt;br /&gt;
 ASC_Time_Down_Early =&amp;gt; &#039;ASC_Time_Down_Early:15:00,15:15,15:30,15:45,16:00,16:15,16:30,16:45,17:00,17:15,17:30,17:45,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00&#039;, \&lt;br /&gt;
 ASC_Time_Down_Late  =&amp;gt; &#039;ASC_Time_Down_Late:19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:15,23:30&#039;, \&lt;br /&gt;
 ASC_Time_Up_WE_Holiday =&amp;gt; &#039;ASC_Time_Up_WE_Holiday:06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00&#039;,\&lt;br /&gt;
 ASC_Time_Up_Early =&amp;gt; &#039;ASC_Time_Up_Early:05:00,05:05,05:30,05:45,06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00&#039;,  \&lt;br /&gt;
 ASC_Time_Up_Late =&amp;gt; &#039;ASC_Time_Up_Late:06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00&#039;, \&lt;br /&gt;
 ASC_Mode_Down =&amp;gt; &#039;ASC_Mode_Down:always,absent,off&#039;, \&lt;br /&gt;
 ASC_Mode_Up =&amp;gt; &#039;ASC_Mode_Up:always,absent,off&#039; }&lt;br /&gt;
 attr rg_ASC_Rollaeden_Times room 9.72_Rolladen&lt;br /&gt;
&lt;br /&gt;
=== Hilfsmittel Reading Group für FIBARO Roller Shutter FGR-222 Devices===&lt;br /&gt;
&lt;br /&gt;
Getestet von majestro84 https://forum.fhem.de/index.php/topic,92628.msg897099.html#msg897099&lt;br /&gt;
&lt;br /&gt;
Stand 2019-01-28  &lt;br /&gt;
&lt;br /&gt;
[[Datei:ASC Jalousien Level.JPG|600px|]]&lt;br /&gt;
&lt;br /&gt;
[[Datei:ASC Jalousien Times.JPG|600px|]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 define ASC_Jalousien_Times readingsGroup &amp;lt;Gerät&amp;gt;,&amp;lt;Stand&amp;gt;,&amp;lt;Time_Up_Early&amp;gt;,&amp;lt;Time_Up_WE&amp;gt;,&amp;lt;Time_Up_Late&amp;gt;,&amp;lt;Time_Down_Early&amp;gt;,&amp;lt;Time_Down_Late&amp;gt;,&amp;lt;Mode_Down&amp;gt;,&amp;lt;Mode_Up&amp;gt;,&amp;lt;PartyMode&amp;gt;,&amp;lt;LockOut&amp;gt; (.*_Jalousie.*):position,?ASC_Time_Up_Early,?ASC_Time_Up_WE_Holiday,?ASC_Time_Up_Late,?ASC_Time_Down_Early,?ASC_Time_Down_Late,?ASC_Mode_Down,?ASC_Mode_Up,?ASC_Partymode,?ASC_LockOut&lt;br /&gt;
 attr ASC_Jalousien_Times commands {position =&amp;gt; &#039;dim:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,99&#039;,&lt;br /&gt;
 ASC_Mode_Down =&amp;gt; &#039;ASC_Mode_Down:always,absent,off&#039;,&lt;br /&gt;
 ASC_Mode_Up =&amp;gt; &#039;ASC_Mode_Up:always,absent,off&#039;,&lt;br /&gt;
 ASC_Partymode =&amp;gt; &#039;ASC_Partymode:on,off&#039;,&lt;br /&gt;
 ASC_LockOut =&amp;gt; &#039;ASC_LockOut:soft,hard,off&#039;,&lt;br /&gt;
 ASC_Time_Down_Early =&amp;gt; &#039;ASC_Time_Down_Early:15:00,15:15,15:30,15:45,16:00,16:15,16:30,16:45,17:00,17:15,17:30,17:45,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00&#039;, &lt;br /&gt;
 ASC_Time_Down_Late  =&amp;gt; &#039;ASC_Time_Down_Late:20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:15,23:30&#039;,&lt;br /&gt;
 ASC_Time_Up_Early =&amp;gt; &#039;ASC_Time_Up_Early:05:00,05:05,05:30,05:45,06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00&#039;,&lt;br /&gt;
 ASC_Time_Up_Late =&amp;gt;&#039;ASC_Time_Up_Late:06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00&#039;,&lt;br /&gt;
 ASC_Time_Up_WE_Holiday =&amp;gt; &#039;ASC_Time_Up_WE_Holiday:06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00&#039;}&lt;br /&gt;
 attr ASC_Jalousien_Times room Jalousien&lt;br /&gt;
&lt;br /&gt;
 define Jalousien_Level readingsGroup &amp;lt;Gerät&amp;gt;,&amp;lt;Closed_Pos&amp;gt;,&amp;lt;Open_Pos&amp;gt;,&amp;lt;Comfort_Pos&amp;gt;,&amp;lt;Ventilate_Pos&amp;gt;,&amp;lt;PrivacyDown_Pos&amp;gt;,&amp;lt;Shading_Pos&amp;gt; (.*_Jalousie.*):?ASC_Closed_Pos,?ASC_Open_Pos,?ASC_ComfortOpen_Pos,?ASC_Ventilate_Pos,?ASC_PrivacyDown_Pos,?ASC_Shading_Pos&lt;br /&gt;
 attr Jalousien_Level commands { ASC_Closed_Pos =&amp;gt; &#039;ASC_Closed_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,99&#039;,&lt;br /&gt;
 ASC_Open_Pos =&amp;gt; &#039;ASC_Open_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,99&#039;,&lt;br /&gt;
 ASC_ComfortOpen_Pos =&amp;gt; &#039;ASC_ComfortOpen_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,99&#039;,&lt;br /&gt;
 ASC_Ventilate_Pos =&amp;gt; &#039;ASC_Ventilate_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,99&#039;,&lt;br /&gt;
 ASC_PrivacyDown_Pos =&amp;gt; &#039;ASC_PrivacyDown_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,99&#039;,&lt;br /&gt;
 ASC_Shading_Pos =&amp;gt; &#039;ASC_Shading_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,99&#039;}&lt;br /&gt;
 attr Jalousien_Level room Jalousien&lt;br /&gt;
&lt;br /&gt;
=== Hilfsmittel ===&lt;br /&gt;
tbd&lt;br /&gt;
&lt;br /&gt;
readingsGroup, um die diversen Level einzustellen: &lt;br /&gt;
&lt;br /&gt;
 define rg_ASC_Rollaeden_Level readingsGroup &amp;lt;Gerät&amp;gt;,&amp;lt;Closed_Pos&amp;gt;,&amp;lt;Open_Pos&amp;gt;,&amp;lt;Shading_Pos&amp;gt;,&amp;lt;Ventilate_Pos&amp;gt; (Rolladen_.*|Jalousie_.*)..:?ASC_Closed_Pos,?ASC_Open_Pos,?ASC_Shading_Pos,?ASC_Ventilate_Pos&lt;br /&gt;
 attr rg_ASC_Rollaeden_Level commands { ASC_Closed_Pos =&amp;gt; &#039;ASC_Closed_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100&#039;,\&lt;br /&gt;
 ASC_Open_Pos =&amp;gt; &#039;ASC_Open_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100&#039;,\&lt;br /&gt;
 ASC_Shading_Pos =&amp;gt; &#039;ASC_Shading_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100&#039;,\&lt;br /&gt;
 ASC_Ventilate_Pos =&amp;gt; &#039;ASC_Ventilate_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100&#039;}&lt;br /&gt;
[[Datei:ReadingsGroup ASC Level.png|600px|]]&lt;br /&gt;
readingsGroup, um die diversen Zeiten einzustellen:&lt;br /&gt;
&lt;br /&gt;
 define rg_ASC_Rollaeden_Times readingsGroup &amp;lt;Gerät&amp;gt;,&amp;lt;Stand&amp;gt;,&amp;lt;Time_Up_Early&amp;gt;,&amp;lt;Time_Up_WE&amp;gt;,&amp;lt;Time_Up_Late&amp;gt;,&amp;lt;Time_Down_Early&amp;gt;,&amp;lt;Time_Down_Late&amp;gt;,&amp;lt;Mode_Down&amp;gt;,&amp;lt;Mode_Up&amp;gt; (Rolladen_.*|Jalousie_.*)..:level,?ASC_Time_Up_Early,?ASC_Time_Up_WE_Holiday,?ASC_Time_Up_Late,?ASC_Time_Down_Early,?ASC_Time_Down_Late,?ASC_Mode_Down,?ASC_Mode_Up&lt;br /&gt;
 attr rg_ASC_Rollaeden_Times commands {level =&amp;gt; &#039;pct:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100&#039;, \&lt;br /&gt;
 ASC_Mode_Down =&amp;gt; &#039;ASC_Mode_Down:always,absent,off&#039;,\&lt;br /&gt;
 ASC_Mode_Up =&amp;gt; &#039;ASC_Mode_Up:always,absent,off&#039;,\&lt;br /&gt;
 ASC_Time_Down_Early =&amp;gt; &#039;ASC_Time_Down_Early:15:00,15:15,15:30,15:45,16:00,16:15,16:30,16:45,17:00,17:15,17:30,17:45,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00&#039;, \&lt;br /&gt;
 ASC_Time_Down_Late  =&amp;gt; &#039;ASC_Time_Down_Late:20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:15,23:30&#039;,\&lt;br /&gt;
 ASC_Time_Up_Early =&amp;gt; &#039;ASC_Time_Up_Early:05:00,05:05,05:30,05:45,06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00&#039;, \&lt;br /&gt;
 ASC_Time_Up_Late =&amp;gt;&#039;ASC_Time_Up_Late:06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00&#039;,ASC_Time_Up_WE_Holiday =&amp;gt; &#039;ASC_Time_Up_WE_Holiday:06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00&#039;}&lt;br /&gt;
[[Datei:ReadingsGroup ASC Times.png|600px|]]&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* {{Link2Forum|Topic=92628|LinkText=&amp;quot;Thread zum Modul im Forum&amp;quot;}}&lt;br /&gt;
* {{Link2Forum|Topic=90751|LinkText=&amp;quot;Thread zur Entwicklung im Forum&amp;quot;}} &lt;br /&gt;
* {{Link2Forum|Topic=73964|LinkText=&amp;quot;Thread zu den Scripten von user cluni&amp;quot;}}, die der Entwicklung des Moduls zugrunde liegen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:Rollladensteuerung]]&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FHEM_mit_HTTPS_SSL-Zertifikat_und_eine_eigene_Zertifizierungsstelle&amp;diff=29529</id>
		<title>FHEM mit HTTPS SSL-Zertifikat und eine eigene Zertifizierungsstelle</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FHEM_mit_HTTPS_SSL-Zertifikat_und_eine_eigene_Zertifizierungsstelle&amp;diff=29529"/>
		<updated>2019-02-16T08:29:23Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: /* Schlüssel für das Serverzertifikat erzeugen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Vorwort ==&lt;br /&gt;
=== Dein Anliegen ===&lt;br /&gt;
Du möchtest FHEM mit HTTPS betreiben, hasst es aber, ständig von Deinem Browser darauf aufmerksam gemacht zu werden, dass dies &amp;quot;keine sichere Verbindung&amp;quot; ist. &lt;br /&gt;
Oder Du möchtest einen weiteren Serverdienst aufsetzen, welcher verschlüsselte SSL oder TLS-Verbindungen anbietet (z.B. HTTPS, POP3S, IMAPS, LDAPS, SMTP mit TLS).&lt;br /&gt;
&lt;br /&gt;
=== Die Schwierigkeit dabei ===&lt;br /&gt;
Um eine mit SSL/TLS abgesicherte Verbindung anzubieten, benötigst Du ein Serverzertifikat. Dieses muss von einer Zertifizierungsstelle (Certification Authority oder kurz CA) signiert sein.&lt;br /&gt;
Ein offizielles Serverzertifikat, welches von einer offiziellen Stelle signiert ist, ist leider nicht kostenlos. Meist werden jährliche Gebühren in Höhe von mehreren hundert Euro fällig.&lt;br /&gt;
&lt;br /&gt;
=== Eine mögliche Lösung ===&lt;br /&gt;
Unter Linux kann man mit Bordmitteln eine eigene CA aufsetzen und selbst ein Zertifikate erstellen und signieren. Das ist ein Vorgang von wenigen Minuten. Alle Einzelheiten beschreibt dieser Artikel.&lt;br /&gt;
Der einzige Unterschied zu einem von einer anerkannten Stelle signierten Zertifikat ist, dass der Client (Emailprogramm, Browser, etc.) einmalig das root CA importieren muß.&lt;br /&gt;
&lt;br /&gt;
== Genaues Vorgehen ==&lt;br /&gt;
=== OpenSSL installieren ===&lt;br /&gt;
Für die Verwaltung der Zertifikate und im übrigen auch für die Verschlüsselung der Verbindungen mit SSL und TLS kommt unter Linux fast immer OpenSSL zum Einsatz. Wahrscheinlich ist das auf Deinem Sytem deshalb bereits installiert, wenn nicht, musst Du das Paket openssl nachinstallieren. Du benötigst aus diesem Paket den Kommandozeilenbefehl openssl.&lt;br /&gt;
&lt;br /&gt;
=== Erstellen der CA ===&lt;br /&gt;
Lege zunächst ein Verzeichnis an, in dem Du das Zertifikat ablegen willst. Wir nehmen in unserem Beispiel /root/ca:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@linux# mkdir /root/ca&lt;br /&gt;
root@linux# cd /root/ca&amp;lt;/source&amp;gt;&lt;br /&gt;
Die Gültigkeit setzen wir mit 10 Jahren bewusst sehr hoch an. Läuft die CA aus, so werden nämlich auch alle damit signierten Serverzertifikate ungültig. Die CA enthält einen geheimen Schlüssel, welcher automatisch erzeugt und in der Datei cakey.pem abgelegt wird. Das CA-Zertifikat wird nach cacert.pem geschrieben. Der folgende Befehl erzeugt das einen Schlüssel für das Zertifikat mit einer Länge von 2048 Bit:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@linux# openssl req -new -x509 -newkey rsa:2048 -keyout cakey.pem -out cacert.pem -days 3650&lt;br /&gt;
Generating a 2048 bit RSA private key&lt;br /&gt;
..............................................................&lt;br /&gt;
..............................................................&lt;br /&gt;
.........................................+++&lt;br /&gt;
......................................+++&lt;br /&gt;
writing new private key to &#039;cakey.pem&#039;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer den geheimen Schlüssel der CA kennt, kann damit beliebige Serverzertifikate signieren. Deshalb wird diese Schlüsseldatei nicht im Klartext auf der Festplatte abgelegt, sondern mit einer Passphrase verschlüsselt. Diese Passphrase benötigst Du immer dann, wenn Du mit der CA neue Zertifikate ausstellen willst:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Enter PEM pass phrase: sehrlangesgeheimespasswort&lt;br /&gt;
Verifying - Enter PEM pass phrase: sehrlangesgeheimespasswort&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Nun werden wir gebeten, Daten einzugeben, welche die CA identifizieren. Diese werden dem Client angezeigt, wenn er aufgefordert wird, das Zertifikat zu akzeptieren oder abzulehnen. Der Code für Deutschland ist DE. Wenn Du ein Feld leer lassen möchtest, so gib einen Punkt ein. Ansonsten wird der in eckigen Klammern stehende Defaultwert eingetragen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
-----&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter &#039;.&#039;, the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]: DE&lt;br /&gt;
State or Province Name (full name) [Some-State]:Brandenburg&lt;br /&gt;
Locality Name (eg, city) []:Potsdam&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Familie AG&lt;br /&gt;
Organizational Unit Name (eg, section) []:EDV&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Das Feld Common Name (CN) ist hier der offizielle Name der Zertifizierungsstelle. Für Dein eigenes CA kannst Du einfach Deinen eigenen Namen eintragen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Common Name (eg, YOUR name) []: Cool Tux&lt;br /&gt;
Email Address []: cooltux@gmail.tada&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Fertig. Folgende zwei Dateien sind entstanden:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
root@linux# ll&lt;br /&gt;
insgesamt 9&lt;br /&gt;
drwxr-xr-x   2 root root  112 2006-04-30 12:08 .&lt;br /&gt;
drwx------  12 root root  600 2006-04-30 11:54 ..&lt;br /&gt;
-rw-r--r--   1 root root 1212 2006-04-30 12:08 cacert.pem&lt;br /&gt;
-rw-r--r--   1 root root  963 2006-04-30 12:08 cakey.pem&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Vorsichtshalber solltest Du die Rechte so setzen, dass die Schlüsseldatei nur für root lesbar ist:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
root@linux# chmod 600 cakey.pem&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Du kannst nun ausprobieren, ob Du den Schlüssel mit der Passphrase wieder öffnen kannst:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
root@linux# openssl rsa -in cakey.pem -noout -text&lt;br /&gt;
Enter pass phrase for cakey.pem: wrzlprmpft&lt;br /&gt;
Private-Key: (1024 bit)&lt;br /&gt;
modulus:&lt;br /&gt;
    00:d5:a5:37:51:e9:d9:fa:e3:97:e7:46:b2:88:1a:&lt;br /&gt;
    b5:46:80:47:76:14:ae:2b:8b:3e:35:5c:ab:15:84:&lt;br /&gt;
    53:d9:63:2e:7f:08:4b:ec:77:db:02:45:f8:c7:46:&lt;br /&gt;
    58:cd:2d:f9:29:4d:96:3d:d8:6c:5d:9f:79:8a:04:&lt;br /&gt;
    cf:b7:3a:89:da:a9:63:9f:44:b3:83:cf:0d:70:7d:&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
usw...&lt;br /&gt;
&lt;br /&gt;
=== Schlüssel für das Serverzertifikat erzeugen ===&lt;br /&gt;
Nachdem wir nun eine eigene CA haben, kann diese nun endlich für unseren Server ein Zertifikat herausgeben. Dazu erzeugen wir zunächst einen 2048 Bit langen RSA Schlüssel, der mit AES 128 verschlüsselt auf der Platte abgelegt wird (ja wirklich, auch hier wieder ein verschlüsselter Schlüssel). Die Passphrase muss diesmal nicht sonderlich geheim sein, da wir sie ohnehin im Anschluss wieder entfernen werden. OpenSSL lässt allerdings keine leere Phrase zu:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@linux# openssl genrsa -out serverkey.pem -aes128 2048&lt;br /&gt;
Generating RSA private key, 2048 bit long modulus&lt;br /&gt;
....+++&lt;br /&gt;
.......................................+++&lt;br /&gt;
e is 65537 (0x10001)&lt;br /&gt;
Enter pass phrase for serverkey.pem: test&lt;br /&gt;
Verifying - Enter pass phrase for serverkey.pem: test&amp;lt;/source&amp;gt;&lt;br /&gt;
So. Nun entfernen wir die Passphrase wieder. Warum? Der Serverdienst (Apache, Cyrus, etc.) muss schließlich in der Lage sein, den Schlüssel ohne Dein Zutun zu lesen. Oder möchtest Du bei jedem Booten des Servers ein Passwort eingeben müssen?&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@linux# openssl rsa -in serverkey.pem -out serverkey.pem&lt;br /&gt;
Enter pass phrase for serverkey.pem: jaja&lt;br /&gt;
writing RSA key&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Certificate Signing Request erzeugen ===&lt;br /&gt;
Der nächste Schritt zum eigenen Zertifikat ist ein CSR. Dies muss dann nur noch von der CA signiert werden. Hier sind wieder Angaben analog zum Erstellen der CA nötig, was oft Verwirrung stiftet. Die allgemeinen Daten kann man ggfl. gleich wie oben eingeben:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@linux#  openssl req -new -key serverkey.pem -out req.pem -nodes&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter &#039;.&#039;, the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]: DE&lt;br /&gt;
State or Province Name (full name) [Some-State]:Brandenburg&lt;br /&gt;
Locality Name (eg, city) []:Potsdam&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Familie AG&lt;br /&gt;
Organizational Unit Name (eg, section) []:EDV&amp;lt;/source&amp;gt;&lt;br /&gt;
ACHTUNG, jetzt kommt das Wichtige: Beim Serverzertifikat ist der Common Name von entscheidender Bedeutung. Hier muss der DNS-Name stehen, unter dem der Client den Server anspricht! Wird das Zertifikat für eine HTTPS-Verbindung zu fhem.local verwendet, so muss der Common Name eben genau fhem.local heißen. Anderfalls wird der Browser das Zertifikat nicht akzeptieren, da er davon ausgehen muss, auf dem falschen Server gelandet zu sein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Common Name (eg, YOUR name) []: fhem.local&lt;br /&gt;
Email Address []: admin.fhem.local&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Weitere Optionen kann man einfach leer lassen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Mittlerweile tummeln sich schon vier Dateien in unserem Verzeichnis:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@linux# ll&lt;br /&gt;
insgesamt 17&lt;br /&gt;
drwxr-xr-x   2 root root  168 2006-04-30 12:29 .&lt;br /&gt;
drwx------  12 root root  600 2006-04-30 11:54 ..&lt;br /&gt;
-rw-r--r--   1 root root 1212 2006-04-30 12:08 cacert.pem&lt;br /&gt;
-rw-------   1 root root  963 2006-04-30 12:08 cakey.pem&lt;br /&gt;
-rw-r--r--   1 root root 1017 2006-04-30 12:29 req.pem&lt;br /&gt;
-rw-r--r--   1 root root 1679 2006-04-30 12:21 serverkey.pem&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OpenSSL-Konfiguration anpassen ===&lt;br /&gt;
Leider kann man bei OpenSSL nicht alle Daten als Kommandozeilenargumente übergeben. Einige Einstellungen muss man lästigerweise in der Datei /etc/ssl/openssl.cnf ändern, bevor man signieren kann. Öffne diese Datei und passe folgende Zeilen in der Sektion [ CA_default ] an:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/ssl/openssl.cnf:&lt;br /&gt;
dir             = .              # Where everything is kept&lt;br /&gt;
new_certs_dir   = $dir           # default place for new certs&lt;br /&gt;
private_key     = $dir/cakey.pem # The private key&lt;br /&gt;
RANDFILE        = $dir/.rand     # private random number file&lt;br /&gt;
default_days    = 3650           # how long to certify for&amp;lt;/source&amp;gt;&lt;br /&gt;
Das Feld default_days ist auf 365 Tage voreingestellt und gibt die Gültigkeit des Zertifikates an. Abgelaufene Zertifikate sind im Übrigen ein sehr häufiges Problem. Wenn es soweit ist, kennt sich damit nämlich schon lange keiner mehr aus. Deswegen kannst Du wie im Beispiel angegeben die Lebensdauer z.B. auf 10 Jahre heraufsetzen.&lt;br /&gt;
&lt;br /&gt;
Nun muss man noch einige Dateien anlegen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@linux# echo 01 &amp;gt; serial&lt;br /&gt;
root@linux# touch index.txt&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Serverzertifikat signieren ===&lt;br /&gt;
Kommen wir zum feierlichen Abschluss: Unsere CA signiert nun das Zertifikat:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@linux# openssl ca -in req.pem -notext -out servercert.pem&lt;br /&gt;
Enter pass phrase for ./cakey.pem: langesgeheimespasswort&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Certificate is to be certified until Apr 27 10:45:36 2016 GMT (3650 days)&lt;br /&gt;
Sign the certificate? [y/n]: y&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1 out of 1 certificate requests certified, commit? [y/n] y&lt;br /&gt;
Write out database with 1 new entries&lt;br /&gt;
Data Base Updated&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Zertifikate installieren ===&lt;br /&gt;
Wie Du das Zertifikat in FHEM installierst, findest Du [[Raspberry_Pi_%26_HTTPS|hier]] und wenn Du ein Server Zertifikat für NGINX installieren möchtest, findest Du Infos dazu [[HTTPS-Absicherung_%26_Authentifizierung_via_nginx_Webserver|hier]]&lt;br /&gt;
&lt;br /&gt;
== Nachwort ==&lt;br /&gt;
=== Einbinden der root CA in die Zertifizierungsstelle des Browsers ===&lt;br /&gt;
Beim Firefox importieren wir unsere cacert.pem unter Einstellungen -&amp;gt; Erweitert -&amp;gt; Zertifikate -&amp;gt; Zertifikate anzeigen -&amp;gt; Zertifizierungsstellen ein.&lt;br /&gt;
Unter Chrome/Chromium finden wir die Zertifikatsverwaltung unter Einstellungen -&amp;gt; Erweitert -&amp;gt; Zertifikate verwalten HTTPS/SSL-Zertifikate und -Einstellungen verwalten -&amp;gt; Zertifizierungsstellen&lt;br /&gt;
&lt;br /&gt;
=== Bekannte Probleme ===&lt;br /&gt;
Für den Chrome/Chromium müssen wir zusätzlich &amp;quot;Subject Alternative Names (SAN)&amp;quot; in unser Zertifikat eintragen. Dies geschieht beim Serverzertifikat signieren. Dazu müssen wir uns eine weitere Datei anlegen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@linux# vim oats.extensions.cnf&lt;br /&gt;
&lt;br /&gt;
basicConstraints=CA:FALSE&lt;br /&gt;
subjectAltName=@my_subject_alt_names&lt;br /&gt;
subjectKeyIdentifier = hash&lt;br /&gt;
&lt;br /&gt;
[ my_subject_alt_names ]&lt;br /&gt;
DNS.1 = fhem01.tuxnet.local&lt;br /&gt;
DNS.2 = fhem02.tuxnet.local&lt;br /&gt;
DNS.3 = fhem01-vpn.tuxnet.local&amp;lt;/source&amp;gt;&lt;br /&gt;
Die Signierung unseres Serverzertifikates erfolgt dann mit folgendem Befehl:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
openssl ca -in req.pem -notext -extfile oats.extensions.cnf -out servercert.pem&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Prüfen von Zertifikaten ===&lt;br /&gt;
Zertifikate kann man im übrigen auf dieser [https://www.networking4all.com/en/ssl+certificates/csr+check/| Seite] prüfen lassen.&lt;br /&gt;
Dazu kopiert man den Inhalt der servercert.pem in das Eingabefeld der Seite und klickt dann auf Check CSR.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Google_Assistant_FHEM_Connect&amp;diff=29310</id>
		<title>Google Assistant FHEM Connect</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Google_Assistant_FHEM_Connect&amp;diff=29310"/>
		<updated>2019-01-30T13:58:22Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;FHEM Connect&#039;&#039;&#039; ist eine Weiterentwicklung von [[Alexa-Fhem|Alexa FHEM]] speziell für den Google Assistant. Mit FHEM Connect ist die Verknüpfung von FHEM und dem Google Assistant in wenigen Schritten getan. Damit kannst du Geräte die in FHEM verwaltet werden auch über den Google Assistant von beliebigen Geräten mit Google Assistant Support steuern.&lt;br /&gt;
&lt;br /&gt;
Es sind keine großen Einrichtungen dafür notwendig und die Verbindung zwischen Google und deinem Client ist ebenso gesichert.&lt;br /&gt;
&lt;br /&gt;
ACHTUNG!!! FHEM muß zwingend aktuell sein. Update &amp;gt; 28.01.2019&lt;br /&gt;
&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Anbindung von FHEM an Google Assistant&lt;br /&gt;
|ModType=x&lt;br /&gt;
|ModTechName=&lt;br /&gt;
|ModForumArea=Frontends/Sprachsteuerung&lt;br /&gt;
|ModOwner=dominik&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Hintergrundinfos==&lt;br /&gt;
FHEM Connect basiert auf Google Firebase, welches die Plattform für die Kommunikation mit Google bietet. Der lokal installierte fhemconnect Client kommuniziert mit Google Firebase und übermittelt von dort die Daten an Google. Das hat 3 große Vorteile:&lt;br /&gt;
* Keine Portfreigaben notwendig&lt;br /&gt;
* Kommunikation läuft gesichert über HTTPS und die Authentifizierung über Auth0 mittels OAuth2&lt;br /&gt;
* Neue Funktionalitäten, wie zum Beispiel die Unterstützung von neuen Devices, sind immer gleich verfügbar sobald diese im Firebase Projekt implementiert wurden. Man muss also nicht regelmäßig aktualisieren um in den Genuss von neuen Google Assistant Features zu kommen.&lt;br /&gt;
&lt;br /&gt;
==Installation (Kurzanleitung)==&lt;br /&gt;
Wichtig: Aktuell ist der Google Action noch im Beta Test und ihr müsst daher als Tester mit eurer GMail Adresse mit aufgenommen werden. Schickt mir dazu eine kurze private Nachricht im FHEM Forum ([https://forum.fhem.de/index.php?action=profile;u=15803 dominik]) mit eurer GMail Adresse. Sobald ich diese hinzugefügt habe, könnt ihr den Action in der Google Home App sehen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bevor ihr die Befehle unten ausführt, müsst ihr das Testaction aktivieren. Dazu bitte auf folgenden Link klicken:&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
https://console.actions.google.com/project/fhem-connector-beta/simulatorcreate?isDeepLink&lt;br /&gt;
&lt;br /&gt;
* 39_gassistant.pm von hier herunterladen: https://forum.fhem.de/index.php/topic,96696.0.html&lt;br /&gt;
* 39_gassistant.pm nach /opt/fhem/FHEM kopieren&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:70%;&amp;quot;&amp;gt;&lt;br /&gt;
sudo npm install -g gassistant-fhem --unsafe-perm&lt;br /&gt;
define gassistant gassistant&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Ca. 30s warten bis ein Reading gassistantFHEM.loginURL erscheint&lt;br /&gt;
* Link öffnen und einloggen&lt;br /&gt;
* Den erhaltenen authcode in FHEM hinterlegen (set gassistant authcode ...)&lt;br /&gt;
&lt;br /&gt;
* /opt/fhem/FHEM/gassistant-fhem.cfg bei Bedarf anpassen&lt;br /&gt;
* Geräte in den in der gassistant-fhem.cfg definierten Raum verschieben&lt;br /&gt;
&lt;br /&gt;
==Architektur==&lt;br /&gt;
* fhemconnect Client&lt;br /&gt;
Lokale installierter Client der die Verbindung zu FHEM herstellt.&lt;br /&gt;
&lt;br /&gt;
* Auth0&lt;br /&gt;
Auth0 wird sowohl von fhemconnect Client als auch von Google Assistant genutzt um den User zu authentifizieren. Damit erhält der User eine eindeutigen User ID.&lt;br /&gt;
&lt;br /&gt;
* Firebase (&amp;quot;zentralerer Server&amp;quot;, obwohl es Server-less betrieben wird)&lt;br /&gt;
&lt;br /&gt;
* Firebase Firestore&lt;br /&gt;
Datenbank in welcher die Geräteinformationen gespeichert werden.&lt;br /&gt;
&lt;br /&gt;
* Firebase Realtime DB&lt;br /&gt;
Datenbank in welcher der aktuelle Status der Geräte gespeichert wird.&lt;br /&gt;
&lt;br /&gt;
* Firebase Cloud Functions&lt;br /&gt;
Die Cloud Function stellt einen Webaufruf im Internet zur Verfügung. Google ruft direkt eine solche Cloud Function auf. Des Weiteren wird diese auch für die Kommunikation vom fhemconnect Client zum Firebase Projekt (&amp;quot;Server&amp;quot;) genutzt.&lt;br /&gt;
&lt;br /&gt;
Die Dienste auth0 und Google Firebase wurden beide als EU Instanzen konfiguriert. Eure Daten liegen daher im EU Raum und unterliegen damit auch den EU Datenschutzvorgaben.&lt;br /&gt;
&lt;br /&gt;
==Datenfluss==&lt;br /&gt;
Der Datenfluss und die Arbeitsweise von FHEM Connect wird anhand des folgenden Beispiels erklärt:&lt;br /&gt;
* Bei der Verknüpfung des Google Accounts mit FHEM Connect wird der Service von auth0 herangezogen. Dieser authentifiziert den User und generiert einen Access und Refresh Token mit welchem Google sich gegenüber FHEM Connect (“dem zentralen Service”) authentifiziert.&lt;br /&gt;
* Bei der Installation des fhemconnect Clients wird ebenso auth0 herangezogen. Der User wird auch dort über auth0 authentifiziert und damit kann sich auch fhemconnect am zentralen Service anmelden.&lt;br /&gt;
* Durch dieses Verfahren kann FHEM Connect die User ID aus dem fhemconnect Client und die User ID die über Google kommt matchen und damit Befehle dem richtigen User zuordnen. Ein Faken dieser User ID ist nicht möglich, da der übertragene Token (JSON Web Token) signiert ist und bei jeder Übertragung von auth0 verifiziert wird.&lt;br /&gt;
* Durch die Verknüpfung des Accounts weiß Google, dass es FHEM Connect gibt und es dorthin Smart Home Befehle schicken kann.&lt;br /&gt;
* Ein Befehl wie &amp;quot;Schalte das Nachtlicht ein&amp;quot; wird von Google interpretiert&lt;br /&gt;
* FHEM Connect (der zentrale Service der auf Firebase läuft) erhält den Befehl das Nachtlicht einzuschalten. Durch den von Google übertragenen Access Token, welcher die User ID beinhaltet, wird der User identifiziert.&lt;br /&gt;
* FHEM Connect weiß durch die User ID, welche es dem verifizierten Access Token entnommen hat, welchem User der Befehl zuzuordnen ist und schickt dieser über Firebase an den fhemconnect Client.&lt;br /&gt;
* Der fhemconnect Client schickt den Befehl direkt an FHEM weiter wo der Befehl ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
==Update==&lt;br /&gt;
Es wird nur in seltenen Fällen ein Update benötigt, da der größte Teil der Anwendung in Firebase konfiguriert ist. Sollte der Client dennoch aktualisiert werden müssen, dann kann das mit folgenden Befehlen durchgeführt werden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:70%;&amp;quot;&amp;gt;&lt;br /&gt;
sudo npm install -g gassistant-fhem&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* gassistant über FHEM neu starten&lt;br /&gt;
&lt;br /&gt;
==FAQs==&lt;br /&gt;
* &amp;quot;Method Not Allowed&amp;quot; Fehlermeldung bei der npm Installation?&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:70%;&amp;quot;&amp;gt;&lt;br /&gt;
sudo npm install -g npm&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Kostenlos==&lt;br /&gt;
Aktuell wird der Service kostenlos betrieben. Abhängig von der Auslastung, könnte es zukünftig der Fall sein, dass die freien Limits bei Firebase und Auth0 überstiegen werden und damit Kosten anfallen. Solange das nicht der Fall ist, wird der Service kostenlos zur Verfügung gestellt.&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=NUKI&amp;diff=27957</id>
		<title>NUKI</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=NUKI&amp;diff=27957"/>
		<updated>2018-10-02T23:00:41Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: /* Definition */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right&amp;quot;&amp;gt;&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Einbindung der Nuki Bridge HW/APP&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=NUKIBridge&lt;br /&gt;
|ModForumArea=Sonstige Systeme&lt;br /&gt;
|ModTechName=73_NUKIBridge.pm&lt;br /&gt;
|ModOwner=CoolTux &amp;lt;br /&amp;gt;({{Link2FU|13684|Forum}} / [[Benutzer:CoolTux|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuern von Nuki Smartlocks über NUKIBridge&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=NUKIDevice&lt;br /&gt;
|ModForumArea=Sonstige Systeme&lt;br /&gt;
|ModTechName=73_NUKIDevice.pm&lt;br /&gt;
|ModOwner=CoolTux &amp;lt;br /&amp;gt;({{Link2FU|13684|Forum}} / [[Benutzer:CoolTux|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==NUKIBridge==&lt;br /&gt;
NUKIBridge - Steuert das Nuki Smartlock über die Nuki Bridge &lt;br /&gt;
&lt;br /&gt;
Das Nuki Bridge Modul verbindet FHEM mit der Nuki Bridge und liest dann alle auf der Bridge verfügbaren Smartlocks ein. Desweiteren werden automatisch die erkannten Smartlocks als eigenständige Devices angelegt.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung für ein fehlerfreies Laden ist die Installation von JSON (libperl-json).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Definition===&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; NUKIBridge &amp;lt;HOST&amp;gt; &amp;lt;API-TOKEN&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define NBridge1 NUKIBridge 192.168.0.23 F34HK6&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Anweisung erstellt ein NUKIBridge Device mit Namen NBridge1 und der IP 192.168.0.23 sowie dem Token F34HK6.&lt;br /&gt;
Nach dem Anlegen des Bridge Devices werden alle zur Verfügung stehende Smartlock automatisch in FHEM angelegt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Readings===&lt;br /&gt;
* 0_nukiId - ID des ersten gefundenen Nuki Smartlocks&lt;br /&gt;
* 0_name - Name des ersten gefunden Nuki Smartlocks&lt;br /&gt;
* smartlockCount - Anzahl aller gefundenen Smartlock&lt;br /&gt;
* bridgeAPI - API Version der Bridge&lt;br /&gt;
* bridgeType - Hardware oder Software/App Bridge&lt;br /&gt;
* currentTime - aktuelle Zeit auf der Bridge zum zeitpunkt des Info holens&lt;br /&gt;
* firmwareVersion - aktuell auf der Bridge verwendete Firmwareversion&lt;br /&gt;
* hardwareId - ID der Hardware Bridge&lt;br /&gt;
* lastError - gibt die letzte HTTP Errormeldung wieder&lt;br /&gt;
* serverConnected - true/false gibt an ob die Hardwarebridge Verbindung zur Nuki-Cloude hat.&lt;br /&gt;
* serverId - gibt die ID des Cloudeservers wieder&lt;br /&gt;
* uptime - Uptime der Bridge in Sekunden&lt;br /&gt;
* wifiFirmwareVersion- Firmwareversion des Wifi Modules der Bridge&lt;br /&gt;
* Die vorangestellte Zahl ist forlaufend und gibt beginnend bei 0 die Eigenschaften Eines Smartlocks wieder.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Set===&lt;br /&gt;
* autocreate - Veranlasst ein erneutes Einlesen aller Smartlocks von der Bridge und falls noch nicht in FHEM vorhanden das autimatische anlegen.&lt;br /&gt;
* callbackRemove - Löschen einer Callback Instanz auf der Bridge. Die Instanz ID kann mittels get callbackList ermittelt werden&lt;br /&gt;
* clearLog - löscht das Logfile auf der Bridge&lt;br /&gt;
* fwUpdate - schaut nach einer neueren Firmware und installiert diese sofern vorhanden&lt;br /&gt;
* info - holt aktuellen Informationen über die Bridge&lt;br /&gt;
* reboot - veranlässt ein reboot der Bridge&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Get===&lt;br /&gt;
* callbackList - Gibt die Liste der eingetragenen Callback URL&#039;s wieder. Die Bridge nimmt maximal 3 auf.&lt;br /&gt;
* logFile - Zeigt das Logfile der Bridge an&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Attribute===&lt;br /&gt;
* disable - deaktiviert die Nuki Bridge&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==NUKIDevice==&lt;br /&gt;
NUKIDevice - Steuert das Nuki Smartlock&lt;br /&gt;
&lt;br /&gt;
Das Nuki Modul verbindet FHEM über die Nuki Bridge mit einem Nuki Smartlock. Es ist dann möglich das Schloss zu ver- und entriegeln.&lt;br /&gt;
In der Regel werden die Nuki Devices automatisch durch das Bridgemodul angelegt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Definition===&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; NUKIDevice &amp;lt;Nuki-Id&amp;gt; &amp;lt;IODev-Device&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define Haustuer NUKIDevice 1 NBridge1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Anweisung erstellt ein NUKIDevice mit Namen Haustuer, der NukiId 1 sowie dem IODev Device NBridge1. Nach dem Anlegen des Devices wird automatisch der aktuelle Zustand des Smartlocks aus der Bridge gelesen.&lt;br /&gt;
Damit das NUKIDevice auch Statusänderungen mitbekommt, die beispielsweise aus der nativen NUKI-App oder der manuellen Betätigung des Devices herrühren, ist es notwendig die Attribute webhookFWinstance und webhookHttpHostname zu setzen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
attr Haustuer webhookFWinstance WEB (Name der FHEMWEB Instanz)&lt;br /&gt;
&lt;br /&gt;
attr Haustuer webhookHttpHostname 192.168.0.1 (IP/FQDN vom FHEM&lt;br /&gt;
Server)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zum Überprüfen kann die Funktion&lt;br /&gt;
&amp;lt;code&amp;gt;get NUKIBridge callbackList&amp;lt;/code&amp;gt;&lt;br /&gt;
aufgerufen werden. Es sollte nur ein Callback eingetragen&lt;br /&gt;
sein, der in dieser Form hinterlegt sein sollte.&lt;br /&gt;
0 http://192.168.0.1:8083/fhem/NUKIDevice-123456789&lt;br /&gt;
&lt;br /&gt;
===Readings===&lt;br /&gt;
* state - Status des Smartlock bzw. Fehlermeldung von Fehler vorhanden.&lt;br /&gt;
* lockState - aktueller Schließstatus uncalibrated, locked, unlocked, unlocked (lock ‘n’ go), unlatched, locking, unlocking, unlatching, motor blocked, undefined.&lt;br /&gt;
* succes - true, false Gibt des Status des letzten Schließbefehles wieder. Geklappt oder nicht geklappt.&lt;br /&gt;
* batteryCritical - Ist die Batterie in einem kritischen Zustand? true, false&lt;br /&gt;
* battery - Status der Batterie, ok/low&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Set===&lt;br /&gt;
* statusRequest - ruft den aktuellen Status des Smartlocks von der Bridge ab.&lt;br /&gt;
* lock - verschließen&lt;br /&gt;
* unlock - aufschließen&lt;br /&gt;
* unlatch - entriegeln/Falle öffnen.&lt;br /&gt;
* locknGo - verschließen wenn gegangen&lt;br /&gt;
* locknGoWithUnlatch - verschließen nach dem die Falle geöffnet wurde.&lt;br /&gt;
&lt;br /&gt;
===Attribute===&lt;br /&gt;
* disable - deaktiviert das Nuki Device&lt;br /&gt;
* webhookFWinstance - zu verwendene Webinstanz für den Callbackaufruf&lt;br /&gt;
* webhookHttpHostname - IP oder FQDN vom FHEM Server für den Callbackaufruf&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=AutoShuttersControl&amp;diff=27902</id>
		<title>AutoShuttersControl</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=AutoShuttersControl&amp;diff=27902"/>
		<updated>2018-09-18T09:09:04Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: /* Readings im AutoShuttersControl Device selbst. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuerung von Rollläden&lt;br /&gt;
|ModCategory=Automatisierung&lt;br /&gt;
|ModType=x&lt;br /&gt;
&amp;lt;!-- |ModCmdRef= ---- noch nicht Teil von FHEM --&amp;gt;&lt;br /&gt;
|ModForumArea=Automatisierung&lt;br /&gt;
|ModTechName=73_AutoShuttersControl.pm&lt;br /&gt;
|ModOwner=CoolTux}}&lt;br /&gt;
Mit [[AutoShuttersControl]] oder kurz ASC können typische Aufgabenstellungen im Zusammenhang mit Rollläden u.ä. automatisiert werden, wie zum Beispiel das Öffnen bei Sonnenaufgang, Schließen bei Sonnenuntergang oder das Anfahren von Lüftungspositionen beim Öffnen des zugehörigen Fensters. &lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Das Modul befindet sich derzeit noch in der Entwicklung; der jeweils aktuelle Stand ist  diesem {{Link2Forum|Topic=90751|LinkText=&amp;quot;Thread im Forum&amp;quot;}} zu entnehmen.}}&lt;br /&gt;
&lt;br /&gt;
== Basics ==&lt;br /&gt;
Zur Nutzung des Moduls sollten folgende andere FHEM-Devices vorhanden sein:&lt;br /&gt;
* Rollläden&lt;br /&gt;
* Fensterkontakte und &lt;br /&gt;
* Bewohnerstatus auf Basis von Residents/Roomates in englisch. Ersatzweise andere Devices, z.B. Dummys, welche als &#039;&#039;state&#039;&#039; &#039;&#039;home&#039;&#039;, &#039;&#039;asleep&#039;&#039;, &#039;&#039;gotosleep&#039;&#039; und &#039;&#039;awoken&#039;&#039; setzen sowie ein Reading &#039;&#039;lastState&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die Einrichtung des Moduls bzw. dessen Funktionalität erfolgt in mehreren Schritten:&lt;br /&gt;
* Definition des ASC-Devices&lt;br /&gt;
* Einstellung zentraler Vorgaben am ASC-Device&lt;br /&gt;
* Markieren der zukünftig zu steuernden Rollladen-Devices&lt;br /&gt;
* Einbinden der Rollladen-Devices in das ASC-Device&lt;br /&gt;
* Einstellen der individuellen Vorgaben je Rollladen (am Rollladen-Device)&lt;br /&gt;
&lt;br /&gt;
== Einrichtung ==&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitung ===&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Ihr benötigt ein aktuelles FHEM. Update ab dem 04.09.2018 Voraussetzung!}}&lt;br /&gt;
&lt;br /&gt;
Zunächst muß das Modul aus dem Link im Forum entpackt werden und die Datei 73_AutoShuttersControl.pm in das Unterverzeichnis für die Module kopiert werden und die Rechte angepaßt.&lt;br /&gt;
&lt;br /&gt;
Speicherort für Linux-Standardinstallationen: /opt/fhem/FHEM&lt;br /&gt;
Rechte: &amp;lt;code&amp;gt;sudo chown 73_AutoShuttersControl.pm&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;sudo chmod 644 73_AutoShuttersControl.pm&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach sollte ein &amp;lt;code&amp;gt;reload AutoShuttersControl&amp;lt;/code&amp;gt; in FHEM-Eingabefeld ausreichen, um das Modul verfügbar zu machen.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Eventuell muß FHEM auch einmalig neu gestartet werden, um das Modul nutzen zu können.}}&lt;br /&gt;
&lt;br /&gt;
=== Define des ASC-Devices ===&lt;br /&gt;
Es genügt ein einfaches define ohne weitere Parameter.&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; AutoShuttersControl&amp;lt;/code&amp;gt;&lt;br /&gt;
Dies bewirkt neben der Anlage des Devices selbst auch, dass als weiteres globales Attribut &#039;&#039;AutoShuttersControl&#039;&#039; verfügbar wird.&lt;br /&gt;
&lt;br /&gt;
=== Einstellung zentraler Vorgaben ===&lt;br /&gt;
Es stehen am ASC-Device einige Attribute zur Verfügung, über die sich das Verhalten des ASC-Devices insgesamt steuern läßt, z.B. zur Vermeidung von morgendlichen oder abendlichen Fahrten sowie bei Gefahr von Schäden an den Rollläden durch Frost oder zur Reaktion auf Fensterkontakte. Details sind der Commandref zu entnehmen.&lt;br /&gt;
Diese können auch nachträglich noch geändert werden.&lt;br /&gt;
&lt;br /&gt;
=== Markieren zu steuernder Rollladen-Devices ===&lt;br /&gt;
Um einen oder mehrere Rollläden durch das ASC-Device zu steuern, wird für jeden Rollladen jeweils das neue globale Attribut &#039;&#039;AutoShuttersControl&#039;&#039; gesetzt. Der Wert ist mit 1 oder 2 festzulegen, wobei &#039;&#039;&#039;1&#039;&#039;&#039; bedeutet, dass &lt;br /&gt;
* die Offen-Position kleiner ist als die Geschlossen-Position, also typischerweise 0 &#039;&#039;offen&#039;&#039; bedeutet und 100 für &#039;&#039;geschlossen&#039;&#039; steht&lt;br /&gt;
* eine bestimmte Position mit &#039;&#039;&#039;position&#039;&#039;&#039; angefahren wird, also z.B. &amp;lt;code&amp;gt;set &amp;lt;name&amp;gt; position 70&amp;lt;/code&amp;gt;.&lt;br /&gt;
Dies ist z.B. die  passende Wahl für ROLLO-Devices&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;&#039;2&#039;&#039;&#039; steht für ein umgekehrtes Verhalten und den Befehlsteil &#039;&#039;pct&#039;&#039;, also &#039;&#039;offen&#039;&#039; für &amp;lt;code&amp;gt;set &amp;lt;name&amp;gt; pct 100&amp;lt;/code&amp;gt;. Typischer Vertreter dieses Typs sind HomeMatic (CUL_HM-) Geräte.&lt;br /&gt;
&lt;br /&gt;
=== Einbinden in das ASC-Device ===&lt;br /&gt;
Nachdem man das obige Attribut bei einem oder mehreren Rollladen-Devices gesetzt hat, kann mit &lt;br /&gt;
&amp;lt;code&amp;gt;set &amp;lt;name&amp;gt; scanForShutters&amp;lt;/code&amp;gt; ein Suchlauf gestartet werden, mit dem dann diese Rollläden durch das Modul gefunden und in die Steuerungslogik eingebunden werden.&lt;br /&gt;
&lt;br /&gt;
=== Einstellen der individuellen Vorgaben ===&lt;br /&gt;
Danach sind jeweils an den Rollladen-Devices weitere Attribute verfügbar, mit denen die für den jeweiligen Rollladen geltenden Einstellungen vorgenommen werden können. &lt;br /&gt;
Die Beschreibung der Attribute ist in der commandref enthalten.&lt;br /&gt;
&lt;br /&gt;
== Readings ==&lt;br /&gt;
&lt;br /&gt;
===Readings im AutoShuttersControl Device selbst.===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Datentyp/&amp;lt;BR/&amp;gt;Wertebereich !! Bedeutung  &lt;br /&gt;
|-&lt;br /&gt;
|..._nextAstroTimeEvent || ||Uhrzeit des nächsten Astro Events, Sonnenauf, Sonnenuntergang oder feste Zeit pro Rollonamen &lt;br /&gt;
|-&lt;br /&gt;
|..._lastPosValue || ||letzter abgesetzter Fahrbefehl pro Rollonamen&lt;br /&gt;
|-&lt;br /&gt;
|..._lastDelayPosValue || ||letzter abgesetzter Fahrbefehl welcher beim nächsten zulässigen Event ausgeführt wird.&lt;br /&gt;
|-&lt;br /&gt;
|partyMode ||on, off || aktiviert den globalen Partymodus, alle Rollläden welche das Attribut AutoShuttersControl_Partymode bei sich auf on gestellt haben werden nicht mehr gesteuert. Der letzte Schaltbefehle welcher durch ein Fensterevent oder Bewohnerstatus an die Rollläden gesendet wurde, wird beim off setzen durch set ASC-Device partyMode off ausgeführt&lt;br /&gt;
|-&lt;br /&gt;
|lockOut || on, off ||für das aktivieren des Aussperrschutzes gemäß dem entsprechenden Attribut AutoShuttersControl_lock-out im jeweiligen Rolladen. (siehe Beschreibung bei den Attributen für die Rolladendevices)&lt;br /&gt;
|-&lt;br /&gt;
|room_... || ||Auflistung aller Rollläden welche in den jeweiligen Rämen gefunden wurde, Bsp.: room_Schlafzimmer,Terrasse&lt;br /&gt;
|-&lt;br /&gt;
|state || ||Status des Devices active, enabled, disabled&lt;br /&gt;
|-&lt;br /&gt;
|sunriseTimeWeHoliday|| on,off ||wird das Rolladen Device Attribut Attributes AutoShuttersControl_Time_Up_WE_Holiday Beachtet oder nicht&lt;br /&gt;
|-&lt;br /&gt;
|userAttrList || rolled out ||Status der UserAttribute welche an die Rollläden gesendet werden&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Readings in den Rolllädendevices===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Bedeutung  &lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Time_Sunrise ||Sonnenaufgangszei für das Rollo&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Time_Sunset ||Sonnenuntergangszeit für das Rollo&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Settings ==&lt;br /&gt;
&lt;br /&gt;
===Set Befehle für AutoShuttersControl Device===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Datentyp/&amp;lt;BR/&amp;gt;Wertebereich !! Beschreibung  &lt;br /&gt;
|-&lt;br /&gt;
|partyMode ||on, off ||aktiviert den globalen Partymodus. Siehe Reading partyMode&lt;br /&gt;
|-&lt;br /&gt;
|lockOut ||on, off ||aktiviert den globalen Aussperrschutz. Siehe Reading partyMode&lt;br /&gt;
|-&lt;br /&gt;
|renewSetSunriseSunsetTimer || || erneuert bei allen Rollläden die Zeiten für Sunset und Sunrise und setzt die internen Timer neu.&lt;br /&gt;
|-&lt;br /&gt;
|scanForShutters || ||sucht alle FHEM Devices mit dem Attribut &amp;quot;AutoShuttersControl&amp;quot; 1/2&lt;br /&gt;
|-&lt;br /&gt;
|sunriseTimeWeHoliday || on,off ||aktiviert/deaktiviert die Beachtung des Rolladen Device Attributes AutoShuttersControl_Time_Up_WE_Holiday&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Attribute ==&lt;br /&gt;
&lt;br /&gt;
===Attribute im AutoShuttersControl Device selbst.===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Datentyp/&amp;lt;BR/&amp;gt;Wertebereich !! Default-Wert !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_antifreezeTemp || || ||Temperatur ab welcher der Frostschutz greifen soll und das Rollo nicht mehr fährt. Der letzte Fahrbefehl wird gespeichert.&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_autoAstroModeEvening ||aktuell REAL, CIVIL, NAUTIC, ASTRONOMIC || || (in genau dieser Schreibweise)&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_autoAstroModeEveningHorizon || || || Höhe über Horizont wenn beim Attribut AutoShuttersControl_autoAstroModeEvening HORIZON ausgewählt&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_autoAstroModeMorning ||aktuell REAL, CIVIL, NAUTIC, ASTRONOMIC || ||(in genau dieser Schreibweise)&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_autoAstroModeMorningHorizon || || ||Höhe über Horizont wenn beim Attribut AutoShuttersControl_autoAstroModeMorning HORIZON ausgewählt&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_autoShuttersControlComfort ||on, off || ||schaltet die Komfortfunktion an. Bedeutet das ein Rollladen mit einem threestate Sensor am Fenster beim öffnen in eine weit offen Position fährt. Die Offenposition wird beim Rollladen über das Attribut AutoShuttersControl_Pos_after_ComfortOpen eingestellt.&lt;br /&gt;
|- &lt;br /&gt;
|AutoShuttersControl_autoShuttersControlEvening ||on, off || ||ob Abends die Rollläden automatisch nach Zeit gesteuert werden sollen&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_autoShuttersControlMorning ||on, off || ||ob Morgens die Rollläden automatisch nach Zeit gesteuert werden sollen&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_temperatureReading || || ||Reading für die Aussentemperatur&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_temperatureSensor || || ||Device für die Aussentemperatur&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_timeUpHolidayDevice || || ||Device zur Urlaubserkennung oder Sonstiges / muss 0 oder 1 im Reading state beinhalten.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Attribute in den Rolllädendevices===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Datentyp/&amp;lt;BR/&amp;gt;Wertebereich !! Default-Wert !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl || 0, 1, 2 || ||1 = &amp;quot;Inverse oder Rollo Bsp.: Rollo Oben 0, Rollo Unten 100 und der Befehl zum Prozentualen fahren ist position&amp;quot;,&amp;lt;BR/&amp;gt; 2 = &amp;quot;Homematic Style Bsp.: Rollo Oben 100, Rollo Unten 0 und der Befehl zum Prozentualen fahren ist pct&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Antifreeze ||on, off || ||Frostschutz an oder aus&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_AutoAstroModeEvening ||aktuell REAL, CIVIL, NAUTIC, ASTRONOMIC || ||&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_AutoAstroModeEveningHorizon || || ||Höhe über Horizont wenn beim Attribut AutoShuttersControl_autoAstroModeEvening HORIZON ausgewählt&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_AutoAstroModeMorning ||aktuell REAL, CIVIL, NAUTIC, ASTRONOMIC || ||&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_AutoAstroModeMorningHorizon || || ||Höhe über Horizont wenn beim Attribut AutoShuttersControl_autoAstroModeMorning HORIZON ausgewählt&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Closed_Pos || || ||in 10 Schritten von 0 bis 100, default Vorgabe ist abhängig vom Attribut AutoShuttersControl&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Down ||astro, time || ||bei Astro wird Sonnenuntergang berechnet, bei time wird der Wert aus AutoShuttersControl_Time_Down_Early als Fahrzeit verwendet&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Mode_Down ||always, absent, off || ||wann darf die Automatik steuern. immer, niemals, bei abwesenheit des Roomate (ist kein Roommate und absent eingestellt wird gar nicht gesteuert)&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Mode_Up ||always, absent, off || ||wann darf die Automatik steuern. immer, niemals, bei abwesenheit des Roomate (ist kein Roommate und absent eingestellt wird gar nicht gesteuert)&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Offset_Minutes_Evening  || || ||maximale zufällige Verzögerung in Minuten (minimal 1) bei der Berechnung der Fahrzeiten für Abends&lt;br /&gt;
|-  &lt;br /&gt;
|AutoShuttersControl_Offset_Minutes_Morning || || ||maximale zufällige Verzögerung in Minuten (minimal 1) bei der Berechnung der Fahrzeiten für Morgens&lt;br /&gt;
|-  &lt;br /&gt;
|AutoShuttersControl_Open_Pos || || ||in 10 Schritten von 0 bis 100, default Vorgabe ist abhängig vom Attribut AutoShuttersControl&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Partymode ||on, off || ||schaltet den Partymodus an oder aus, Wird dann am ASC Device set ASC-DEVICE partyMode on geschalten, werden alle Fahrbefehle an den Rollläden welche das Attribut auf on haben zwischen gespeichert und später erst ausgeführt&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Pos_Cmd || ||  ||der set Befehl um den Rollladen in Prozent Angaben zu fahren, muss der selbe sein wie das Reading welches die Position des Rollladen in Prozent an gibt&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Pos_after_ComfortOpen || || ||in 10 Schritten von 0 bis 100, default Vorgabe ist abhängig vom Attribut AutoShuttersControl&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Roommate_Reading || || ||das Reading zum Roommate Device welches den Status wieder gibt&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Roommate_Device || || ||Name des Roommate Devices welcher den Bewohner des Raumes vom Rollladen wieder gibt&lt;br /&gt;
|-                                &lt;br /&gt;
|AutoShuttersControl_Time_Down_Early || || ||Sunset frühste Zeit zum runter fahren&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Time_Down_Late || || ||Sunset späteste Zeit zum runter fahren &lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Time_Up_Early || || ||Sunrise frühste Zeit zum hoch fahren&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Time_Up_Late || || ||Sunrise späteste Zeit zum hoch fahren&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Time_Up_WE_Holiday  || || ||Sunrise frühste Zeit zum hochfahren am Wochenende und/oder Urlaub (we2holiday wird beachtet), Achtung sollte nicht größer sein wie AutoShuttersControl_Time_Up_Late sonst wird AutoShuttersControl_Time_Up_Late verwendet&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Up ||astro, time || ||bei Astro wird Sonnenaufgang berechnet, bei time wird der Wert aus AutoShuttersControl_Time_Up_Early als Fahrzeit verwendet&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Ventilate_Pos || || ||in 10 Schritten von 0 bis 100, default Vorgabe ist abhängig vom Attribut AutoShuttersControl&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Ventilate_Window_Open || || ||auf lüften, wenn das Fenster gekippt/geöffnet wird und aktuelle Position unterhalb der Lüften-Position ist&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_WindowRec || || ||Name des Fensterkontaktes an welchen Fenster der Rolladen angebracht ist&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_WindowRec_subType || || ||Typ des verwendeten Fensterkontakts: twostate (optisch oder magnetisch) oder threestate (Drehgriffkontakt)&lt;br /&gt;
|- &lt;br /&gt;
|AutoShuttersControl_lock-out ||soft, hard  || ||stellt entsprechend den Aussperrschutz ein. Bei global aktiven Aussperrschutz (set ASC-Device lockOut soft) und einem Fensterkontakt open bleibt dann der Rolladen oben. Dies gilt nur bei Steuerbefehle über das ASC Modul. Stellt man global auf hard, wird bei entsprechender Möglichkeit versucht den Rolladen Hardwareseitig zu blockieren. Dann ist auch ein fahren über die Taster nicht mehr möglich.&lt;br /&gt;
|- &lt;br /&gt;
|AutoShuttersControl_lock-outCmd ||inhibit, blocked  || ||set Befehl für das Rolladen-Device zum Hardware sperren. Zum gesetzt werden wenn man &amp;quot;AutoShuttersControl_lock-out&amp;quot; auf hard setzt&lt;br /&gt;
|-&lt;br /&gt;
| || || ||&lt;br /&gt;
|-  &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Hilfsmittel ==&lt;br /&gt;
tbd&lt;br /&gt;
&lt;br /&gt;
readingsGroup, um die diversen Level einzustellen: &lt;br /&gt;
&lt;br /&gt;
 define rg_ASC_Rollaeden_Level readingsGroup &amp;lt;Gerät&amp;gt;,&amp;lt;Closed_Pos&amp;gt;,&amp;lt;Open_Pos&amp;gt;,&amp;lt;Shading_Pos&amp;gt;,&amp;lt;Ventilate_Pos&amp;gt; (Rolladen_.*|Jalousie_.*)..:?AutoShuttersControl_Closed_Pos,?AutoShuttersControl_Open_Pos,?AutoShuttersControl_Shading_Pos,?AutoShuttesControl_Ventilate_Pos&lt;br /&gt;
 attr rg_ASC_Rollaeden_Level commands { AutoShuttersControl_Closed_Pos =&amp;gt; &#039;AutoShuttersControl_Closed_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100&#039;,\&lt;br /&gt;
 AutoShuttersControl_Open_Pos =&amp;gt; &#039;AutoShuttersControl_Open_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100&#039;,\&lt;br /&gt;
 AutoShuttersControl_Shading_Pos =&amp;gt; &#039;AutoShuttersControl_Shading_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100&#039;,\&lt;br /&gt;
 AutoShuttersControl_Ventilate_Pos =&amp;gt; &#039;AutoShuttersControl_Ventilate_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100&#039;}&lt;br /&gt;
[[Datei:ReadingsGroup ASC Level.png|600px|]]&lt;br /&gt;
readingsGroup, um die diversen Zeiten einzustellen:&lt;br /&gt;
&lt;br /&gt;
 define rg_ASC_Rollaeden_Times readingsGroup &amp;lt;Gerät&amp;gt;,&amp;lt;Stand&amp;gt;,&amp;lt;Time_Up_Early&amp;gt;,&amp;lt;Time_Up_WE&amp;gt;,&amp;lt;Time_Up_Late&amp;gt;,&amp;lt;Time_Down_Early&amp;gt;,Time_Down_Late&amp;gt;,&amp;lt;Mode_Down&amp;gt;,&amp;lt;Mode_Up&amp;gt; (Rolladen_.*|Jalousie_.*)..:level,?AutoShuttersControl_Time_Up_Early,?AutoShuttersControl_Time_Up_WE_Holiday,?AutoShuttersControl_Time_Up_Late,?AutoShuttersControl_Time_Down_Early,?AutoShuttersControl_Time_Down_Late,?AutoShuttersControl_Mode_Down,?AutoShuttersControl_Mode_Up&lt;br /&gt;
 attr rg_ASC_Rollaeden_Times commands {level =&amp;gt; &#039;pct:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100&#039;, \&lt;br /&gt;
 AutoShuttersControl_Mode_Down =&amp;gt; &#039;AutoShuttersControl_Mode_Down:always,absent,off&#039;,\&lt;br /&gt;
 AutoShuttersControl_Mode_Up =&amp;gt; &#039;AutoShuttersControl_Mode_Up:always,absent,off&#039;,\&lt;br /&gt;
 AutoShuttersControl_Time_Down_Early =&amp;gt; &#039;AutoShuttersControl_Time_Down_Early:15:00,15:15,15:30,15:45,16:00,16:15,16:30,16:45,17:00,17:15,17:30,17:45,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00&#039;, \&lt;br /&gt;
 AutoShuttersControl_Time_Down_Late  =&amp;gt; &#039;AutoShuttersControl_Time_Down_Late:20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:15,23:30&#039;,\&lt;br /&gt;
 AutoShuttersControl_Time_Up_Early =&amp;gt; &#039;AutoShuttersControl_Time_Up_Early:05:00,05:05,05:30,05:45,06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00&#039;, \&lt;br /&gt;
 AutoShuttersControl_Time_Up_Late =&amp;gt;&#039;AutoShuttersControl_Time_Up_Late:06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00&#039;,AutoShuttersControl_Time_Up_WE_Holiday =&amp;gt; &#039;AutoShuttersControl_Time_Up_WE_Holiday:06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00&#039;}&lt;br /&gt;
[[Datei:ReadingsGroup ASC Times.png|600px|]]&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* {{Link2Forum|Topic=90751|LinkText=&amp;quot;Thread zur Entwicklung im Forum&amp;quot;}} &lt;br /&gt;
* {{Link2Forum|Topic=73964|LinkText=&amp;quot;Thread zu den Scripten von user cluni&amp;quot;}}, die der Entwicklung des Moduls zugrunde liegen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Codeschnipsel]]&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=AutoShuttersControl&amp;diff=27901</id>
		<title>AutoShuttersControl</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=AutoShuttersControl&amp;diff=27901"/>
		<updated>2018-09-18T09:08:05Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: /* Set Befehle für AutoShuttersControl Device */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuerung von Rollläden&lt;br /&gt;
|ModCategory=Automatisierung&lt;br /&gt;
|ModType=x&lt;br /&gt;
&amp;lt;!-- |ModCmdRef= ---- noch nicht Teil von FHEM --&amp;gt;&lt;br /&gt;
|ModForumArea=Automatisierung&lt;br /&gt;
|ModTechName=73_AutoShuttersControl.pm&lt;br /&gt;
|ModOwner=CoolTux}}&lt;br /&gt;
Mit [[AutoShuttersControl]] oder kurz ASC können typische Aufgabenstellungen im Zusammenhang mit Rollläden u.ä. automatisiert werden, wie zum Beispiel das Öffnen bei Sonnenaufgang, Schließen bei Sonnenuntergang oder das Anfahren von Lüftungspositionen beim Öffnen des zugehörigen Fensters. &lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Das Modul befindet sich derzeit noch in der Entwicklung; der jeweils aktuelle Stand ist  diesem {{Link2Forum|Topic=90751|LinkText=&amp;quot;Thread im Forum&amp;quot;}} zu entnehmen.}}&lt;br /&gt;
&lt;br /&gt;
== Basics ==&lt;br /&gt;
Zur Nutzung des Moduls sollten folgende andere FHEM-Devices vorhanden sein:&lt;br /&gt;
* Rollläden&lt;br /&gt;
* Fensterkontakte und &lt;br /&gt;
* Bewohnerstatus auf Basis von Residents/Roomates in englisch. Ersatzweise andere Devices, z.B. Dummys, welche als &#039;&#039;state&#039;&#039; &#039;&#039;home&#039;&#039;, &#039;&#039;asleep&#039;&#039;, &#039;&#039;gotosleep&#039;&#039; und &#039;&#039;awoken&#039;&#039; setzen sowie ein Reading &#039;&#039;lastState&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die Einrichtung des Moduls bzw. dessen Funktionalität erfolgt in mehreren Schritten:&lt;br /&gt;
* Definition des ASC-Devices&lt;br /&gt;
* Einstellung zentraler Vorgaben am ASC-Device&lt;br /&gt;
* Markieren der zukünftig zu steuernden Rollladen-Devices&lt;br /&gt;
* Einbinden der Rollladen-Devices in das ASC-Device&lt;br /&gt;
* Einstellen der individuellen Vorgaben je Rollladen (am Rollladen-Device)&lt;br /&gt;
&lt;br /&gt;
== Einrichtung ==&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitung ===&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Ihr benötigt ein aktuelles FHEM. Update ab dem 04.09.2018 Voraussetzung!}}&lt;br /&gt;
&lt;br /&gt;
Zunächst muß das Modul aus dem Link im Forum entpackt werden und die Datei 73_AutoShuttersControl.pm in das Unterverzeichnis für die Module kopiert werden und die Rechte angepaßt.&lt;br /&gt;
&lt;br /&gt;
Speicherort für Linux-Standardinstallationen: /opt/fhem/FHEM&lt;br /&gt;
Rechte: &amp;lt;code&amp;gt;sudo chown 73_AutoShuttersControl.pm&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;sudo chmod 644 73_AutoShuttersControl.pm&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach sollte ein &amp;lt;code&amp;gt;reload AutoShuttersControl&amp;lt;/code&amp;gt; in FHEM-Eingabefeld ausreichen, um das Modul verfügbar zu machen.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Eventuell muß FHEM auch einmalig neu gestartet werden, um das Modul nutzen zu können.}}&lt;br /&gt;
&lt;br /&gt;
=== Define des ASC-Devices ===&lt;br /&gt;
Es genügt ein einfaches define ohne weitere Parameter.&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; AutoShuttersControl&amp;lt;/code&amp;gt;&lt;br /&gt;
Dies bewirkt neben der Anlage des Devices selbst auch, dass als weiteres globales Attribut &#039;&#039;AutoShuttersControl&#039;&#039; verfügbar wird.&lt;br /&gt;
&lt;br /&gt;
=== Einstellung zentraler Vorgaben ===&lt;br /&gt;
Es stehen am ASC-Device einige Attribute zur Verfügung, über die sich das Verhalten des ASC-Devices insgesamt steuern läßt, z.B. zur Vermeidung von morgendlichen oder abendlichen Fahrten sowie bei Gefahr von Schäden an den Rollläden durch Frost oder zur Reaktion auf Fensterkontakte. Details sind der Commandref zu entnehmen.&lt;br /&gt;
Diese können auch nachträglich noch geändert werden.&lt;br /&gt;
&lt;br /&gt;
=== Markieren zu steuernder Rollladen-Devices ===&lt;br /&gt;
Um einen oder mehrere Rollläden durch das ASC-Device zu steuern, wird für jeden Rollladen jeweils das neue globale Attribut &#039;&#039;AutoShuttersControl&#039;&#039; gesetzt. Der Wert ist mit 1 oder 2 festzulegen, wobei &#039;&#039;&#039;1&#039;&#039;&#039; bedeutet, dass &lt;br /&gt;
* die Offen-Position kleiner ist als die Geschlossen-Position, also typischerweise 0 &#039;&#039;offen&#039;&#039; bedeutet und 100 für &#039;&#039;geschlossen&#039;&#039; steht&lt;br /&gt;
* eine bestimmte Position mit &#039;&#039;&#039;position&#039;&#039;&#039; angefahren wird, also z.B. &amp;lt;code&amp;gt;set &amp;lt;name&amp;gt; position 70&amp;lt;/code&amp;gt;.&lt;br /&gt;
Dies ist z.B. die  passende Wahl für ROLLO-Devices&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;&#039;2&#039;&#039;&#039; steht für ein umgekehrtes Verhalten und den Befehlsteil &#039;&#039;pct&#039;&#039;, also &#039;&#039;offen&#039;&#039; für &amp;lt;code&amp;gt;set &amp;lt;name&amp;gt; pct 100&amp;lt;/code&amp;gt;. Typischer Vertreter dieses Typs sind HomeMatic (CUL_HM-) Geräte.&lt;br /&gt;
&lt;br /&gt;
=== Einbinden in das ASC-Device ===&lt;br /&gt;
Nachdem man das obige Attribut bei einem oder mehreren Rollladen-Devices gesetzt hat, kann mit &lt;br /&gt;
&amp;lt;code&amp;gt;set &amp;lt;name&amp;gt; scanForShutters&amp;lt;/code&amp;gt; ein Suchlauf gestartet werden, mit dem dann diese Rollläden durch das Modul gefunden und in die Steuerungslogik eingebunden werden.&lt;br /&gt;
&lt;br /&gt;
=== Einstellen der individuellen Vorgaben ===&lt;br /&gt;
Danach sind jeweils an den Rollladen-Devices weitere Attribute verfügbar, mit denen die für den jeweiligen Rollladen geltenden Einstellungen vorgenommen werden können. &lt;br /&gt;
Die Beschreibung der Attribute ist in der commandref enthalten.&lt;br /&gt;
&lt;br /&gt;
== Readings ==&lt;br /&gt;
&lt;br /&gt;
===Readings im AutoShuttersControl Device selbst.===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Datentyp/&amp;lt;BR/&amp;gt;Wertebereich !! Bedeutung  &lt;br /&gt;
|-&lt;br /&gt;
|..._nextAstroTimeEvent || ||Uhrzeit des nächsten Astro Events, Sonnenauf, Sonnenuntergang oder feste Zeit pro Rollonamen &lt;br /&gt;
|-&lt;br /&gt;
|..._lastPosValue || ||letzter abgesetzter Fahrbefehl pro Rollonamen&lt;br /&gt;
|-&lt;br /&gt;
|..._lastDelayPosValue || ||letzter abgesetzter Fahrbefehl welcher beim nächsten zulässigen Event ausgeführt wird.&lt;br /&gt;
|-&lt;br /&gt;
|partyMode ||on, off || aktiviert den globalen Partymodus, alle Rollläden welche das Attribut AutoShuttersControl_Partymode bei sich auf on gestellt haben werden nicht mehr gesteuert. Der letzte Schaltbefehle welcher durch ein Fensterevent oder Bewohnerstatus an die Rollläden gesendet wurde, wird beim off setzen durch set ASC-Device partyMode off ausgeführt&lt;br /&gt;
|-&lt;br /&gt;
|lockOut || on, off ||für das aktivieren des Aussperrschutzes gemäß dem entsprechenden Attribut AutoShuttersControl_lock-out im jeweiligen Rolladen. (siehe Beschreibung bei den Attributen für die Rolladendevices)&lt;br /&gt;
|-&lt;br /&gt;
|room_... || ||Auflistung aller Rollläden welche in den jeweiligen Rämen gefunden wurde, Bsp.: room_Schlafzimmer,Terrasse&lt;br /&gt;
|-&lt;br /&gt;
|state || ||Status des Devices active, enabled, disabled&lt;br /&gt;
|-&lt;br /&gt;
|sunriseTimeWeHoliday|| on,off ||aktiviert/deaktiviert die Beachtung des Rolladen Device Attributes AutoShuttersControl_Time_Up_WE_Holiday&lt;br /&gt;
|-&lt;br /&gt;
|userAttrList || rolled out ||Status der UserAttribute welche an die Rollläden gesendet werden&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Readings in den Rolllädendevices===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Bedeutung  &lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Time_Sunrise ||Sonnenaufgangszei für das Rollo&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Time_Sunset ||Sonnenuntergangszeit für das Rollo&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Settings ==&lt;br /&gt;
&lt;br /&gt;
===Set Befehle für AutoShuttersControl Device===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Datentyp/&amp;lt;BR/&amp;gt;Wertebereich !! Beschreibung  &lt;br /&gt;
|-&lt;br /&gt;
|partyMode ||on, off ||aktiviert den globalen Partymodus. Siehe Reading partyMode&lt;br /&gt;
|-&lt;br /&gt;
|lockOut ||on, off ||aktiviert den globalen Aussperrschutz. Siehe Reading partyMode&lt;br /&gt;
|-&lt;br /&gt;
|renewSetSunriseSunsetTimer || || erneuert bei allen Rollläden die Zeiten für Sunset und Sunrise und setzt die internen Timer neu.&lt;br /&gt;
|-&lt;br /&gt;
|scanForShutters || ||sucht alle FHEM Devices mit dem Attribut &amp;quot;AutoShuttersControl&amp;quot; 1/2&lt;br /&gt;
|-&lt;br /&gt;
|sunriseTimeWeHoliday || on,off ||aktiviert/deaktiviert die Beachtung des Rolladen Device Attributes AutoShuttersControl_Time_Up_WE_Holiday&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Attribute ==&lt;br /&gt;
&lt;br /&gt;
===Attribute im AutoShuttersControl Device selbst.===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Datentyp/&amp;lt;BR/&amp;gt;Wertebereich !! Default-Wert !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_antifreezeTemp || || ||Temperatur ab welcher der Frostschutz greifen soll und das Rollo nicht mehr fährt. Der letzte Fahrbefehl wird gespeichert.&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_autoAstroModeEvening ||aktuell REAL, CIVIL, NAUTIC, ASTRONOMIC || || (in genau dieser Schreibweise)&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_autoAstroModeEveningHorizon || || || Höhe über Horizont wenn beim Attribut AutoShuttersControl_autoAstroModeEvening HORIZON ausgewählt&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_autoAstroModeMorning ||aktuell REAL, CIVIL, NAUTIC, ASTRONOMIC || ||(in genau dieser Schreibweise)&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_autoAstroModeMorningHorizon || || ||Höhe über Horizont wenn beim Attribut AutoShuttersControl_autoAstroModeMorning HORIZON ausgewählt&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_autoShuttersControlComfort ||on, off || ||schaltet die Komfortfunktion an. Bedeutet das ein Rollladen mit einem threestate Sensor am Fenster beim öffnen in eine weit offen Position fährt. Die Offenposition wird beim Rollladen über das Attribut AutoShuttersControl_Pos_after_ComfortOpen eingestellt.&lt;br /&gt;
|- &lt;br /&gt;
|AutoShuttersControl_autoShuttersControlEvening ||on, off || ||ob Abends die Rollläden automatisch nach Zeit gesteuert werden sollen&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_autoShuttersControlMorning ||on, off || ||ob Morgens die Rollläden automatisch nach Zeit gesteuert werden sollen&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_temperatureReading || || ||Reading für die Aussentemperatur&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_temperatureSensor || || ||Device für die Aussentemperatur&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_timeUpHolidayDevice || || ||Device zur Urlaubserkennung oder Sonstiges / muss 0 oder 1 im Reading state beinhalten.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Attribute in den Rolllädendevices===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Datentyp/&amp;lt;BR/&amp;gt;Wertebereich !! Default-Wert !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl || 0, 1, 2 || ||1 = &amp;quot;Inverse oder Rollo Bsp.: Rollo Oben 0, Rollo Unten 100 und der Befehl zum Prozentualen fahren ist position&amp;quot;,&amp;lt;BR/&amp;gt; 2 = &amp;quot;Homematic Style Bsp.: Rollo Oben 100, Rollo Unten 0 und der Befehl zum Prozentualen fahren ist pct&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Antifreeze ||on, off || ||Frostschutz an oder aus&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_AutoAstroModeEvening ||aktuell REAL, CIVIL, NAUTIC, ASTRONOMIC || ||&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_AutoAstroModeEveningHorizon || || ||Höhe über Horizont wenn beim Attribut AutoShuttersControl_autoAstroModeEvening HORIZON ausgewählt&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_AutoAstroModeMorning ||aktuell REAL, CIVIL, NAUTIC, ASTRONOMIC || ||&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_AutoAstroModeMorningHorizon || || ||Höhe über Horizont wenn beim Attribut AutoShuttersControl_autoAstroModeMorning HORIZON ausgewählt&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Closed_Pos || || ||in 10 Schritten von 0 bis 100, default Vorgabe ist abhängig vom Attribut AutoShuttersControl&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Down ||astro, time || ||bei Astro wird Sonnenuntergang berechnet, bei time wird der Wert aus AutoShuttersControl_Time_Down_Early als Fahrzeit verwendet&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Mode_Down ||always, absent, off || ||wann darf die Automatik steuern. immer, niemals, bei abwesenheit des Roomate (ist kein Roommate und absent eingestellt wird gar nicht gesteuert)&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Mode_Up ||always, absent, off || ||wann darf die Automatik steuern. immer, niemals, bei abwesenheit des Roomate (ist kein Roommate und absent eingestellt wird gar nicht gesteuert)&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Offset_Minutes_Evening  || || ||maximale zufällige Verzögerung in Minuten (minimal 1) bei der Berechnung der Fahrzeiten für Abends&lt;br /&gt;
|-  &lt;br /&gt;
|AutoShuttersControl_Offset_Minutes_Morning || || ||maximale zufällige Verzögerung in Minuten (minimal 1) bei der Berechnung der Fahrzeiten für Morgens&lt;br /&gt;
|-  &lt;br /&gt;
|AutoShuttersControl_Open_Pos || || ||in 10 Schritten von 0 bis 100, default Vorgabe ist abhängig vom Attribut AutoShuttersControl&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Partymode ||on, off || ||schaltet den Partymodus an oder aus, Wird dann am ASC Device set ASC-DEVICE partyMode on geschalten, werden alle Fahrbefehle an den Rollläden welche das Attribut auf on haben zwischen gespeichert und später erst ausgeführt&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Pos_Cmd || ||  ||der set Befehl um den Rollladen in Prozent Angaben zu fahren, muss der selbe sein wie das Reading welches die Position des Rollladen in Prozent an gibt&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Pos_after_ComfortOpen || || ||in 10 Schritten von 0 bis 100, default Vorgabe ist abhängig vom Attribut AutoShuttersControl&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Roommate_Reading || || ||das Reading zum Roommate Device welches den Status wieder gibt&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Roommate_Device || || ||Name des Roommate Devices welcher den Bewohner des Raumes vom Rollladen wieder gibt&lt;br /&gt;
|-                                &lt;br /&gt;
|AutoShuttersControl_Time_Down_Early || || ||Sunset frühste Zeit zum runter fahren&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Time_Down_Late || || ||Sunset späteste Zeit zum runter fahren &lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Time_Up_Early || || ||Sunrise frühste Zeit zum hoch fahren&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Time_Up_Late || || ||Sunrise späteste Zeit zum hoch fahren&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Time_Up_WE_Holiday  || || ||Sunrise frühste Zeit zum hochfahren am Wochenende und/oder Urlaub (we2holiday wird beachtet), Achtung sollte nicht größer sein wie AutoShuttersControl_Time_Up_Late sonst wird AutoShuttersControl_Time_Up_Late verwendet&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Up ||astro, time || ||bei Astro wird Sonnenaufgang berechnet, bei time wird der Wert aus AutoShuttersControl_Time_Up_Early als Fahrzeit verwendet&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Ventilate_Pos || || ||in 10 Schritten von 0 bis 100, default Vorgabe ist abhängig vom Attribut AutoShuttersControl&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Ventilate_Window_Open || || ||auf lüften, wenn das Fenster gekippt/geöffnet wird und aktuelle Position unterhalb der Lüften-Position ist&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_WindowRec || || ||Name des Fensterkontaktes an welchen Fenster der Rolladen angebracht ist&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_WindowRec_subType || || ||Typ des verwendeten Fensterkontakts: twostate (optisch oder magnetisch) oder threestate (Drehgriffkontakt)&lt;br /&gt;
|- &lt;br /&gt;
|AutoShuttersControl_lock-out ||soft, hard  || ||stellt entsprechend den Aussperrschutz ein. Bei global aktiven Aussperrschutz (set ASC-Device lockOut soft) und einem Fensterkontakt open bleibt dann der Rolladen oben. Dies gilt nur bei Steuerbefehle über das ASC Modul. Stellt man global auf hard, wird bei entsprechender Möglichkeit versucht den Rolladen Hardwareseitig zu blockieren. Dann ist auch ein fahren über die Taster nicht mehr möglich.&lt;br /&gt;
|- &lt;br /&gt;
|AutoShuttersControl_lock-outCmd ||inhibit, blocked  || ||set Befehl für das Rolladen-Device zum Hardware sperren. Zum gesetzt werden wenn man &amp;quot;AutoShuttersControl_lock-out&amp;quot; auf hard setzt&lt;br /&gt;
|-&lt;br /&gt;
| || || ||&lt;br /&gt;
|-  &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Hilfsmittel ==&lt;br /&gt;
tbd&lt;br /&gt;
&lt;br /&gt;
readingsGroup, um die diversen Level einzustellen: &lt;br /&gt;
&lt;br /&gt;
 define rg_ASC_Rollaeden_Level readingsGroup &amp;lt;Gerät&amp;gt;,&amp;lt;Closed_Pos&amp;gt;,&amp;lt;Open_Pos&amp;gt;,&amp;lt;Shading_Pos&amp;gt;,&amp;lt;Ventilate_Pos&amp;gt; (Rolladen_.*|Jalousie_.*)..:?AutoShuttersControl_Closed_Pos,?AutoShuttersControl_Open_Pos,?AutoShuttersControl_Shading_Pos,?AutoShuttesControl_Ventilate_Pos&lt;br /&gt;
 attr rg_ASC_Rollaeden_Level commands { AutoShuttersControl_Closed_Pos =&amp;gt; &#039;AutoShuttersControl_Closed_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100&#039;,\&lt;br /&gt;
 AutoShuttersControl_Open_Pos =&amp;gt; &#039;AutoShuttersControl_Open_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100&#039;,\&lt;br /&gt;
 AutoShuttersControl_Shading_Pos =&amp;gt; &#039;AutoShuttersControl_Shading_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100&#039;,\&lt;br /&gt;
 AutoShuttersControl_Ventilate_Pos =&amp;gt; &#039;AutoShuttersControl_Ventilate_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100&#039;}&lt;br /&gt;
[[Datei:ReadingsGroup ASC Level.png|600px|]]&lt;br /&gt;
readingsGroup, um die diversen Zeiten einzustellen:&lt;br /&gt;
&lt;br /&gt;
 define rg_ASC_Rollaeden_Times readingsGroup &amp;lt;Gerät&amp;gt;,&amp;lt;Stand&amp;gt;,&amp;lt;Time_Up_Early&amp;gt;,&amp;lt;Time_Up_WE&amp;gt;,&amp;lt;Time_Up_Late&amp;gt;,&amp;lt;Time_Down_Early&amp;gt;,Time_Down_Late&amp;gt;,&amp;lt;Mode_Down&amp;gt;,&amp;lt;Mode_Up&amp;gt; (Rolladen_.*|Jalousie_.*)..:level,?AutoShuttersControl_Time_Up_Early,?AutoShuttersControl_Time_Up_WE_Holiday,?AutoShuttersControl_Time_Up_Late,?AutoShuttersControl_Time_Down_Early,?AutoShuttersControl_Time_Down_Late,?AutoShuttersControl_Mode_Down,?AutoShuttersControl_Mode_Up&lt;br /&gt;
 attr rg_ASC_Rollaeden_Times commands {level =&amp;gt; &#039;pct:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100&#039;, \&lt;br /&gt;
 AutoShuttersControl_Mode_Down =&amp;gt; &#039;AutoShuttersControl_Mode_Down:always,absent,off&#039;,\&lt;br /&gt;
 AutoShuttersControl_Mode_Up =&amp;gt; &#039;AutoShuttersControl_Mode_Up:always,absent,off&#039;,\&lt;br /&gt;
 AutoShuttersControl_Time_Down_Early =&amp;gt; &#039;AutoShuttersControl_Time_Down_Early:15:00,15:15,15:30,15:45,16:00,16:15,16:30,16:45,17:00,17:15,17:30,17:45,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00&#039;, \&lt;br /&gt;
 AutoShuttersControl_Time_Down_Late  =&amp;gt; &#039;AutoShuttersControl_Time_Down_Late:20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:15,23:30&#039;,\&lt;br /&gt;
 AutoShuttersControl_Time_Up_Early =&amp;gt; &#039;AutoShuttersControl_Time_Up_Early:05:00,05:05,05:30,05:45,06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00&#039;, \&lt;br /&gt;
 AutoShuttersControl_Time_Up_Late =&amp;gt;&#039;AutoShuttersControl_Time_Up_Late:06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00&#039;,AutoShuttersControl_Time_Up_WE_Holiday =&amp;gt; &#039;AutoShuttersControl_Time_Up_WE_Holiday:06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00&#039;}&lt;br /&gt;
[[Datei:ReadingsGroup ASC Times.png|600px|]]&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* {{Link2Forum|Topic=90751|LinkText=&amp;quot;Thread zur Entwicklung im Forum&amp;quot;}} &lt;br /&gt;
* {{Link2Forum|Topic=73964|LinkText=&amp;quot;Thread zu den Scripten von user cluni&amp;quot;}}, die der Entwicklung des Moduls zugrunde liegen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Codeschnipsel]]&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=AutoShuttersControl&amp;diff=27900</id>
		<title>AutoShuttersControl</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=AutoShuttersControl&amp;diff=27900"/>
		<updated>2018-09-18T09:07:16Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: /* Readings im AutoShuttersControl Device selbst. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuerung von Rollläden&lt;br /&gt;
|ModCategory=Automatisierung&lt;br /&gt;
|ModType=x&lt;br /&gt;
&amp;lt;!-- |ModCmdRef= ---- noch nicht Teil von FHEM --&amp;gt;&lt;br /&gt;
|ModForumArea=Automatisierung&lt;br /&gt;
|ModTechName=73_AutoShuttersControl.pm&lt;br /&gt;
|ModOwner=CoolTux}}&lt;br /&gt;
Mit [[AutoShuttersControl]] oder kurz ASC können typische Aufgabenstellungen im Zusammenhang mit Rollläden u.ä. automatisiert werden, wie zum Beispiel das Öffnen bei Sonnenaufgang, Schließen bei Sonnenuntergang oder das Anfahren von Lüftungspositionen beim Öffnen des zugehörigen Fensters. &lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Das Modul befindet sich derzeit noch in der Entwicklung; der jeweils aktuelle Stand ist  diesem {{Link2Forum|Topic=90751|LinkText=&amp;quot;Thread im Forum&amp;quot;}} zu entnehmen.}}&lt;br /&gt;
&lt;br /&gt;
== Basics ==&lt;br /&gt;
Zur Nutzung des Moduls sollten folgende andere FHEM-Devices vorhanden sein:&lt;br /&gt;
* Rollläden&lt;br /&gt;
* Fensterkontakte und &lt;br /&gt;
* Bewohnerstatus auf Basis von Residents/Roomates in englisch. Ersatzweise andere Devices, z.B. Dummys, welche als &#039;&#039;state&#039;&#039; &#039;&#039;home&#039;&#039;, &#039;&#039;asleep&#039;&#039;, &#039;&#039;gotosleep&#039;&#039; und &#039;&#039;awoken&#039;&#039; setzen sowie ein Reading &#039;&#039;lastState&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die Einrichtung des Moduls bzw. dessen Funktionalität erfolgt in mehreren Schritten:&lt;br /&gt;
* Definition des ASC-Devices&lt;br /&gt;
* Einstellung zentraler Vorgaben am ASC-Device&lt;br /&gt;
* Markieren der zukünftig zu steuernden Rollladen-Devices&lt;br /&gt;
* Einbinden der Rollladen-Devices in das ASC-Device&lt;br /&gt;
* Einstellen der individuellen Vorgaben je Rollladen (am Rollladen-Device)&lt;br /&gt;
&lt;br /&gt;
== Einrichtung ==&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitung ===&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Ihr benötigt ein aktuelles FHEM. Update ab dem 04.09.2018 Voraussetzung!}}&lt;br /&gt;
&lt;br /&gt;
Zunächst muß das Modul aus dem Link im Forum entpackt werden und die Datei 73_AutoShuttersControl.pm in das Unterverzeichnis für die Module kopiert werden und die Rechte angepaßt.&lt;br /&gt;
&lt;br /&gt;
Speicherort für Linux-Standardinstallationen: /opt/fhem/FHEM&lt;br /&gt;
Rechte: &amp;lt;code&amp;gt;sudo chown 73_AutoShuttersControl.pm&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;sudo chmod 644 73_AutoShuttersControl.pm&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach sollte ein &amp;lt;code&amp;gt;reload AutoShuttersControl&amp;lt;/code&amp;gt; in FHEM-Eingabefeld ausreichen, um das Modul verfügbar zu machen.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Eventuell muß FHEM auch einmalig neu gestartet werden, um das Modul nutzen zu können.}}&lt;br /&gt;
&lt;br /&gt;
=== Define des ASC-Devices ===&lt;br /&gt;
Es genügt ein einfaches define ohne weitere Parameter.&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; AutoShuttersControl&amp;lt;/code&amp;gt;&lt;br /&gt;
Dies bewirkt neben der Anlage des Devices selbst auch, dass als weiteres globales Attribut &#039;&#039;AutoShuttersControl&#039;&#039; verfügbar wird.&lt;br /&gt;
&lt;br /&gt;
=== Einstellung zentraler Vorgaben ===&lt;br /&gt;
Es stehen am ASC-Device einige Attribute zur Verfügung, über die sich das Verhalten des ASC-Devices insgesamt steuern läßt, z.B. zur Vermeidung von morgendlichen oder abendlichen Fahrten sowie bei Gefahr von Schäden an den Rollläden durch Frost oder zur Reaktion auf Fensterkontakte. Details sind der Commandref zu entnehmen.&lt;br /&gt;
Diese können auch nachträglich noch geändert werden.&lt;br /&gt;
&lt;br /&gt;
=== Markieren zu steuernder Rollladen-Devices ===&lt;br /&gt;
Um einen oder mehrere Rollläden durch das ASC-Device zu steuern, wird für jeden Rollladen jeweils das neue globale Attribut &#039;&#039;AutoShuttersControl&#039;&#039; gesetzt. Der Wert ist mit 1 oder 2 festzulegen, wobei &#039;&#039;&#039;1&#039;&#039;&#039; bedeutet, dass &lt;br /&gt;
* die Offen-Position kleiner ist als die Geschlossen-Position, also typischerweise 0 &#039;&#039;offen&#039;&#039; bedeutet und 100 für &#039;&#039;geschlossen&#039;&#039; steht&lt;br /&gt;
* eine bestimmte Position mit &#039;&#039;&#039;position&#039;&#039;&#039; angefahren wird, also z.B. &amp;lt;code&amp;gt;set &amp;lt;name&amp;gt; position 70&amp;lt;/code&amp;gt;.&lt;br /&gt;
Dies ist z.B. die  passende Wahl für ROLLO-Devices&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;&#039;2&#039;&#039;&#039; steht für ein umgekehrtes Verhalten und den Befehlsteil &#039;&#039;pct&#039;&#039;, also &#039;&#039;offen&#039;&#039; für &amp;lt;code&amp;gt;set &amp;lt;name&amp;gt; pct 100&amp;lt;/code&amp;gt;. Typischer Vertreter dieses Typs sind HomeMatic (CUL_HM-) Geräte.&lt;br /&gt;
&lt;br /&gt;
=== Einbinden in das ASC-Device ===&lt;br /&gt;
Nachdem man das obige Attribut bei einem oder mehreren Rollladen-Devices gesetzt hat, kann mit &lt;br /&gt;
&amp;lt;code&amp;gt;set &amp;lt;name&amp;gt; scanForShutters&amp;lt;/code&amp;gt; ein Suchlauf gestartet werden, mit dem dann diese Rollläden durch das Modul gefunden und in die Steuerungslogik eingebunden werden.&lt;br /&gt;
&lt;br /&gt;
=== Einstellen der individuellen Vorgaben ===&lt;br /&gt;
Danach sind jeweils an den Rollladen-Devices weitere Attribute verfügbar, mit denen die für den jeweiligen Rollladen geltenden Einstellungen vorgenommen werden können. &lt;br /&gt;
Die Beschreibung der Attribute ist in der commandref enthalten.&lt;br /&gt;
&lt;br /&gt;
== Readings ==&lt;br /&gt;
&lt;br /&gt;
===Readings im AutoShuttersControl Device selbst.===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Datentyp/&amp;lt;BR/&amp;gt;Wertebereich !! Bedeutung  &lt;br /&gt;
|-&lt;br /&gt;
|..._nextAstroTimeEvent || ||Uhrzeit des nächsten Astro Events, Sonnenauf, Sonnenuntergang oder feste Zeit pro Rollonamen &lt;br /&gt;
|-&lt;br /&gt;
|..._lastPosValue || ||letzter abgesetzter Fahrbefehl pro Rollonamen&lt;br /&gt;
|-&lt;br /&gt;
|..._lastDelayPosValue || ||letzter abgesetzter Fahrbefehl welcher beim nächsten zulässigen Event ausgeführt wird.&lt;br /&gt;
|-&lt;br /&gt;
|partyMode ||on, off || aktiviert den globalen Partymodus, alle Rollläden welche das Attribut AutoShuttersControl_Partymode bei sich auf on gestellt haben werden nicht mehr gesteuert. Der letzte Schaltbefehle welcher durch ein Fensterevent oder Bewohnerstatus an die Rollläden gesendet wurde, wird beim off setzen durch set ASC-Device partyMode off ausgeführt&lt;br /&gt;
|-&lt;br /&gt;
|lockOut || on, off ||für das aktivieren des Aussperrschutzes gemäß dem entsprechenden Attribut AutoShuttersControl_lock-out im jeweiligen Rolladen. (siehe Beschreibung bei den Attributen für die Rolladendevices)&lt;br /&gt;
|-&lt;br /&gt;
|room_... || ||Auflistung aller Rollläden welche in den jeweiligen Rämen gefunden wurde, Bsp.: room_Schlafzimmer,Terrasse&lt;br /&gt;
|-&lt;br /&gt;
|state || ||Status des Devices active, enabled, disabled&lt;br /&gt;
|-&lt;br /&gt;
|sunriseTimeWeHoliday|| on,off ||aktiviert/deaktiviert die Beachtung des Rolladen Device Attributes AutoShuttersControl_Time_Up_WE_Holiday&lt;br /&gt;
|-&lt;br /&gt;
|userAttrList || rolled out ||Status der UserAttribute welche an die Rollläden gesendet werden&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Readings in den Rolllädendevices===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Bedeutung  &lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Time_Sunrise ||Sonnenaufgangszei für das Rollo&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Time_Sunset ||Sonnenuntergangszeit für das Rollo&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Settings ==&lt;br /&gt;
&lt;br /&gt;
===Set Befehle für AutoShuttersControl Device===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Datentyp/&amp;lt;BR/&amp;gt;Wertebereich !! Beschreibung  &lt;br /&gt;
|-&lt;br /&gt;
|partyMode ||on, off ||aktiviert den globalen Partymodus. Siehe Reading partyMode&lt;br /&gt;
|-&lt;br /&gt;
|lockOut ||on, off ||aktiviert den globalen Aussperrschutz. Siehe Reading partyMode&lt;br /&gt;
|-&lt;br /&gt;
|renewSetSunriseSunsetTimer || || erneuert bei allen Rollläden die Zeiten für Sunset und Sunrise und setzt die internen Timer neu.&lt;br /&gt;
|-&lt;br /&gt;
|scanForShutters || ||sucht alle FHEM Devices mit dem Attribut &amp;quot;AutoShuttersControl&amp;quot; 1/2&lt;br /&gt;
|-&lt;br /&gt;
|sunriseTimeWeHoliday || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Attribute ==&lt;br /&gt;
&lt;br /&gt;
===Attribute im AutoShuttersControl Device selbst.===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Datentyp/&amp;lt;BR/&amp;gt;Wertebereich !! Default-Wert !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_antifreezeTemp || || ||Temperatur ab welcher der Frostschutz greifen soll und das Rollo nicht mehr fährt. Der letzte Fahrbefehl wird gespeichert.&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_autoAstroModeEvening ||aktuell REAL, CIVIL, NAUTIC, ASTRONOMIC || || (in genau dieser Schreibweise)&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_autoAstroModeEveningHorizon || || || Höhe über Horizont wenn beim Attribut AutoShuttersControl_autoAstroModeEvening HORIZON ausgewählt&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_autoAstroModeMorning ||aktuell REAL, CIVIL, NAUTIC, ASTRONOMIC || ||(in genau dieser Schreibweise)&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_autoAstroModeMorningHorizon || || ||Höhe über Horizont wenn beim Attribut AutoShuttersControl_autoAstroModeMorning HORIZON ausgewählt&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_autoShuttersControlComfort ||on, off || ||schaltet die Komfortfunktion an. Bedeutet das ein Rollladen mit einem threestate Sensor am Fenster beim öffnen in eine weit offen Position fährt. Die Offenposition wird beim Rollladen über das Attribut AutoShuttersControl_Pos_after_ComfortOpen eingestellt.&lt;br /&gt;
|- &lt;br /&gt;
|AutoShuttersControl_autoShuttersControlEvening ||on, off || ||ob Abends die Rollläden automatisch nach Zeit gesteuert werden sollen&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_autoShuttersControlMorning ||on, off || ||ob Morgens die Rollläden automatisch nach Zeit gesteuert werden sollen&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_temperatureReading || || ||Reading für die Aussentemperatur&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_temperatureSensor || || ||Device für die Aussentemperatur&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_timeUpHolidayDevice || || ||Device zur Urlaubserkennung oder Sonstiges / muss 0 oder 1 im Reading state beinhalten.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Attribute in den Rolllädendevices===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Datentyp/&amp;lt;BR/&amp;gt;Wertebereich !! Default-Wert !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl || 0, 1, 2 || ||1 = &amp;quot;Inverse oder Rollo Bsp.: Rollo Oben 0, Rollo Unten 100 und der Befehl zum Prozentualen fahren ist position&amp;quot;,&amp;lt;BR/&amp;gt; 2 = &amp;quot;Homematic Style Bsp.: Rollo Oben 100, Rollo Unten 0 und der Befehl zum Prozentualen fahren ist pct&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Antifreeze ||on, off || ||Frostschutz an oder aus&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_AutoAstroModeEvening ||aktuell REAL, CIVIL, NAUTIC, ASTRONOMIC || ||&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_AutoAstroModeEveningHorizon || || ||Höhe über Horizont wenn beim Attribut AutoShuttersControl_autoAstroModeEvening HORIZON ausgewählt&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_AutoAstroModeMorning ||aktuell REAL, CIVIL, NAUTIC, ASTRONOMIC || ||&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_AutoAstroModeMorningHorizon || || ||Höhe über Horizont wenn beim Attribut AutoShuttersControl_autoAstroModeMorning HORIZON ausgewählt&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Closed_Pos || || ||in 10 Schritten von 0 bis 100, default Vorgabe ist abhängig vom Attribut AutoShuttersControl&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Down ||astro, time || ||bei Astro wird Sonnenuntergang berechnet, bei time wird der Wert aus AutoShuttersControl_Time_Down_Early als Fahrzeit verwendet&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Mode_Down ||always, absent, off || ||wann darf die Automatik steuern. immer, niemals, bei abwesenheit des Roomate (ist kein Roommate und absent eingestellt wird gar nicht gesteuert)&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Mode_Up ||always, absent, off || ||wann darf die Automatik steuern. immer, niemals, bei abwesenheit des Roomate (ist kein Roommate und absent eingestellt wird gar nicht gesteuert)&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Offset_Minutes_Evening  || || ||maximale zufällige Verzögerung in Minuten (minimal 1) bei der Berechnung der Fahrzeiten für Abends&lt;br /&gt;
|-  &lt;br /&gt;
|AutoShuttersControl_Offset_Minutes_Morning || || ||maximale zufällige Verzögerung in Minuten (minimal 1) bei der Berechnung der Fahrzeiten für Morgens&lt;br /&gt;
|-  &lt;br /&gt;
|AutoShuttersControl_Open_Pos || || ||in 10 Schritten von 0 bis 100, default Vorgabe ist abhängig vom Attribut AutoShuttersControl&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Partymode ||on, off || ||schaltet den Partymodus an oder aus, Wird dann am ASC Device set ASC-DEVICE partyMode on geschalten, werden alle Fahrbefehle an den Rollläden welche das Attribut auf on haben zwischen gespeichert und später erst ausgeführt&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Pos_Cmd || ||  ||der set Befehl um den Rollladen in Prozent Angaben zu fahren, muss der selbe sein wie das Reading welches die Position des Rollladen in Prozent an gibt&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Pos_after_ComfortOpen || || ||in 10 Schritten von 0 bis 100, default Vorgabe ist abhängig vom Attribut AutoShuttersControl&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Roommate_Reading || || ||das Reading zum Roommate Device welches den Status wieder gibt&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Roommate_Device || || ||Name des Roommate Devices welcher den Bewohner des Raumes vom Rollladen wieder gibt&lt;br /&gt;
|-                                &lt;br /&gt;
|AutoShuttersControl_Time_Down_Early || || ||Sunset frühste Zeit zum runter fahren&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Time_Down_Late || || ||Sunset späteste Zeit zum runter fahren &lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Time_Up_Early || || ||Sunrise frühste Zeit zum hoch fahren&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Time_Up_Late || || ||Sunrise späteste Zeit zum hoch fahren&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Time_Up_WE_Holiday  || || ||Sunrise frühste Zeit zum hochfahren am Wochenende und/oder Urlaub (we2holiday wird beachtet), Achtung sollte nicht größer sein wie AutoShuttersControl_Time_Up_Late sonst wird AutoShuttersControl_Time_Up_Late verwendet&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Up ||astro, time || ||bei Astro wird Sonnenaufgang berechnet, bei time wird der Wert aus AutoShuttersControl_Time_Up_Early als Fahrzeit verwendet&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Ventilate_Pos || || ||in 10 Schritten von 0 bis 100, default Vorgabe ist abhängig vom Attribut AutoShuttersControl&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_Ventilate_Window_Open || || ||auf lüften, wenn das Fenster gekippt/geöffnet wird und aktuelle Position unterhalb der Lüften-Position ist&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_WindowRec || || ||Name des Fensterkontaktes an welchen Fenster der Rolladen angebracht ist&lt;br /&gt;
|-&lt;br /&gt;
|AutoShuttersControl_WindowRec_subType || || ||Typ des verwendeten Fensterkontakts: twostate (optisch oder magnetisch) oder threestate (Drehgriffkontakt)&lt;br /&gt;
|- &lt;br /&gt;
|AutoShuttersControl_lock-out ||soft, hard  || ||stellt entsprechend den Aussperrschutz ein. Bei global aktiven Aussperrschutz (set ASC-Device lockOut soft) und einem Fensterkontakt open bleibt dann der Rolladen oben. Dies gilt nur bei Steuerbefehle über das ASC Modul. Stellt man global auf hard, wird bei entsprechender Möglichkeit versucht den Rolladen Hardwareseitig zu blockieren. Dann ist auch ein fahren über die Taster nicht mehr möglich.&lt;br /&gt;
|- &lt;br /&gt;
|AutoShuttersControl_lock-outCmd ||inhibit, blocked  || ||set Befehl für das Rolladen-Device zum Hardware sperren. Zum gesetzt werden wenn man &amp;quot;AutoShuttersControl_lock-out&amp;quot; auf hard setzt&lt;br /&gt;
|-&lt;br /&gt;
| || || ||&lt;br /&gt;
|-  &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Hilfsmittel ==&lt;br /&gt;
tbd&lt;br /&gt;
&lt;br /&gt;
readingsGroup, um die diversen Level einzustellen: &lt;br /&gt;
&lt;br /&gt;
 define rg_ASC_Rollaeden_Level readingsGroup &amp;lt;Gerät&amp;gt;,&amp;lt;Closed_Pos&amp;gt;,&amp;lt;Open_Pos&amp;gt;,&amp;lt;Shading_Pos&amp;gt;,&amp;lt;Ventilate_Pos&amp;gt; (Rolladen_.*|Jalousie_.*)..:?AutoShuttersControl_Closed_Pos,?AutoShuttersControl_Open_Pos,?AutoShuttersControl_Shading_Pos,?AutoShuttesControl_Ventilate_Pos&lt;br /&gt;
 attr rg_ASC_Rollaeden_Level commands { AutoShuttersControl_Closed_Pos =&amp;gt; &#039;AutoShuttersControl_Closed_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100&#039;,\&lt;br /&gt;
 AutoShuttersControl_Open_Pos =&amp;gt; &#039;AutoShuttersControl_Open_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100&#039;,\&lt;br /&gt;
 AutoShuttersControl_Shading_Pos =&amp;gt; &#039;AutoShuttersControl_Shading_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100&#039;,\&lt;br /&gt;
 AutoShuttersControl_Ventilate_Pos =&amp;gt; &#039;AutoShuttersControl_Ventilate_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100&#039;}&lt;br /&gt;
[[Datei:ReadingsGroup ASC Level.png|600px|]]&lt;br /&gt;
readingsGroup, um die diversen Zeiten einzustellen:&lt;br /&gt;
&lt;br /&gt;
 define rg_ASC_Rollaeden_Times readingsGroup &amp;lt;Gerät&amp;gt;,&amp;lt;Stand&amp;gt;,&amp;lt;Time_Up_Early&amp;gt;,&amp;lt;Time_Up_WE&amp;gt;,&amp;lt;Time_Up_Late&amp;gt;,&amp;lt;Time_Down_Early&amp;gt;,Time_Down_Late&amp;gt;,&amp;lt;Mode_Down&amp;gt;,&amp;lt;Mode_Up&amp;gt; (Rolladen_.*|Jalousie_.*)..:level,?AutoShuttersControl_Time_Up_Early,?AutoShuttersControl_Time_Up_WE_Holiday,?AutoShuttersControl_Time_Up_Late,?AutoShuttersControl_Time_Down_Early,?AutoShuttersControl_Time_Down_Late,?AutoShuttersControl_Mode_Down,?AutoShuttersControl_Mode_Up&lt;br /&gt;
 attr rg_ASC_Rollaeden_Times commands {level =&amp;gt; &#039;pct:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100&#039;, \&lt;br /&gt;
 AutoShuttersControl_Mode_Down =&amp;gt; &#039;AutoShuttersControl_Mode_Down:always,absent,off&#039;,\&lt;br /&gt;
 AutoShuttersControl_Mode_Up =&amp;gt; &#039;AutoShuttersControl_Mode_Up:always,absent,off&#039;,\&lt;br /&gt;
 AutoShuttersControl_Time_Down_Early =&amp;gt; &#039;AutoShuttersControl_Time_Down_Early:15:00,15:15,15:30,15:45,16:00,16:15,16:30,16:45,17:00,17:15,17:30,17:45,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00&#039;, \&lt;br /&gt;
 AutoShuttersControl_Time_Down_Late  =&amp;gt; &#039;AutoShuttersControl_Time_Down_Late:20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:15,23:30&#039;,\&lt;br /&gt;
 AutoShuttersControl_Time_Up_Early =&amp;gt; &#039;AutoShuttersControl_Time_Up_Early:05:00,05:05,05:30,05:45,06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00&#039;, \&lt;br /&gt;
 AutoShuttersControl_Time_Up_Late =&amp;gt;&#039;AutoShuttersControl_Time_Up_Late:06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00&#039;,AutoShuttersControl_Time_Up_WE_Holiday =&amp;gt; &#039;AutoShuttersControl_Time_Up_WE_Holiday:06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00&#039;}&lt;br /&gt;
[[Datei:ReadingsGroup ASC Times.png|600px|]]&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* {{Link2Forum|Topic=90751|LinkText=&amp;quot;Thread zur Entwicklung im Forum&amp;quot;}} &lt;br /&gt;
* {{Link2Forum|Topic=73964|LinkText=&amp;quot;Thread zu den Scripten von user cluni&amp;quot;}}, die der Entwicklung des Moduls zugrunde liegen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Codeschnipsel]]&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=AMAD&amp;diff=27714</id>
		<title>AMAD</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=AMAD&amp;diff=27714"/>
		<updated>2018-08-16T12:33:45Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: /* Lister aller Variablen für die AMADCommandBridge */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuern von Androidgeräten und Anzeige von bestimmten Informationen dieser Geräte&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Sonstige Systeme&lt;br /&gt;
|ModTechName=73_AMADCommBridge.pm, 74_AMADDevice.pm&lt;br /&gt;
|ModOwner=CoolTux &amp;lt;br /&amp;gt;([http://forum.fhem.de/index.php?action=profile;u=13684 Forum] / [[Benutzer:CoolTux|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= AMAD 4.2 [AMADNG] =&lt;br /&gt;
== 73_AMADCommBridge / 74_AMADDevice ==&lt;br /&gt;
&lt;br /&gt;
= Vorwort =&lt;br /&gt;
=== Warum AMADNG ===&lt;br /&gt;
Nach fast 6 Monaten Entwicklungszeit wurde die neuste AMAD Version am 24.07.2017 offiziell frei gegeben. Diesmal lagen mir mehrere Dinge am Herzen.&lt;br /&gt;
In erster Linie wollte ich eine softwareseitige Trennung der AMADCommBridge vom eigentlichen Android Device. Daher ist die neue Version ein zweistufiges Modul geworden.&lt;br /&gt;
Im Laufe der Entwicklung kamen auch andere Anforderungen hinzu, die ich dann fähig war umzusetzen. Eine dieser Anforderungen war eine einfachere und besser funktionierende Installation. Herausgekommen ist ein Android Installationsassistant.&lt;br /&gt;
Mit ihm wird auf einfache Art und Weise direkt per Sprachführung und Eingabedialogen Automagic für AMAD konfiguriert und das Device in FHEM automatisch erstellt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Es ist darauf zu achten, das Autocreate aktiv ist, da sonst kein Device mit Hilfe des Assistenten angelegt werden kann!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Vorstellung =&lt;br /&gt;
Dieses 2-stufige Modul liefert, &#039;&#039;&#039;in Verbindung mit der Android App Automagic&#039;&#039;&#039;, diverse Informationen von Android Geräten. &lt;br /&gt;
Die AndroidAPP Automagic (die nicht von mir stammt und 2.90 Euro kostet) funktioniert wie Tasker, ist aber bei weitem benutzungsfreundlicher.&lt;br /&gt;
&lt;br /&gt;
=== Features / Funktionen ===&lt;br /&gt;
Im Auslieferungszustand werden folgende Zustände dargestellt:&lt;br /&gt;
* installierte Android Version&lt;br /&gt;
* Zustand von Automagic auf dem Gerät&lt;br /&gt;
* Spracheingabe&lt;br /&gt;
* Bluetooth An/Aus&lt;br /&gt;
* Zustand einer definierten App (läuft aktiv im Vordergrund oder nicht?)&lt;br /&gt;
* verbundene Bluetoothgeräte, inklusive deren MAC Adresse&lt;br /&gt;
* aktuell abgespieltes Musikalbum des verwendeten Mediaplayers&lt;br /&gt;
* aktuell abgespielter Musikinterpret des verwendeten Mediaplayers&lt;br /&gt;
* aktuell abgespielter Musiktitel des verwendeten Mediaplayers&lt;br /&gt;
* Status des Androidgerätes - Online/Offline&lt;br /&gt;
* nächster Alarmtag&lt;br /&gt;
* nächste Alarmzeit&lt;br /&gt;
* Batteriestatus in %&lt;br /&gt;
* Ladestatus - Netztei angeschlossen / nicht angeschlossen&lt;br /&gt;
* Bildschirmstatus An/Aus&lt;br /&gt;
* Bildschirmhelligkeit&lt;br /&gt;
* Vollbildmodus An/Aus&lt;br /&gt;
* Bildschirmausrichtung Auto/Landscape/Portrait&lt;br /&gt;
* Standardlautstärke&lt;br /&gt;
* Media Lautstärke&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Mit etwas Einarbeitung können jegliche Informationen, die Automagic bereit stellt, in FHEM angezeigt werden. Hierzu bedarf es lediglich eines eigenen Flows, der seine Daten an die AMADCommBridge sendet. Das Modul gibt auch die Möglichkeit Androidgeräte zu steuern.&lt;br /&gt;
&lt;br /&gt;
= AMADCommBridge - Kommunikationsbrücke für alle AMAD Geräte =&lt;br /&gt;
Dieses Modul ist das Ausgangsmodul zur erfolgreichen Integration von Androidgeräten in FHEM. Es stellt ferner eine Verbindungsebene zwischen AMAD unterstützten Geräten und FHEM zur Verfügung. Alle Kommunikation zwischen AMAD Android und FHEM läuft über diese Schnittstelle.&lt;br /&gt;
Daher erfolgt die Ersteinrichtung eines AMAD Devices auch genau über diese Modulinstanz. &lt;br /&gt;
&lt;br /&gt;
Damit erfolgreich ein Androidgerät in FHEM eingerichtet werden kann, muss im ersten Schritt ein AMADCommBridge Device angelegt werden.&lt;br /&gt;
&lt;br /&gt;
=== Definition in FHEM ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; AMADCommBridge&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== Beispiel ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define AMADBridge AMADCommBridge&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Anweisung erstellt ein neues AMADCommBridge Device namens AMADBridge.&lt;br /&gt;
&lt;br /&gt;
Im folgenden muß lediglich das Flowset auf dem Android Gerät installiert werden und der Flow &#039;First Run Assistent&#039; ausgeführt werden. (einfach den Homebutton drücken)&lt;br /&gt;
Der Assistent geleitet dann durch die Einrichtung des AMAD Gerätes und sorgt dafür, dass am Ende des Installationsprozess das Androidgerät als AMAD Device in FHEM angelegt wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
* JSON_ERROR - JSON Fehlermeldung, die von Perl gemeldet wird&lt;br /&gt;
* JSON_ERROR_STRING - der String, der die JSON Fehlermeldung verursacht hat&lt;br /&gt;
* fhemServerIP - die Ip-Adresse des FHEM Servers; wird vom Modul auf Basis des JSON Strings vom Installationsassistenten gesetzt. Kann aber auch mittels set Befehles vom User gesetzt werden&lt;br /&gt;
* receiveFhemCommand - ist das Attribut fhemControlMode auf trigger gestellt, wird das Reading gesetzt sobald ein FHEM Befehl übersendet wird. Hierauf kann dann ein Notify triggern. Wird anstelle von trigger setControl als Wert für fhemControlMode eingestellt, wird das Reading nicht gesetzt sondern der set Befehl sofort ausgeführt.&lt;br /&gt;
* receiveVoiceCommand - wird die Sprachsteuerung von AMAD aktiviert (set DEVICE activateVoiceInput) so wird der letzte erkannten Sprachbefehle in dieses Reading geschrieben.&lt;br /&gt;
* receiveVoiceDevice - Name des Devices von wo aus der letzte erkannte Sprachbefehl gesendet wurde&lt;br /&gt;
* state - Status der Bridge, open, closed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
* allowFrom - Regexp der erlaubten IP-Adressen oder Hostnamen. Wenn dieses Attribut gesetzt wurde, werden ausschließlich Verbindungen von diesen Adressen akzeptiert. Achtung: falls allowfrom nicht gesetzt ist, und keine gütige allowed Instanz definiert ist, und die Gegenstelle eine nicht lokale Adresse hat, dann wird die Verbindung abgewiesen. Folgende Adressen werden als local betrachtet: IPV4: 127/8, 10/8, 192.168/16, 172.16/10, 169.254/16, IPV6: ::1, fe80/10&lt;br /&gt;
* debugJSON - wenn auf 1 gesetzt, werden JSON Fehlermeldungen in Readings geschrieben. Siehe hierzu JSON_ERROR* unter Readings&lt;br /&gt;
* fhemControlMode - steuert die zulässige Art der Steuerung von FHEM Devices. Es können über die Bridge auf 2 Arten FHEM-Devices angesteuert werden: per direktem FHEM-Befehl aus einem Flow heraus oder als Sprachbefehl mittels Sprachsteuerung (set DEVICE activateVoiceInput)&lt;br /&gt;
** trigger - ist der Wert trigger gesetzt, werden alle an die Bridge gesendeten FHEM set Befehle in das Reading receiveFhemCommand geschrieben und können so mittels notify ausgeführt werden. Sprachsteuerung ist möglich, es werden Readings receiveVoice* gesetzt. Auf dem Androidgerät können bei Sprachsteuerung mehrere Sprachbefehle mittels &amp;quot;und&amp;quot; verknüpft/aneinander gereiht werden. Bsp: schalte die Lichtszene Abends an und schalte den Fernseher an&lt;br /&gt;
** setControl - alle set Befehle, die mittels eines Flows über die Bridge gesendet werden, werden automatisch ausgeführt. Das Triggern eines Readings ist nicht nötig. Die Steuerung mittels Sprache verhält sich wie beim Wert trigger&lt;br /&gt;
** thirdPartControl - verhält sich wie trigger, bei der Sprachsteuerung ist jedoch ein Anreihen von Sprachbefehlen mittels &amp;quot;und&amp;quot; nicht möglich. Dient der Sprachsteuerung über Module anderer Modulautoren ((z.B. 39_TEERKO.pm)&lt;br /&gt;
&lt;br /&gt;
= AMADDevice - Automagic Android Device =&lt;br /&gt;
Dieses Modul liefert, in Verbindung mit der Android APP Automagic, diverse Informationen von Android Geräten. Die Android App Automagic (die nicht von mir stammt und 2.90 Euro kostet) funktioniert wie Tasker, ist aber bei weitem User freundlicher. &lt;br /&gt;
Mit etwas Einarbeitung können jegliche Informationen, die Automagic bereit stellt in FHEM angezeigt werden. Hierzu bedarf es lediglich eines eigenen Flows, der seine Daten an die AMADDeviceCommBridge sendet. Das Modul gibt auch die Möglichkeit Androidgeräte zu steuern. &lt;br /&gt;
Für all diese Aktionen und Informationen wird auf dem Androidgerät &amp;quot;Automagic&amp;quot; und ein so genannter Flow benötigt. Die App ist über den Google PlayStore zu beziehen. Das benötigte Flowset bekommt man aus dem FHEM Verzeichnis. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Wie genau verwendet man nun AMADDevice? ===&lt;br /&gt;
* sicherstellen, dass als allererstes die AMADCommBridge in FHEM definiert wurde&lt;br /&gt;
* installieren der App &amp;quot;Automagic Premium&amp;quot; aus dem PlayStore&lt;br /&gt;
* installieren des Flowset 74_AMADDeviceautomagicFlowset$VERSION.xml aus dem Ordner $INSTALLFHEM/FHEM/lib/ auf dem Androidgerät&lt;br /&gt;
* aktivieren des Installationsassistanten Flow in Automagic. Wenn man nun Automagic in den Hintergrund schickt, z.B. Hometaste drücken, startet der Assistant und legt automatisch ein Device für das Androidgerät an.&lt;br /&gt;
&lt;br /&gt;
=== Ein AMADDevice Gerät von Hand anlegen. ===&lt;br /&gt;
&lt;br /&gt;
Define&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; AMADDevice &amp;lt;IP-ADRESSE&amp;gt; &amp;lt;AMAD_ID&amp;gt; &amp;lt;REMOTESERVER&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Beispiel ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define WandTabletWohnzimmer AMADDevice 192.168.0.23 123456 Automagic&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Fall wird ein AMADDevice von Hand angelegt. Die AMAD_ID, hier 123456, muß auch exakt so als globale Variable in Automagic eingetragen sein.&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
* airplanemode - Status des Flugmodus&lt;br /&gt;
* androidVersion - aktuell installierte Androidversion&lt;br /&gt;
* automagicState - Statusmeldungen von der Automagic App &#039;&#039;&#039;(Voraussetzung Android &amp;gt;4.3). Ist Android größer 4.3 vorhanden und im Reading steht &amp;quot;wird nicht unterstützt&amp;quot;, muss in den Androideinstellungen unter Ton und Benachrichtigungen -&amp;gt; Benachrichtigungszugriff ein Haken für Automagic gesetzt werden&#039;&#039;&#039;&lt;br /&gt;
* batteryHealth - Zustand der Battery (1=unbekannt, 2=gut, 3=überhitzt, 4=tot, 5=Überspannung, 6=unbekannter Fehler, 7=kalt)&lt;br /&gt;
* batterytemperature - Temperatur der Batterie&lt;br /&gt;
* bluetooth - on/off, Bluetooth Status an oder aus&lt;br /&gt;
* checkActiveTask - Zustand einer zuvor definierten App. 0=nicht aktiv oder nicht aktiv im Vordergrund, 1=aktiv im Vordergrund, &#039;&#039;&#039;siehe Hinweis unten&#039;&#039;&#039;&lt;br /&gt;
* connectedBTdevices - eine Liste der verbundenen Gerät&lt;br /&gt;
* connectedBTdevicesMAC - eine Liste der MAC Adressen aller verbundender BT Geräte&lt;br /&gt;
* currentMusicAlbum - aktuell abgespieltes Musikalbum des verwendeten Mediaplayers&lt;br /&gt;
* currentMusicApp - aktuell verwendeter Mediaplayer (Amazon Music, Google Play Music, Google Play Video, Spotify, YouTube, TuneIn Player, Aldi Life Music)&lt;br /&gt;
* currentMusicArtist - aktuell abgespielter Musikinterpret des verwendeten Mediaplayers&lt;br /&gt;
* currentMusicIcon - Cover vom aktuell abgespielten Album &#039;&#039;&#039;Noch nicht fertig implementiert&#039;&#039;&#039;&lt;br /&gt;
* currentMusicState - Status des aktuellen/zuletzt verwendeten Mediaplayers&lt;br /&gt;
* currentMusicTrack - aktuell abgespielter Musiktitel des verwendeten Mediaplayers&lt;br /&gt;
* daydream - on/off, Daydream gestartet oder nicht&lt;br /&gt;
* deviceState - Status des Androidgerätes. unknown, online, offline.&lt;br /&gt;
* doNotDisturb - aktueller Status des Nicht-Stören-Modus&lt;br /&gt;
* dockingState - undocked/docked Status, ob sich das Gerät in einer Dockingstation befindet.&lt;br /&gt;
* flow_SetCommands - active/inactive, Status des SetCommands Flow&lt;br /&gt;
* flow_informations - active/inactive, Status des Informations Flow&lt;br /&gt;
* flowsetVersionAtDevice - aktuell installierte Flowsetversion auf dem Device&lt;br /&gt;
* incomingCallerName - Anrufername des eingehenden Anrufes&lt;br /&gt;
* incomingCallerNumber - Anrufernummer des eingehenden Anrufes&lt;br /&gt;
* incommingWhatsAppMessageFrom - letzte WhatsApp Nachricht&lt;br /&gt;
* incommingWhatsTelegramMessageFrom - letzte Telegram Nachricht&lt;br /&gt;
* intentRadioName - zuletzt gestreamter Intent Radio Name&lt;br /&gt;
* intentRadioState - Status des IntentRadio Players&lt;br /&gt;
* keyguardSet - 0/1 Displaysperre gesetzt 0=nein 1=ja, bedeutet nicht, dass sie gerade aktiv ist&lt;br /&gt;
* lastSetCommandError - letzte Fehlermeldung vom set Befehl&lt;br /&gt;
* lastSetCommandState - letzter Status vom set Befehl, Befehl erfolgreich/nicht erfolgreich gesendet&lt;br /&gt;
* lastStatusRequestError - letzte Fehlermeldung vom statusRequest Befehl&lt;br /&gt;
* lastStatusRequestState - letzter Status vom statusRequest Befehl, Befehl erfolgreich/nicht erfolgreich gesendet&lt;br /&gt;
* nextAlarmDay - aktiver Alarmtag&lt;br /&gt;
* nextAlarmState - aktueller Status des &amp;quot;Androidinternen&amp;quot; Weckers&lt;br /&gt;
* nextAlarmTime - aktive Alarmzeit&lt;br /&gt;
* powerLevel - Status der Batterie in %&lt;br /&gt;
* powerPlugged - Netzteil angeschlossen? 1=AC Adapter, 2=USB, 4=Kabellos 0=nicht eingesteckt&lt;br /&gt;
* screen - on locked/unlocked, off locked/unlocked gibt an ob der Bildschirm an oder aus ist und gleichzeitig gesperrt oder nicht gesperrt&lt;br /&gt;
* screenBrightness - Bildschirmhelligkeit von 0-255&lt;br /&gt;
* screenFullscreen - on/off, Vollbildmodus (An,Aus)&lt;br /&gt;
* screenOrientation - Landscape,Portrait, Bildschirmausrichtung (Horizontal,Vertikal)&lt;br /&gt;
* screenOrientationMode - auto/manual, Modus für die Ausrichtung (Automatisch, Manuell)&lt;br /&gt;
* state - aktueller Status&lt;br /&gt;
* userFlowState - aktueller Status eines Flows, festgelegt unter dem setUserFlowState Attribut&lt;br /&gt;
* volume - Media Lautstärkewert&lt;br /&gt;
* volumeNotification - Benachrichtigungs-Lautstärke&lt;br /&gt;
&lt;br /&gt;
Beim Reading checkActivTask muß zuvor der Packagename der zu prüfenden App als Attribut checkActiveTask angegeben werden. Beispiel: attr Nexus10Wohnzimmer checkActiveTask com.android.chrome für den Chrome Browser.&lt;br /&gt;
&lt;br /&gt;
=== Set ===&lt;br /&gt;
* activateVoiceInput - aktiviert die Spracheingabe&lt;br /&gt;
* bluetooth - on/off, aktiviert/deaktiviert Bluetooth&lt;br /&gt;
* clearNotificationBar - All,Automagic, löscht alle Meldungen oder nur die Automagic Meldungen in der Statusleiste&lt;br /&gt;
* closeCall - beendet einen laufenden Anruf&lt;br /&gt;
* currentFlowsetUpdate - führt ein Flowsetupdate auf dem Device durch&lt;br /&gt;
* doNotDisturb - schaltet den Nicht-Stören-Modus: always immer stören, never niemals stören, alarmClockOnly nur Wecker darf stören, onlyImportant nur wichtige Störungen&lt;br /&gt;
* installFlowSource - installiert einen Flow auf dem Device, &amp;lt;u&amp;gt;das XML File muss unter /tmp/ liegen und die Endung xml haben. &amp;lt;b&amp;gt;Bsp:&amp;lt;/b&amp;gt; set TabletWohnzimmer installFlowSource WlanUebwerwachen.xml&amp;lt;/u&amp;gt;&lt;br /&gt;
* mediaAmazonMusic - play, stop, next, back ,steuert den Amazon Musik Mediaplayer&lt;br /&gt;
* mediaGoogleMusic - play, stop, next, back ,steuert den Google Play Musik Mediaplayer&lt;br /&gt;
* mediaSpotifyMusic - play, stop, next, back ,steuert den Spotify Mediaplayer&lt;br /&gt;
* mediaTuneinRadio - play, stop, next, back ,steuert den TuneIn Radio Mediaplayer&lt;br /&gt;
* mediaAldiMusic - play, stop, next, back ,steuert den Aldi Musik Mediaplayer&lt;br /&gt;
* mediaAudible - play, stop, next, back ,steuert den Audible Mediaplayer&lt;br /&gt;
* mediaYouTube - play, stop, next, back ,steuert den YouTube Mediaplayer&lt;br /&gt;
* mediaVlcPlayer - play, stop, next, back ,steuert den VLC Mediaplayer&lt;br /&gt;
* nextAlarmTime - setzt die Alarmzeit. gilt aber nur innerhalb der nächsten 24 h&lt;br /&gt;
* openCall - ruft eine Nummer an und legt optional nach X Sekunden auf / set DEVICE openCall 01736458 10 / ruft die Nummer an und beendet den Anruf nach 10s&lt;br /&gt;
* screen - on/off/lock/unlock schaltet den Bildschirm ein/aus oder sperrt/entsperrt ihn&lt;br /&gt;
* screenBrightness - setzt die Bildschirmhelligkeit, von 0-255.&lt;br /&gt;
* screenMsg - versendet eine Bildschirmnachricht&lt;br /&gt;
* sendintent - sendet einen Intentstring Bsp: set $AMADDeviceDEVICE sendIntent org.smblott.intentradio.PLAY url http://stream.klassikradio.de/live/mp3-192/stream.klassikradio.de/play.m3u name Klassikradio, der erste Befehl ist die Aktion und der zweite das Extra. Es können immer zwei Extras mitgegeben werden.&lt;br /&gt;
* sendSMS - sendet eine SMS an eine bestimmte Telefonnummer. Bsp.: sendSMS Dies ist ein Test|555487263&lt;br /&gt;
* startDaydream - startet den Daydream&lt;br /&gt;
* statusRequest - Fordert einen neuen Statusreport beim Device an. Es können nicht von allen Readings per statusRequest die Daten geholt werden. Einige wenige geben nur bei Statusänderung ihren Status wieder.&lt;br /&gt;
* timer - setzt einen Timer innerhalb der als Standard definierten Clock-App auf dem Device. Es können nur Sekunden angegeben werden.&lt;br /&gt;
* ttsMsg - versendet eine Nachricht, die als Sprachnachricht ausgegeben wird&lt;br /&gt;
* userFlowState - aktiviert oder deaktiviert einen oder mehrere Flows,&#039;&#039;&#039;set Nexus7Wohnzimmer Badezimmer vorheizen:inactive oder set Nexus7Wohnzimmer Badezimmer vorheizen,Nachtlicht Steven:inactive&#039;&#039;&#039;&lt;br /&gt;
* vibrate - lässt das Androidgerät vibrieren&lt;br /&gt;
* volume - setzt die Medialautstärke. Entweder die internen Lautsprecher oder sofern angeschlossen die Bluetoothlautsprecher und per Klinkenstecker angeschlossene Lautsprecher, + oder - vor dem Wert reduziert die aktuelle Lautstärke um den Wert. Der maximale Sliderwert kann über das Attribut setVolMax geregelt werden.&lt;br /&gt;
* volumeUp - erhöht die Lautstärke um den angegeben Wert im entsprechenden Attribut. Ist kein Attribut angegeben wird per default 2 genommen.&lt;br /&gt;
* volumeDown - reduziert die Lautstärke um den angegeben Wert im entsprechenden Attribut. Ist kein Attribut angegeben wird per default 2 genommen.&lt;br /&gt;
* volumeNotification - setzt die Benachrichtigungslautstärke.&lt;br /&gt;
&lt;br /&gt;
==== Set abhängig von gesetzten Attributen ====&lt;br /&gt;
* changetoBtDevice - wechselt zu einem anderen Bluetooth Gerät. Attribut setBluetoothDevice muß gesetzt sein. Siehe Hinweis unten!&lt;br /&gt;
* notifySndFile - spielt die angegebene Mediadatei auf dem Androidgerät ab. Die aufzurufende Mediadatei sollte sich im Ordner /storage/emulated/0/Notifications/ befinden. Ist dies nicht der Fall kann man über das Attribut setNotifySndFilePath einen Pfad vorgeben.&lt;br /&gt;
* openApp - öffnet eine ausgewählte App. Attribut setOpenApp&lt;br /&gt;
* openURL - öffnet eine URL im Standardbrowser, sofern kein anderer Browser über das Attribut setOpenUrlBrowser ausgewählt wurde. Bsp: attr Tablet setOpenUrlBrowser de.ozerov.fully|de.ozerov.fully.MainActivity, das erste ist der Package Name und das zweite der Class Name&lt;br /&gt;
* setAPSSID - setzt die AccessPoint SSID um ein WLAN sleep zu verhindern&lt;br /&gt;
* setScreenOnForTimer ändert die Zeitdauer, die das Display an bleiben soll!&lt;br /&gt;
* screenFullscreen - on/off, (aktiviert/deaktiviert) den Vollbildmodus. Attribut setFullscreen&lt;br /&gt;
* screenLock - Sperrt den Bildschirm mit Pinabfrage. Attribut setScreenlockPIN - hier die Pin dafür eingeben. Erlaubt sind nur Zahlen. Es müßen mindestens 4, bis max 16 Zeichen verwendet werden.&lt;br /&gt;
* screenOrientation - Auto,Landscape,Portait, aktiviert die Bildschirmausrichtung (Automatisch,Horizontal,Vertikal). Attribut setScreenOrientation&lt;br /&gt;
* system - setzt Systembefehle ab (nur bei gerootetet Geräten). reboot,shutdown,airplanemodeON (kann nur aktiviert werden) Attribut root, in den Automagic Einstellungen muss &amp;quot;Root Funktion&amp;quot; gesetzt werden&lt;br /&gt;
* setNotifySndFilePath - setzt den korrekten Systempfad zur Notifydatei (default ist /storage/emulated/0/Notifications/&lt;br /&gt;
* setTtsMsgSpeed - setzt die Sprachgeschwindigkeit bei der Sprachausgabe(Werte zwischen 0.5 bis 4.0 in 0.5er Schritten) default ist 1.0&lt;br /&gt;
* setTtsMsgSpeed - setzt die Sprache bei der Sprachausgabe, de oder en (default ist de)&lt;br /&gt;
* setVolUpDownStep - setzt den Step für volumeUp und volumeDown&lt;br /&gt;
* setVolMax - setzt die maximale Volume Größe für den Slider&lt;br /&gt;
* setNotifyVolMax - setzt den maximalen Lautstärkewert für Benachrichtigungslautstärke für den Slider&lt;br /&gt;
* setRingSoundVolMax - setzt den maximalen Lautstärkewert für Klingellautstärke für den Slider&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Um openApp verwenden zu können, muss als Attribut der Package Name der App angegeben werden. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Um zwischen Bluetoothgeräten wechseln zu können, muss das Attribut setBluetoothDevice mit folgender Syntax gesetzt werden. attr &amp;lt;DEVICE&amp;gt; BTdeviceName1|MAC,BTDeviceName2|MAC Es muss zwingend darauf geachtet werden, dass beim BTdeviceName kein Leerzeichen vorhanden ist. Am besten zusammen oder mit Unterstrich. Bei der MAC ist darauf zu achten, dass wirklich nach jeder zweiten Zahl ein : steht&lt;br /&gt;
&lt;br /&gt;
** &#039;&#039;&#039;Beispiel: attr Nexus10Wohnzimmer setBluetoothDevice Logitech_BT_Adapter|AB:12:CD:34:EF:32,Anker_A3565|GH:56:IJ:78:KL:76&lt;br /&gt;
&lt;br /&gt;
=== state ===&lt;br /&gt;
* initialized - Ist der Status kurz nach einem define.&lt;br /&gt;
* active - die Geräteinstanz ist im aktiven Status.&lt;br /&gt;
* disabled - die Geräteinstanz wurde über das Attribut disable deaktiviert&lt;br /&gt;
&lt;br /&gt;
==Anwendungsbeispiele==&lt;br /&gt;
=== Lademanagement ===&lt;br /&gt;
Ich habe die Ladegeräte für meine Androidgeräte an Funkschaltsteckdosen. Ein DOIF schaltet bei unter 30% die Steckdose ein und bei über 90% wieder aus.&lt;br /&gt;
&lt;br /&gt;
Hier mal ein einfaches DOIF Beispiel für ein Lademanagment&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
... DOIF ([Nexus5Handy:powerLevel] &amp;lt; 30) (set LadenetzteilNexus5Handy:FILTER=STATE=off on) DOELSEIF ([Nexus5Handy:powerLevel] &amp;gt; 90) (set LadenetzteilNexus5Handy:FILTER=STATE=on off) DOELSE&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Wecker ===&lt;br /&gt;
Morgens lasse ich mich über mein Tablet im Schlafzimmer mit Musik wecken. Verwendet wird hierzu der wakeuptimer des RESIDENTS Modules. Das Abspielen stoppe ich dann von Hand. Danach erfolgt noch eine Ansage wie das Wetter gerade ist und wird.&lt;br /&gt;
&lt;br /&gt;
=== Mediacenter ===&lt;br /&gt;
Mein 10&amp;quot; Tablet im Wohnzimmer ist Mediaplayer für das Wohnzimmer mit Bluetoothlautsprechern. Die Lautstärke wird automatisch heruntergesetzt, wenn die Fritzbox einen Anruf auf das Wohnzimmer Handgerät signalisiert.&lt;br /&gt;
&lt;br /&gt;
=== Sprachbefehl - Abfragen von Zuständen diverser Sensoren ===&lt;br /&gt;
Wenn ich die Spracheingabe aktiviere und nach der Temperatur im Wohnzimmer frage, bekomme ich diese angesagt.&lt;br /&gt;
&lt;br /&gt;
Der Teil im Feld Daten ist ein klassisches ReadingsVal, halt nur ohne Komma und ohne Anführungszeichen&lt;br /&gt;
&lt;br /&gt;
WIRD GERADE ÜBERARBEITET&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Schaltbefehle vom Androidgerät an FHEM senden ===&lt;br /&gt;
Hierfür ist ein eigener Flow einzurichten. Wie das genau geht, verrät die Hilfe.&lt;br /&gt;
Um einen Schaltbefehl für FHEM zu erstellen, folgt nach dem Trigger eine Aktion als Script (Aktion Type: Script). Hier ist folgendes einzutragen:&lt;br /&gt;
&lt;br /&gt;
setcmd = &amp;quot;LichtWohnzimmerLampeRechts on&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;set&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In der ersten Zeile wird also der Schaltbefehl in der Variablem setcmd eingetragen und in der zweiten Zeile der FHEM Befehl in der Variablen fhemcmd.&lt;br /&gt;
&lt;br /&gt;
Danach müsst Ihr nur noch in einer weiteren Aktion den Flow &amp;quot;Send Data to AMADCommBridge&amp;quot; ausführen (Aktion Type: Flows ausführen). Die Aktion sollte bereits in Eurer Liste Vorhanden sein.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Screenshot_20160717-134948.png|200px]]&lt;br /&gt;
[[Datei:Screenshot 17.07.2016 1-50-27.png|200px]]&lt;br /&gt;
&lt;br /&gt;
Nun sollte Lampe1 angeschalten werden, wenn der Flow ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
=== Mit FHEM ein Flow ausführen ===&lt;br /&gt;
Es gibt den set Befehl userFlowRun. Als Argument übergibt man einen Flownamen. &#039;&#039;&#039;Achtung dieser Flowname darf keine Sonder oder Leerzeichen enthalten!!!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Schaltbefehle an FHEM senden mit Hilfe eines eigenen Flows ===&lt;br /&gt;
&lt;br /&gt;
==== Lister aller Variablen für die AMADCommandBridge ====&lt;br /&gt;
fhemcmd Variable &lt;br /&gt;
* Wert &amp;quot;set&amp;quot; - Variable für den Schaltbefehl &#039;setcmd&#039;&lt;br /&gt;
* Wert &amp;quot;setreading&amp;quot; - Variable für die Readingswerte &#039;fhemdata&#039;&lt;br /&gt;
* &amp;quot;readingsval&amp;quot; - Variable für die Abfragewerte &#039;readingsvalcmd&#039;&lt;br /&gt;
* &amp;quot;fhemfunc&amp;quot; - Variable für den Funktionsnamen &#039;fhemsub&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele für Skriptinhalte:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Schalten einer Lampe&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
setcmd = &amp;quot;LichtWohnzimmerLampeRechts on&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;set&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Status eines Device abfragen&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
readingsvalcmd = &amp;quot;DEVICE READING DEFAULT&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;readingsval&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Rückgabevariable, die dann weiter verarbeitet werden kann, heißt &#039;&#039;&#039;respreadingsval&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Aufruf einer 99_myUtils Subroutine&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
fhemsub = &amp;quot;mySub()&amp;quot;; oder natürlich auch &amp;quot;mySub(&#039;was_auch_immer&#039;)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;fhemfunc&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Rückgabevariable, die dann weiter verarbeitet werden kann, heißt &#039;&#039;&#039;respfhemfunc&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Bekannte Meldungen/Hinweise/Probleme ==&lt;br /&gt;
&lt;br /&gt;
Wenn auf dem Android-Gerät die Fehlermeldung &#039;Accessibility service not running&#039; von Automagic kommt oder im FHEM das reading state  &#039;Flow Informations mit Fehler beendet&#039; steht, dann muss der Accessibility Service auf dem Android-Device aktiviert werden: Einstellungen --&amp;gt; Bedienungshilfen --&amp;gt; Automagic Premium. Hier muss der Schalter auf &#039;an&#039; stehen. Sollte dies der Fall sein, hilft u.U. ein kurzes Aus- und wieder Einschalten.&lt;br /&gt;
&lt;br /&gt;
Gerät wird oft als offline angezeigt und es können keine set Befehle abgesetzt werden.&lt;br /&gt;
Mit der AMAD Version 2.2 hielt eine neue Behandlung des deviceState Readings Einzug. Das Reading stellt nun den tatsächlichen Status des Gerätes gegenüber FHEM da. Bei vielen Android 6 Geräten kommt es aber auf Grund vom DeepSleep Modus zum Wegfall der WLAN Verbindung. Hier hilft die neue KeepAlive Funktion in AMAD. Dafür muß lediglich unter &lt;br /&gt;
* Einstellungen --&amp;gt; Akku --&amp;gt; oben auf die drei Punkte - Akku Leistungsoptimierung --&amp;gt; alle Apps und dann Automagic auswählen und &amp;quot;Nicht optimieren&amp;quot;&lt;br /&gt;
ausgewählt werden und in FHEM für das Device das Attribut setAPSSID gesetzt werden. Alles andere macht das Modul selbst.&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=AMAD&amp;diff=27713</id>
		<title>AMAD</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=AMAD&amp;diff=27713"/>
		<updated>2018-08-16T12:33:26Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: /* Mit FHEM ein Flow ausführen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuern von Androidgeräten und Anzeige von bestimmten Informationen dieser Geräte&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Sonstige Systeme&lt;br /&gt;
|ModTechName=73_AMADCommBridge.pm, 74_AMADDevice.pm&lt;br /&gt;
|ModOwner=CoolTux &amp;lt;br /&amp;gt;([http://forum.fhem.de/index.php?action=profile;u=13684 Forum] / [[Benutzer:CoolTux|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= AMAD 4.2 [AMADNG] =&lt;br /&gt;
== 73_AMADCommBridge / 74_AMADDevice ==&lt;br /&gt;
&lt;br /&gt;
= Vorwort =&lt;br /&gt;
=== Warum AMADNG ===&lt;br /&gt;
Nach fast 6 Monaten Entwicklungszeit wurde die neuste AMAD Version am 24.07.2017 offiziell frei gegeben. Diesmal lagen mir mehrere Dinge am Herzen.&lt;br /&gt;
In erster Linie wollte ich eine softwareseitige Trennung der AMADCommBridge vom eigentlichen Android Device. Daher ist die neue Version ein zweistufiges Modul geworden.&lt;br /&gt;
Im Laufe der Entwicklung kamen auch andere Anforderungen hinzu, die ich dann fähig war umzusetzen. Eine dieser Anforderungen war eine einfachere und besser funktionierende Installation. Herausgekommen ist ein Android Installationsassistant.&lt;br /&gt;
Mit ihm wird auf einfache Art und Weise direkt per Sprachführung und Eingabedialogen Automagic für AMAD konfiguriert und das Device in FHEM automatisch erstellt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Es ist darauf zu achten, das Autocreate aktiv ist, da sonst kein Device mit Hilfe des Assistenten angelegt werden kann!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Vorstellung =&lt;br /&gt;
Dieses 2-stufige Modul liefert, &#039;&#039;&#039;in Verbindung mit der Android App Automagic&#039;&#039;&#039;, diverse Informationen von Android Geräten. &lt;br /&gt;
Die AndroidAPP Automagic (die nicht von mir stammt und 2.90 Euro kostet) funktioniert wie Tasker, ist aber bei weitem benutzungsfreundlicher.&lt;br /&gt;
&lt;br /&gt;
=== Features / Funktionen ===&lt;br /&gt;
Im Auslieferungszustand werden folgende Zustände dargestellt:&lt;br /&gt;
* installierte Android Version&lt;br /&gt;
* Zustand von Automagic auf dem Gerät&lt;br /&gt;
* Spracheingabe&lt;br /&gt;
* Bluetooth An/Aus&lt;br /&gt;
* Zustand einer definierten App (läuft aktiv im Vordergrund oder nicht?)&lt;br /&gt;
* verbundene Bluetoothgeräte, inklusive deren MAC Adresse&lt;br /&gt;
* aktuell abgespieltes Musikalbum des verwendeten Mediaplayers&lt;br /&gt;
* aktuell abgespielter Musikinterpret des verwendeten Mediaplayers&lt;br /&gt;
* aktuell abgespielter Musiktitel des verwendeten Mediaplayers&lt;br /&gt;
* Status des Androidgerätes - Online/Offline&lt;br /&gt;
* nächster Alarmtag&lt;br /&gt;
* nächste Alarmzeit&lt;br /&gt;
* Batteriestatus in %&lt;br /&gt;
* Ladestatus - Netztei angeschlossen / nicht angeschlossen&lt;br /&gt;
* Bildschirmstatus An/Aus&lt;br /&gt;
* Bildschirmhelligkeit&lt;br /&gt;
* Vollbildmodus An/Aus&lt;br /&gt;
* Bildschirmausrichtung Auto/Landscape/Portrait&lt;br /&gt;
* Standardlautstärke&lt;br /&gt;
* Media Lautstärke&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Mit etwas Einarbeitung können jegliche Informationen, die Automagic bereit stellt, in FHEM angezeigt werden. Hierzu bedarf es lediglich eines eigenen Flows, der seine Daten an die AMADCommBridge sendet. Das Modul gibt auch die Möglichkeit Androidgeräte zu steuern.&lt;br /&gt;
&lt;br /&gt;
= AMADCommBridge - Kommunikationsbrücke für alle AMAD Geräte =&lt;br /&gt;
Dieses Modul ist das Ausgangsmodul zur erfolgreichen Integration von Androidgeräten in FHEM. Es stellt ferner eine Verbindungsebene zwischen AMAD unterstützten Geräten und FHEM zur Verfügung. Alle Kommunikation zwischen AMAD Android und FHEM läuft über diese Schnittstelle.&lt;br /&gt;
Daher erfolgt die Ersteinrichtung eines AMAD Devices auch genau über diese Modulinstanz. &lt;br /&gt;
&lt;br /&gt;
Damit erfolgreich ein Androidgerät in FHEM eingerichtet werden kann, muss im ersten Schritt ein AMADCommBridge Device angelegt werden.&lt;br /&gt;
&lt;br /&gt;
=== Definition in FHEM ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; AMADCommBridge&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== Beispiel ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define AMADBridge AMADCommBridge&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Anweisung erstellt ein neues AMADCommBridge Device namens AMADBridge.&lt;br /&gt;
&lt;br /&gt;
Im folgenden muß lediglich das Flowset auf dem Android Gerät installiert werden und der Flow &#039;First Run Assistent&#039; ausgeführt werden. (einfach den Homebutton drücken)&lt;br /&gt;
Der Assistent geleitet dann durch die Einrichtung des AMAD Gerätes und sorgt dafür, dass am Ende des Installationsprozess das Androidgerät als AMAD Device in FHEM angelegt wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
* JSON_ERROR - JSON Fehlermeldung, die von Perl gemeldet wird&lt;br /&gt;
* JSON_ERROR_STRING - der String, der die JSON Fehlermeldung verursacht hat&lt;br /&gt;
* fhemServerIP - die Ip-Adresse des FHEM Servers; wird vom Modul auf Basis des JSON Strings vom Installationsassistenten gesetzt. Kann aber auch mittels set Befehles vom User gesetzt werden&lt;br /&gt;
* receiveFhemCommand - ist das Attribut fhemControlMode auf trigger gestellt, wird das Reading gesetzt sobald ein FHEM Befehl übersendet wird. Hierauf kann dann ein Notify triggern. Wird anstelle von trigger setControl als Wert für fhemControlMode eingestellt, wird das Reading nicht gesetzt sondern der set Befehl sofort ausgeführt.&lt;br /&gt;
* receiveVoiceCommand - wird die Sprachsteuerung von AMAD aktiviert (set DEVICE activateVoiceInput) so wird der letzte erkannten Sprachbefehle in dieses Reading geschrieben.&lt;br /&gt;
* receiveVoiceDevice - Name des Devices von wo aus der letzte erkannte Sprachbefehl gesendet wurde&lt;br /&gt;
* state - Status der Bridge, open, closed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
* allowFrom - Regexp der erlaubten IP-Adressen oder Hostnamen. Wenn dieses Attribut gesetzt wurde, werden ausschließlich Verbindungen von diesen Adressen akzeptiert. Achtung: falls allowfrom nicht gesetzt ist, und keine gütige allowed Instanz definiert ist, und die Gegenstelle eine nicht lokale Adresse hat, dann wird die Verbindung abgewiesen. Folgende Adressen werden als local betrachtet: IPV4: 127/8, 10/8, 192.168/16, 172.16/10, 169.254/16, IPV6: ::1, fe80/10&lt;br /&gt;
* debugJSON - wenn auf 1 gesetzt, werden JSON Fehlermeldungen in Readings geschrieben. Siehe hierzu JSON_ERROR* unter Readings&lt;br /&gt;
* fhemControlMode - steuert die zulässige Art der Steuerung von FHEM Devices. Es können über die Bridge auf 2 Arten FHEM-Devices angesteuert werden: per direktem FHEM-Befehl aus einem Flow heraus oder als Sprachbefehl mittels Sprachsteuerung (set DEVICE activateVoiceInput)&lt;br /&gt;
** trigger - ist der Wert trigger gesetzt, werden alle an die Bridge gesendeten FHEM set Befehle in das Reading receiveFhemCommand geschrieben und können so mittels notify ausgeführt werden. Sprachsteuerung ist möglich, es werden Readings receiveVoice* gesetzt. Auf dem Androidgerät können bei Sprachsteuerung mehrere Sprachbefehle mittels &amp;quot;und&amp;quot; verknüpft/aneinander gereiht werden. Bsp: schalte die Lichtszene Abends an und schalte den Fernseher an&lt;br /&gt;
** setControl - alle set Befehle, die mittels eines Flows über die Bridge gesendet werden, werden automatisch ausgeführt. Das Triggern eines Readings ist nicht nötig. Die Steuerung mittels Sprache verhält sich wie beim Wert trigger&lt;br /&gt;
** thirdPartControl - verhält sich wie trigger, bei der Sprachsteuerung ist jedoch ein Anreihen von Sprachbefehlen mittels &amp;quot;und&amp;quot; nicht möglich. Dient der Sprachsteuerung über Module anderer Modulautoren ((z.B. 39_TEERKO.pm)&lt;br /&gt;
&lt;br /&gt;
= AMADDevice - Automagic Android Device =&lt;br /&gt;
Dieses Modul liefert, in Verbindung mit der Android APP Automagic, diverse Informationen von Android Geräten. Die Android App Automagic (die nicht von mir stammt und 2.90 Euro kostet) funktioniert wie Tasker, ist aber bei weitem User freundlicher. &lt;br /&gt;
Mit etwas Einarbeitung können jegliche Informationen, die Automagic bereit stellt in FHEM angezeigt werden. Hierzu bedarf es lediglich eines eigenen Flows, der seine Daten an die AMADDeviceCommBridge sendet. Das Modul gibt auch die Möglichkeit Androidgeräte zu steuern. &lt;br /&gt;
Für all diese Aktionen und Informationen wird auf dem Androidgerät &amp;quot;Automagic&amp;quot; und ein so genannter Flow benötigt. Die App ist über den Google PlayStore zu beziehen. Das benötigte Flowset bekommt man aus dem FHEM Verzeichnis. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Wie genau verwendet man nun AMADDevice? ===&lt;br /&gt;
* sicherstellen, dass als allererstes die AMADCommBridge in FHEM definiert wurde&lt;br /&gt;
* installieren der App &amp;quot;Automagic Premium&amp;quot; aus dem PlayStore&lt;br /&gt;
* installieren des Flowset 74_AMADDeviceautomagicFlowset$VERSION.xml aus dem Ordner $INSTALLFHEM/FHEM/lib/ auf dem Androidgerät&lt;br /&gt;
* aktivieren des Installationsassistanten Flow in Automagic. Wenn man nun Automagic in den Hintergrund schickt, z.B. Hometaste drücken, startet der Assistant und legt automatisch ein Device für das Androidgerät an.&lt;br /&gt;
&lt;br /&gt;
=== Ein AMADDevice Gerät von Hand anlegen. ===&lt;br /&gt;
&lt;br /&gt;
Define&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; AMADDevice &amp;lt;IP-ADRESSE&amp;gt; &amp;lt;AMAD_ID&amp;gt; &amp;lt;REMOTESERVER&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Beispiel ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define WandTabletWohnzimmer AMADDevice 192.168.0.23 123456 Automagic&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Fall wird ein AMADDevice von Hand angelegt. Die AMAD_ID, hier 123456, muß auch exakt so als globale Variable in Automagic eingetragen sein.&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
* airplanemode - Status des Flugmodus&lt;br /&gt;
* androidVersion - aktuell installierte Androidversion&lt;br /&gt;
* automagicState - Statusmeldungen von der Automagic App &#039;&#039;&#039;(Voraussetzung Android &amp;gt;4.3). Ist Android größer 4.3 vorhanden und im Reading steht &amp;quot;wird nicht unterstützt&amp;quot;, muss in den Androideinstellungen unter Ton und Benachrichtigungen -&amp;gt; Benachrichtigungszugriff ein Haken für Automagic gesetzt werden&#039;&#039;&#039;&lt;br /&gt;
* batteryHealth - Zustand der Battery (1=unbekannt, 2=gut, 3=überhitzt, 4=tot, 5=Überspannung, 6=unbekannter Fehler, 7=kalt)&lt;br /&gt;
* batterytemperature - Temperatur der Batterie&lt;br /&gt;
* bluetooth - on/off, Bluetooth Status an oder aus&lt;br /&gt;
* checkActiveTask - Zustand einer zuvor definierten App. 0=nicht aktiv oder nicht aktiv im Vordergrund, 1=aktiv im Vordergrund, &#039;&#039;&#039;siehe Hinweis unten&#039;&#039;&#039;&lt;br /&gt;
* connectedBTdevices - eine Liste der verbundenen Gerät&lt;br /&gt;
* connectedBTdevicesMAC - eine Liste der MAC Adressen aller verbundender BT Geräte&lt;br /&gt;
* currentMusicAlbum - aktuell abgespieltes Musikalbum des verwendeten Mediaplayers&lt;br /&gt;
* currentMusicApp - aktuell verwendeter Mediaplayer (Amazon Music, Google Play Music, Google Play Video, Spotify, YouTube, TuneIn Player, Aldi Life Music)&lt;br /&gt;
* currentMusicArtist - aktuell abgespielter Musikinterpret des verwendeten Mediaplayers&lt;br /&gt;
* currentMusicIcon - Cover vom aktuell abgespielten Album &#039;&#039;&#039;Noch nicht fertig implementiert&#039;&#039;&#039;&lt;br /&gt;
* currentMusicState - Status des aktuellen/zuletzt verwendeten Mediaplayers&lt;br /&gt;
* currentMusicTrack - aktuell abgespielter Musiktitel des verwendeten Mediaplayers&lt;br /&gt;
* daydream - on/off, Daydream gestartet oder nicht&lt;br /&gt;
* deviceState - Status des Androidgerätes. unknown, online, offline.&lt;br /&gt;
* doNotDisturb - aktueller Status des Nicht-Stören-Modus&lt;br /&gt;
* dockingState - undocked/docked Status, ob sich das Gerät in einer Dockingstation befindet.&lt;br /&gt;
* flow_SetCommands - active/inactive, Status des SetCommands Flow&lt;br /&gt;
* flow_informations - active/inactive, Status des Informations Flow&lt;br /&gt;
* flowsetVersionAtDevice - aktuell installierte Flowsetversion auf dem Device&lt;br /&gt;
* incomingCallerName - Anrufername des eingehenden Anrufes&lt;br /&gt;
* incomingCallerNumber - Anrufernummer des eingehenden Anrufes&lt;br /&gt;
* incommingWhatsAppMessageFrom - letzte WhatsApp Nachricht&lt;br /&gt;
* incommingWhatsTelegramMessageFrom - letzte Telegram Nachricht&lt;br /&gt;
* intentRadioName - zuletzt gestreamter Intent Radio Name&lt;br /&gt;
* intentRadioState - Status des IntentRadio Players&lt;br /&gt;
* keyguardSet - 0/1 Displaysperre gesetzt 0=nein 1=ja, bedeutet nicht, dass sie gerade aktiv ist&lt;br /&gt;
* lastSetCommandError - letzte Fehlermeldung vom set Befehl&lt;br /&gt;
* lastSetCommandState - letzter Status vom set Befehl, Befehl erfolgreich/nicht erfolgreich gesendet&lt;br /&gt;
* lastStatusRequestError - letzte Fehlermeldung vom statusRequest Befehl&lt;br /&gt;
* lastStatusRequestState - letzter Status vom statusRequest Befehl, Befehl erfolgreich/nicht erfolgreich gesendet&lt;br /&gt;
* nextAlarmDay - aktiver Alarmtag&lt;br /&gt;
* nextAlarmState - aktueller Status des &amp;quot;Androidinternen&amp;quot; Weckers&lt;br /&gt;
* nextAlarmTime - aktive Alarmzeit&lt;br /&gt;
* powerLevel - Status der Batterie in %&lt;br /&gt;
* powerPlugged - Netzteil angeschlossen? 1=AC Adapter, 2=USB, 4=Kabellos 0=nicht eingesteckt&lt;br /&gt;
* screen - on locked/unlocked, off locked/unlocked gibt an ob der Bildschirm an oder aus ist und gleichzeitig gesperrt oder nicht gesperrt&lt;br /&gt;
* screenBrightness - Bildschirmhelligkeit von 0-255&lt;br /&gt;
* screenFullscreen - on/off, Vollbildmodus (An,Aus)&lt;br /&gt;
* screenOrientation - Landscape,Portrait, Bildschirmausrichtung (Horizontal,Vertikal)&lt;br /&gt;
* screenOrientationMode - auto/manual, Modus für die Ausrichtung (Automatisch, Manuell)&lt;br /&gt;
* state - aktueller Status&lt;br /&gt;
* userFlowState - aktueller Status eines Flows, festgelegt unter dem setUserFlowState Attribut&lt;br /&gt;
* volume - Media Lautstärkewert&lt;br /&gt;
* volumeNotification - Benachrichtigungs-Lautstärke&lt;br /&gt;
&lt;br /&gt;
Beim Reading checkActivTask muß zuvor der Packagename der zu prüfenden App als Attribut checkActiveTask angegeben werden. Beispiel: attr Nexus10Wohnzimmer checkActiveTask com.android.chrome für den Chrome Browser.&lt;br /&gt;
&lt;br /&gt;
=== Set ===&lt;br /&gt;
* activateVoiceInput - aktiviert die Spracheingabe&lt;br /&gt;
* bluetooth - on/off, aktiviert/deaktiviert Bluetooth&lt;br /&gt;
* clearNotificationBar - All,Automagic, löscht alle Meldungen oder nur die Automagic Meldungen in der Statusleiste&lt;br /&gt;
* closeCall - beendet einen laufenden Anruf&lt;br /&gt;
* currentFlowsetUpdate - führt ein Flowsetupdate auf dem Device durch&lt;br /&gt;
* doNotDisturb - schaltet den Nicht-Stören-Modus: always immer stören, never niemals stören, alarmClockOnly nur Wecker darf stören, onlyImportant nur wichtige Störungen&lt;br /&gt;
* installFlowSource - installiert einen Flow auf dem Device, &amp;lt;u&amp;gt;das XML File muss unter /tmp/ liegen und die Endung xml haben. &amp;lt;b&amp;gt;Bsp:&amp;lt;/b&amp;gt; set TabletWohnzimmer installFlowSource WlanUebwerwachen.xml&amp;lt;/u&amp;gt;&lt;br /&gt;
* mediaAmazonMusic - play, stop, next, back ,steuert den Amazon Musik Mediaplayer&lt;br /&gt;
* mediaGoogleMusic - play, stop, next, back ,steuert den Google Play Musik Mediaplayer&lt;br /&gt;
* mediaSpotifyMusic - play, stop, next, back ,steuert den Spotify Mediaplayer&lt;br /&gt;
* mediaTuneinRadio - play, stop, next, back ,steuert den TuneIn Radio Mediaplayer&lt;br /&gt;
* mediaAldiMusic - play, stop, next, back ,steuert den Aldi Musik Mediaplayer&lt;br /&gt;
* mediaAudible - play, stop, next, back ,steuert den Audible Mediaplayer&lt;br /&gt;
* mediaYouTube - play, stop, next, back ,steuert den YouTube Mediaplayer&lt;br /&gt;
* mediaVlcPlayer - play, stop, next, back ,steuert den VLC Mediaplayer&lt;br /&gt;
* nextAlarmTime - setzt die Alarmzeit. gilt aber nur innerhalb der nächsten 24 h&lt;br /&gt;
* openCall - ruft eine Nummer an und legt optional nach X Sekunden auf / set DEVICE openCall 01736458 10 / ruft die Nummer an und beendet den Anruf nach 10s&lt;br /&gt;
* screen - on/off/lock/unlock schaltet den Bildschirm ein/aus oder sperrt/entsperrt ihn&lt;br /&gt;
* screenBrightness - setzt die Bildschirmhelligkeit, von 0-255.&lt;br /&gt;
* screenMsg - versendet eine Bildschirmnachricht&lt;br /&gt;
* sendintent - sendet einen Intentstring Bsp: set $AMADDeviceDEVICE sendIntent org.smblott.intentradio.PLAY url http://stream.klassikradio.de/live/mp3-192/stream.klassikradio.de/play.m3u name Klassikradio, der erste Befehl ist die Aktion und der zweite das Extra. Es können immer zwei Extras mitgegeben werden.&lt;br /&gt;
* sendSMS - sendet eine SMS an eine bestimmte Telefonnummer. Bsp.: sendSMS Dies ist ein Test|555487263&lt;br /&gt;
* startDaydream - startet den Daydream&lt;br /&gt;
* statusRequest - Fordert einen neuen Statusreport beim Device an. Es können nicht von allen Readings per statusRequest die Daten geholt werden. Einige wenige geben nur bei Statusänderung ihren Status wieder.&lt;br /&gt;
* timer - setzt einen Timer innerhalb der als Standard definierten Clock-App auf dem Device. Es können nur Sekunden angegeben werden.&lt;br /&gt;
* ttsMsg - versendet eine Nachricht, die als Sprachnachricht ausgegeben wird&lt;br /&gt;
* userFlowState - aktiviert oder deaktiviert einen oder mehrere Flows,&#039;&#039;&#039;set Nexus7Wohnzimmer Badezimmer vorheizen:inactive oder set Nexus7Wohnzimmer Badezimmer vorheizen,Nachtlicht Steven:inactive&#039;&#039;&#039;&lt;br /&gt;
* vibrate - lässt das Androidgerät vibrieren&lt;br /&gt;
* volume - setzt die Medialautstärke. Entweder die internen Lautsprecher oder sofern angeschlossen die Bluetoothlautsprecher und per Klinkenstecker angeschlossene Lautsprecher, + oder - vor dem Wert reduziert die aktuelle Lautstärke um den Wert. Der maximale Sliderwert kann über das Attribut setVolMax geregelt werden.&lt;br /&gt;
* volumeUp - erhöht die Lautstärke um den angegeben Wert im entsprechenden Attribut. Ist kein Attribut angegeben wird per default 2 genommen.&lt;br /&gt;
* volumeDown - reduziert die Lautstärke um den angegeben Wert im entsprechenden Attribut. Ist kein Attribut angegeben wird per default 2 genommen.&lt;br /&gt;
* volumeNotification - setzt die Benachrichtigungslautstärke.&lt;br /&gt;
&lt;br /&gt;
==== Set abhängig von gesetzten Attributen ====&lt;br /&gt;
* changetoBtDevice - wechselt zu einem anderen Bluetooth Gerät. Attribut setBluetoothDevice muß gesetzt sein. Siehe Hinweis unten!&lt;br /&gt;
* notifySndFile - spielt die angegebene Mediadatei auf dem Androidgerät ab. Die aufzurufende Mediadatei sollte sich im Ordner /storage/emulated/0/Notifications/ befinden. Ist dies nicht der Fall kann man über das Attribut setNotifySndFilePath einen Pfad vorgeben.&lt;br /&gt;
* openApp - öffnet eine ausgewählte App. Attribut setOpenApp&lt;br /&gt;
* openURL - öffnet eine URL im Standardbrowser, sofern kein anderer Browser über das Attribut setOpenUrlBrowser ausgewählt wurde. Bsp: attr Tablet setOpenUrlBrowser de.ozerov.fully|de.ozerov.fully.MainActivity, das erste ist der Package Name und das zweite der Class Name&lt;br /&gt;
* setAPSSID - setzt die AccessPoint SSID um ein WLAN sleep zu verhindern&lt;br /&gt;
* setScreenOnForTimer ändert die Zeitdauer, die das Display an bleiben soll!&lt;br /&gt;
* screenFullscreen - on/off, (aktiviert/deaktiviert) den Vollbildmodus. Attribut setFullscreen&lt;br /&gt;
* screenLock - Sperrt den Bildschirm mit Pinabfrage. Attribut setScreenlockPIN - hier die Pin dafür eingeben. Erlaubt sind nur Zahlen. Es müßen mindestens 4, bis max 16 Zeichen verwendet werden.&lt;br /&gt;
* screenOrientation - Auto,Landscape,Portait, aktiviert die Bildschirmausrichtung (Automatisch,Horizontal,Vertikal). Attribut setScreenOrientation&lt;br /&gt;
* system - setzt Systembefehle ab (nur bei gerootetet Geräten). reboot,shutdown,airplanemodeON (kann nur aktiviert werden) Attribut root, in den Automagic Einstellungen muss &amp;quot;Root Funktion&amp;quot; gesetzt werden&lt;br /&gt;
* setNotifySndFilePath - setzt den korrekten Systempfad zur Notifydatei (default ist /storage/emulated/0/Notifications/&lt;br /&gt;
* setTtsMsgSpeed - setzt die Sprachgeschwindigkeit bei der Sprachausgabe(Werte zwischen 0.5 bis 4.0 in 0.5er Schritten) default ist 1.0&lt;br /&gt;
* setTtsMsgSpeed - setzt die Sprache bei der Sprachausgabe, de oder en (default ist de)&lt;br /&gt;
* setVolUpDownStep - setzt den Step für volumeUp und volumeDown&lt;br /&gt;
* setVolMax - setzt die maximale Volume Größe für den Slider&lt;br /&gt;
* setNotifyVolMax - setzt den maximalen Lautstärkewert für Benachrichtigungslautstärke für den Slider&lt;br /&gt;
* setRingSoundVolMax - setzt den maximalen Lautstärkewert für Klingellautstärke für den Slider&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Um openApp verwenden zu können, muss als Attribut der Package Name der App angegeben werden. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Um zwischen Bluetoothgeräten wechseln zu können, muss das Attribut setBluetoothDevice mit folgender Syntax gesetzt werden. attr &amp;lt;DEVICE&amp;gt; BTdeviceName1|MAC,BTDeviceName2|MAC Es muss zwingend darauf geachtet werden, dass beim BTdeviceName kein Leerzeichen vorhanden ist. Am besten zusammen oder mit Unterstrich. Bei der MAC ist darauf zu achten, dass wirklich nach jeder zweiten Zahl ein : steht&lt;br /&gt;
&lt;br /&gt;
** &#039;&#039;&#039;Beispiel: attr Nexus10Wohnzimmer setBluetoothDevice Logitech_BT_Adapter|AB:12:CD:34:EF:32,Anker_A3565|GH:56:IJ:78:KL:76&lt;br /&gt;
&lt;br /&gt;
=== state ===&lt;br /&gt;
* initialized - Ist der Status kurz nach einem define.&lt;br /&gt;
* active - die Geräteinstanz ist im aktiven Status.&lt;br /&gt;
* disabled - die Geräteinstanz wurde über das Attribut disable deaktiviert&lt;br /&gt;
&lt;br /&gt;
==Anwendungsbeispiele==&lt;br /&gt;
=== Lademanagement ===&lt;br /&gt;
Ich habe die Ladegeräte für meine Androidgeräte an Funkschaltsteckdosen. Ein DOIF schaltet bei unter 30% die Steckdose ein und bei über 90% wieder aus.&lt;br /&gt;
&lt;br /&gt;
Hier mal ein einfaches DOIF Beispiel für ein Lademanagment&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
... DOIF ([Nexus5Handy:powerLevel] &amp;lt; 30) (set LadenetzteilNexus5Handy:FILTER=STATE=off on) DOELSEIF ([Nexus5Handy:powerLevel] &amp;gt; 90) (set LadenetzteilNexus5Handy:FILTER=STATE=on off) DOELSE&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Wecker ===&lt;br /&gt;
Morgens lasse ich mich über mein Tablet im Schlafzimmer mit Musik wecken. Verwendet wird hierzu der wakeuptimer des RESIDENTS Modules. Das Abspielen stoppe ich dann von Hand. Danach erfolgt noch eine Ansage wie das Wetter gerade ist und wird.&lt;br /&gt;
&lt;br /&gt;
=== Mediacenter ===&lt;br /&gt;
Mein 10&amp;quot; Tablet im Wohnzimmer ist Mediaplayer für das Wohnzimmer mit Bluetoothlautsprechern. Die Lautstärke wird automatisch heruntergesetzt, wenn die Fritzbox einen Anruf auf das Wohnzimmer Handgerät signalisiert.&lt;br /&gt;
&lt;br /&gt;
=== Sprachbefehl - Abfragen von Zuständen diverser Sensoren ===&lt;br /&gt;
Wenn ich die Spracheingabe aktiviere und nach der Temperatur im Wohnzimmer frage, bekomme ich diese angesagt.&lt;br /&gt;
&lt;br /&gt;
Der Teil im Feld Daten ist ein klassisches ReadingsVal, halt nur ohne Komma und ohne Anführungszeichen&lt;br /&gt;
&lt;br /&gt;
WIRD GERADE ÜBERARBEITET&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Schaltbefehle vom Androidgerät an FHEM senden ===&lt;br /&gt;
Hierfür ist ein eigener Flow einzurichten. Wie das genau geht, verrät die Hilfe.&lt;br /&gt;
Um einen Schaltbefehl für FHEM zu erstellen, folgt nach dem Trigger eine Aktion als Script (Aktion Type: Script). Hier ist folgendes einzutragen:&lt;br /&gt;
&lt;br /&gt;
setcmd = &amp;quot;LichtWohnzimmerLampeRechts on&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;set&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In der ersten Zeile wird also der Schaltbefehl in der Variablem setcmd eingetragen und in der zweiten Zeile der FHEM Befehl in der Variablen fhemcmd.&lt;br /&gt;
&lt;br /&gt;
Danach müsst Ihr nur noch in einer weiteren Aktion den Flow &amp;quot;Send Data to AMADCommBridge&amp;quot; ausführen (Aktion Type: Flows ausführen). Die Aktion sollte bereits in Eurer Liste Vorhanden sein.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Screenshot_20160717-134948.png|200px]]&lt;br /&gt;
[[Datei:Screenshot 17.07.2016 1-50-27.png|200px]]&lt;br /&gt;
&lt;br /&gt;
Nun sollte Lampe1 angeschalten werden, wenn der Flow ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
=== Mit FHEM ein Flow ausführen ===&lt;br /&gt;
Es gibt den set Befehl userFlowRun. Als Argument übergibt man einen Flownamen. &#039;&#039;&#039;Achtung dieser Flowname darf keine Sonder oder Leerzeichen enthalten!!!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Schaltbefehle an FHEM senden mit Hilfe eines eigenen Flows ===&lt;br /&gt;
&lt;br /&gt;
== Lister aller Variablen für die AMADCommandBridge ==&lt;br /&gt;
fhemcmd Variable &lt;br /&gt;
* Wert &amp;quot;set&amp;quot; - Variable für den Schaltbefehl &#039;setcmd&#039;&lt;br /&gt;
* Wert &amp;quot;setreading&amp;quot; - Variable für die Readingswerte &#039;fhemdata&#039;&lt;br /&gt;
* &amp;quot;readingsval&amp;quot; - Variable für die Abfragewerte &#039;readingsvalcmd&#039;&lt;br /&gt;
* &amp;quot;fhemfunc&amp;quot; - Variable für den Funktionsnamen &#039;fhemsub&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele für Skriptinhalte:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Schalten einer Lampe&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
setcmd = &amp;quot;LichtWohnzimmerLampeRechts on&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;set&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Status eines Device abfragen&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
readingsvalcmd = &amp;quot;DEVICE READING DEFAULT&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;readingsval&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Rückgabevariable, die dann weiter verarbeitet werden kann, heißt &#039;&#039;&#039;respreadingsval&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Aufruf einer 99_myUtils Subroutine&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
fhemsub = &amp;quot;mySub()&amp;quot;; oder natürlich auch &amp;quot;mySub(&#039;was_auch_immer&#039;)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;fhemfunc&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Rückgabevariable, die dann weiter verarbeitet werden kann, heißt &#039;&#039;&#039;respfhemfunc&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Bekannte Meldungen/Hinweise/Probleme ==&lt;br /&gt;
&lt;br /&gt;
Wenn auf dem Android-Gerät die Fehlermeldung &#039;Accessibility service not running&#039; von Automagic kommt oder im FHEM das reading state  &#039;Flow Informations mit Fehler beendet&#039; steht, dann muss der Accessibility Service auf dem Android-Device aktiviert werden: Einstellungen --&amp;gt; Bedienungshilfen --&amp;gt; Automagic Premium. Hier muss der Schalter auf &#039;an&#039; stehen. Sollte dies der Fall sein, hilft u.U. ein kurzes Aus- und wieder Einschalten.&lt;br /&gt;
&lt;br /&gt;
Gerät wird oft als offline angezeigt und es können keine set Befehle abgesetzt werden.&lt;br /&gt;
Mit der AMAD Version 2.2 hielt eine neue Behandlung des deviceState Readings Einzug. Das Reading stellt nun den tatsächlichen Status des Gerätes gegenüber FHEM da. Bei vielen Android 6 Geräten kommt es aber auf Grund vom DeepSleep Modus zum Wegfall der WLAN Verbindung. Hier hilft die neue KeepAlive Funktion in AMAD. Dafür muß lediglich unter &lt;br /&gt;
* Einstellungen --&amp;gt; Akku --&amp;gt; oben auf die drei Punkte - Akku Leistungsoptimierung --&amp;gt; alle Apps und dann Automagic auswählen und &amp;quot;Nicht optimieren&amp;quot;&lt;br /&gt;
ausgewählt werden und in FHEM für das Device das Attribut setAPSSID gesetzt werden. Alles andere macht das Modul selbst.&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=AMAD&amp;diff=27712</id>
		<title>AMAD</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=AMAD&amp;diff=27712"/>
		<updated>2018-08-16T12:32:49Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: /* Lister aller Variablen für die AMADCommandBridge */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuern von Androidgeräten und Anzeige von bestimmten Informationen dieser Geräte&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Sonstige Systeme&lt;br /&gt;
|ModTechName=73_AMADCommBridge.pm, 74_AMADDevice.pm&lt;br /&gt;
|ModOwner=CoolTux &amp;lt;br /&amp;gt;([http://forum.fhem.de/index.php?action=profile;u=13684 Forum] / [[Benutzer:CoolTux|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= AMAD 4.2 [AMADNG] =&lt;br /&gt;
== 73_AMADCommBridge / 74_AMADDevice ==&lt;br /&gt;
&lt;br /&gt;
= Vorwort =&lt;br /&gt;
=== Warum AMADNG ===&lt;br /&gt;
Nach fast 6 Monaten Entwicklungszeit wurde die neuste AMAD Version am 24.07.2017 offiziell frei gegeben. Diesmal lagen mir mehrere Dinge am Herzen.&lt;br /&gt;
In erster Linie wollte ich eine softwareseitige Trennung der AMADCommBridge vom eigentlichen Android Device. Daher ist die neue Version ein zweistufiges Modul geworden.&lt;br /&gt;
Im Laufe der Entwicklung kamen auch andere Anforderungen hinzu, die ich dann fähig war umzusetzen. Eine dieser Anforderungen war eine einfachere und besser funktionierende Installation. Herausgekommen ist ein Android Installationsassistant.&lt;br /&gt;
Mit ihm wird auf einfache Art und Weise direkt per Sprachführung und Eingabedialogen Automagic für AMAD konfiguriert und das Device in FHEM automatisch erstellt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Es ist darauf zu achten, das Autocreate aktiv ist, da sonst kein Device mit Hilfe des Assistenten angelegt werden kann!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Vorstellung =&lt;br /&gt;
Dieses 2-stufige Modul liefert, &#039;&#039;&#039;in Verbindung mit der Android App Automagic&#039;&#039;&#039;, diverse Informationen von Android Geräten. &lt;br /&gt;
Die AndroidAPP Automagic (die nicht von mir stammt und 2.90 Euro kostet) funktioniert wie Tasker, ist aber bei weitem benutzungsfreundlicher.&lt;br /&gt;
&lt;br /&gt;
=== Features / Funktionen ===&lt;br /&gt;
Im Auslieferungszustand werden folgende Zustände dargestellt:&lt;br /&gt;
* installierte Android Version&lt;br /&gt;
* Zustand von Automagic auf dem Gerät&lt;br /&gt;
* Spracheingabe&lt;br /&gt;
* Bluetooth An/Aus&lt;br /&gt;
* Zustand einer definierten App (läuft aktiv im Vordergrund oder nicht?)&lt;br /&gt;
* verbundene Bluetoothgeräte, inklusive deren MAC Adresse&lt;br /&gt;
* aktuell abgespieltes Musikalbum des verwendeten Mediaplayers&lt;br /&gt;
* aktuell abgespielter Musikinterpret des verwendeten Mediaplayers&lt;br /&gt;
* aktuell abgespielter Musiktitel des verwendeten Mediaplayers&lt;br /&gt;
* Status des Androidgerätes - Online/Offline&lt;br /&gt;
* nächster Alarmtag&lt;br /&gt;
* nächste Alarmzeit&lt;br /&gt;
* Batteriestatus in %&lt;br /&gt;
* Ladestatus - Netztei angeschlossen / nicht angeschlossen&lt;br /&gt;
* Bildschirmstatus An/Aus&lt;br /&gt;
* Bildschirmhelligkeit&lt;br /&gt;
* Vollbildmodus An/Aus&lt;br /&gt;
* Bildschirmausrichtung Auto/Landscape/Portrait&lt;br /&gt;
* Standardlautstärke&lt;br /&gt;
* Media Lautstärke&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Mit etwas Einarbeitung können jegliche Informationen, die Automagic bereit stellt, in FHEM angezeigt werden. Hierzu bedarf es lediglich eines eigenen Flows, der seine Daten an die AMADCommBridge sendet. Das Modul gibt auch die Möglichkeit Androidgeräte zu steuern.&lt;br /&gt;
&lt;br /&gt;
= AMADCommBridge - Kommunikationsbrücke für alle AMAD Geräte =&lt;br /&gt;
Dieses Modul ist das Ausgangsmodul zur erfolgreichen Integration von Androidgeräten in FHEM. Es stellt ferner eine Verbindungsebene zwischen AMAD unterstützten Geräten und FHEM zur Verfügung. Alle Kommunikation zwischen AMAD Android und FHEM läuft über diese Schnittstelle.&lt;br /&gt;
Daher erfolgt die Ersteinrichtung eines AMAD Devices auch genau über diese Modulinstanz. &lt;br /&gt;
&lt;br /&gt;
Damit erfolgreich ein Androidgerät in FHEM eingerichtet werden kann, muss im ersten Schritt ein AMADCommBridge Device angelegt werden.&lt;br /&gt;
&lt;br /&gt;
=== Definition in FHEM ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; AMADCommBridge&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== Beispiel ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define AMADBridge AMADCommBridge&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Anweisung erstellt ein neues AMADCommBridge Device namens AMADBridge.&lt;br /&gt;
&lt;br /&gt;
Im folgenden muß lediglich das Flowset auf dem Android Gerät installiert werden und der Flow &#039;First Run Assistent&#039; ausgeführt werden. (einfach den Homebutton drücken)&lt;br /&gt;
Der Assistent geleitet dann durch die Einrichtung des AMAD Gerätes und sorgt dafür, dass am Ende des Installationsprozess das Androidgerät als AMAD Device in FHEM angelegt wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
* JSON_ERROR - JSON Fehlermeldung, die von Perl gemeldet wird&lt;br /&gt;
* JSON_ERROR_STRING - der String, der die JSON Fehlermeldung verursacht hat&lt;br /&gt;
* fhemServerIP - die Ip-Adresse des FHEM Servers; wird vom Modul auf Basis des JSON Strings vom Installationsassistenten gesetzt. Kann aber auch mittels set Befehles vom User gesetzt werden&lt;br /&gt;
* receiveFhemCommand - ist das Attribut fhemControlMode auf trigger gestellt, wird das Reading gesetzt sobald ein FHEM Befehl übersendet wird. Hierauf kann dann ein Notify triggern. Wird anstelle von trigger setControl als Wert für fhemControlMode eingestellt, wird das Reading nicht gesetzt sondern der set Befehl sofort ausgeführt.&lt;br /&gt;
* receiveVoiceCommand - wird die Sprachsteuerung von AMAD aktiviert (set DEVICE activateVoiceInput) so wird der letzte erkannten Sprachbefehle in dieses Reading geschrieben.&lt;br /&gt;
* receiveVoiceDevice - Name des Devices von wo aus der letzte erkannte Sprachbefehl gesendet wurde&lt;br /&gt;
* state - Status der Bridge, open, closed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
* allowFrom - Regexp der erlaubten IP-Adressen oder Hostnamen. Wenn dieses Attribut gesetzt wurde, werden ausschließlich Verbindungen von diesen Adressen akzeptiert. Achtung: falls allowfrom nicht gesetzt ist, und keine gütige allowed Instanz definiert ist, und die Gegenstelle eine nicht lokale Adresse hat, dann wird die Verbindung abgewiesen. Folgende Adressen werden als local betrachtet: IPV4: 127/8, 10/8, 192.168/16, 172.16/10, 169.254/16, IPV6: ::1, fe80/10&lt;br /&gt;
* debugJSON - wenn auf 1 gesetzt, werden JSON Fehlermeldungen in Readings geschrieben. Siehe hierzu JSON_ERROR* unter Readings&lt;br /&gt;
* fhemControlMode - steuert die zulässige Art der Steuerung von FHEM Devices. Es können über die Bridge auf 2 Arten FHEM-Devices angesteuert werden: per direktem FHEM-Befehl aus einem Flow heraus oder als Sprachbefehl mittels Sprachsteuerung (set DEVICE activateVoiceInput)&lt;br /&gt;
** trigger - ist der Wert trigger gesetzt, werden alle an die Bridge gesendeten FHEM set Befehle in das Reading receiveFhemCommand geschrieben und können so mittels notify ausgeführt werden. Sprachsteuerung ist möglich, es werden Readings receiveVoice* gesetzt. Auf dem Androidgerät können bei Sprachsteuerung mehrere Sprachbefehle mittels &amp;quot;und&amp;quot; verknüpft/aneinander gereiht werden. Bsp: schalte die Lichtszene Abends an und schalte den Fernseher an&lt;br /&gt;
** setControl - alle set Befehle, die mittels eines Flows über die Bridge gesendet werden, werden automatisch ausgeführt. Das Triggern eines Readings ist nicht nötig. Die Steuerung mittels Sprache verhält sich wie beim Wert trigger&lt;br /&gt;
** thirdPartControl - verhält sich wie trigger, bei der Sprachsteuerung ist jedoch ein Anreihen von Sprachbefehlen mittels &amp;quot;und&amp;quot; nicht möglich. Dient der Sprachsteuerung über Module anderer Modulautoren ((z.B. 39_TEERKO.pm)&lt;br /&gt;
&lt;br /&gt;
= AMADDevice - Automagic Android Device =&lt;br /&gt;
Dieses Modul liefert, in Verbindung mit der Android APP Automagic, diverse Informationen von Android Geräten. Die Android App Automagic (die nicht von mir stammt und 2.90 Euro kostet) funktioniert wie Tasker, ist aber bei weitem User freundlicher. &lt;br /&gt;
Mit etwas Einarbeitung können jegliche Informationen, die Automagic bereit stellt in FHEM angezeigt werden. Hierzu bedarf es lediglich eines eigenen Flows, der seine Daten an die AMADDeviceCommBridge sendet. Das Modul gibt auch die Möglichkeit Androidgeräte zu steuern. &lt;br /&gt;
Für all diese Aktionen und Informationen wird auf dem Androidgerät &amp;quot;Automagic&amp;quot; und ein so genannter Flow benötigt. Die App ist über den Google PlayStore zu beziehen. Das benötigte Flowset bekommt man aus dem FHEM Verzeichnis. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Wie genau verwendet man nun AMADDevice? ===&lt;br /&gt;
* sicherstellen, dass als allererstes die AMADCommBridge in FHEM definiert wurde&lt;br /&gt;
* installieren der App &amp;quot;Automagic Premium&amp;quot; aus dem PlayStore&lt;br /&gt;
* installieren des Flowset 74_AMADDeviceautomagicFlowset$VERSION.xml aus dem Ordner $INSTALLFHEM/FHEM/lib/ auf dem Androidgerät&lt;br /&gt;
* aktivieren des Installationsassistanten Flow in Automagic. Wenn man nun Automagic in den Hintergrund schickt, z.B. Hometaste drücken, startet der Assistant und legt automatisch ein Device für das Androidgerät an.&lt;br /&gt;
&lt;br /&gt;
=== Ein AMADDevice Gerät von Hand anlegen. ===&lt;br /&gt;
&lt;br /&gt;
Define&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; AMADDevice &amp;lt;IP-ADRESSE&amp;gt; &amp;lt;AMAD_ID&amp;gt; &amp;lt;REMOTESERVER&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Beispiel ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define WandTabletWohnzimmer AMADDevice 192.168.0.23 123456 Automagic&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Fall wird ein AMADDevice von Hand angelegt. Die AMAD_ID, hier 123456, muß auch exakt so als globale Variable in Automagic eingetragen sein.&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
* airplanemode - Status des Flugmodus&lt;br /&gt;
* androidVersion - aktuell installierte Androidversion&lt;br /&gt;
* automagicState - Statusmeldungen von der Automagic App &#039;&#039;&#039;(Voraussetzung Android &amp;gt;4.3). Ist Android größer 4.3 vorhanden und im Reading steht &amp;quot;wird nicht unterstützt&amp;quot;, muss in den Androideinstellungen unter Ton und Benachrichtigungen -&amp;gt; Benachrichtigungszugriff ein Haken für Automagic gesetzt werden&#039;&#039;&#039;&lt;br /&gt;
* batteryHealth - Zustand der Battery (1=unbekannt, 2=gut, 3=überhitzt, 4=tot, 5=Überspannung, 6=unbekannter Fehler, 7=kalt)&lt;br /&gt;
* batterytemperature - Temperatur der Batterie&lt;br /&gt;
* bluetooth - on/off, Bluetooth Status an oder aus&lt;br /&gt;
* checkActiveTask - Zustand einer zuvor definierten App. 0=nicht aktiv oder nicht aktiv im Vordergrund, 1=aktiv im Vordergrund, &#039;&#039;&#039;siehe Hinweis unten&#039;&#039;&#039;&lt;br /&gt;
* connectedBTdevices - eine Liste der verbundenen Gerät&lt;br /&gt;
* connectedBTdevicesMAC - eine Liste der MAC Adressen aller verbundender BT Geräte&lt;br /&gt;
* currentMusicAlbum - aktuell abgespieltes Musikalbum des verwendeten Mediaplayers&lt;br /&gt;
* currentMusicApp - aktuell verwendeter Mediaplayer (Amazon Music, Google Play Music, Google Play Video, Spotify, YouTube, TuneIn Player, Aldi Life Music)&lt;br /&gt;
* currentMusicArtist - aktuell abgespielter Musikinterpret des verwendeten Mediaplayers&lt;br /&gt;
* currentMusicIcon - Cover vom aktuell abgespielten Album &#039;&#039;&#039;Noch nicht fertig implementiert&#039;&#039;&#039;&lt;br /&gt;
* currentMusicState - Status des aktuellen/zuletzt verwendeten Mediaplayers&lt;br /&gt;
* currentMusicTrack - aktuell abgespielter Musiktitel des verwendeten Mediaplayers&lt;br /&gt;
* daydream - on/off, Daydream gestartet oder nicht&lt;br /&gt;
* deviceState - Status des Androidgerätes. unknown, online, offline.&lt;br /&gt;
* doNotDisturb - aktueller Status des Nicht-Stören-Modus&lt;br /&gt;
* dockingState - undocked/docked Status, ob sich das Gerät in einer Dockingstation befindet.&lt;br /&gt;
* flow_SetCommands - active/inactive, Status des SetCommands Flow&lt;br /&gt;
* flow_informations - active/inactive, Status des Informations Flow&lt;br /&gt;
* flowsetVersionAtDevice - aktuell installierte Flowsetversion auf dem Device&lt;br /&gt;
* incomingCallerName - Anrufername des eingehenden Anrufes&lt;br /&gt;
* incomingCallerNumber - Anrufernummer des eingehenden Anrufes&lt;br /&gt;
* incommingWhatsAppMessageFrom - letzte WhatsApp Nachricht&lt;br /&gt;
* incommingWhatsTelegramMessageFrom - letzte Telegram Nachricht&lt;br /&gt;
* intentRadioName - zuletzt gestreamter Intent Radio Name&lt;br /&gt;
* intentRadioState - Status des IntentRadio Players&lt;br /&gt;
* keyguardSet - 0/1 Displaysperre gesetzt 0=nein 1=ja, bedeutet nicht, dass sie gerade aktiv ist&lt;br /&gt;
* lastSetCommandError - letzte Fehlermeldung vom set Befehl&lt;br /&gt;
* lastSetCommandState - letzter Status vom set Befehl, Befehl erfolgreich/nicht erfolgreich gesendet&lt;br /&gt;
* lastStatusRequestError - letzte Fehlermeldung vom statusRequest Befehl&lt;br /&gt;
* lastStatusRequestState - letzter Status vom statusRequest Befehl, Befehl erfolgreich/nicht erfolgreich gesendet&lt;br /&gt;
* nextAlarmDay - aktiver Alarmtag&lt;br /&gt;
* nextAlarmState - aktueller Status des &amp;quot;Androidinternen&amp;quot; Weckers&lt;br /&gt;
* nextAlarmTime - aktive Alarmzeit&lt;br /&gt;
* powerLevel - Status der Batterie in %&lt;br /&gt;
* powerPlugged - Netzteil angeschlossen? 1=AC Adapter, 2=USB, 4=Kabellos 0=nicht eingesteckt&lt;br /&gt;
* screen - on locked/unlocked, off locked/unlocked gibt an ob der Bildschirm an oder aus ist und gleichzeitig gesperrt oder nicht gesperrt&lt;br /&gt;
* screenBrightness - Bildschirmhelligkeit von 0-255&lt;br /&gt;
* screenFullscreen - on/off, Vollbildmodus (An,Aus)&lt;br /&gt;
* screenOrientation - Landscape,Portrait, Bildschirmausrichtung (Horizontal,Vertikal)&lt;br /&gt;
* screenOrientationMode - auto/manual, Modus für die Ausrichtung (Automatisch, Manuell)&lt;br /&gt;
* state - aktueller Status&lt;br /&gt;
* userFlowState - aktueller Status eines Flows, festgelegt unter dem setUserFlowState Attribut&lt;br /&gt;
* volume - Media Lautstärkewert&lt;br /&gt;
* volumeNotification - Benachrichtigungs-Lautstärke&lt;br /&gt;
&lt;br /&gt;
Beim Reading checkActivTask muß zuvor der Packagename der zu prüfenden App als Attribut checkActiveTask angegeben werden. Beispiel: attr Nexus10Wohnzimmer checkActiveTask com.android.chrome für den Chrome Browser.&lt;br /&gt;
&lt;br /&gt;
=== Set ===&lt;br /&gt;
* activateVoiceInput - aktiviert die Spracheingabe&lt;br /&gt;
* bluetooth - on/off, aktiviert/deaktiviert Bluetooth&lt;br /&gt;
* clearNotificationBar - All,Automagic, löscht alle Meldungen oder nur die Automagic Meldungen in der Statusleiste&lt;br /&gt;
* closeCall - beendet einen laufenden Anruf&lt;br /&gt;
* currentFlowsetUpdate - führt ein Flowsetupdate auf dem Device durch&lt;br /&gt;
* doNotDisturb - schaltet den Nicht-Stören-Modus: always immer stören, never niemals stören, alarmClockOnly nur Wecker darf stören, onlyImportant nur wichtige Störungen&lt;br /&gt;
* installFlowSource - installiert einen Flow auf dem Device, &amp;lt;u&amp;gt;das XML File muss unter /tmp/ liegen und die Endung xml haben. &amp;lt;b&amp;gt;Bsp:&amp;lt;/b&amp;gt; set TabletWohnzimmer installFlowSource WlanUebwerwachen.xml&amp;lt;/u&amp;gt;&lt;br /&gt;
* mediaAmazonMusic - play, stop, next, back ,steuert den Amazon Musik Mediaplayer&lt;br /&gt;
* mediaGoogleMusic - play, stop, next, back ,steuert den Google Play Musik Mediaplayer&lt;br /&gt;
* mediaSpotifyMusic - play, stop, next, back ,steuert den Spotify Mediaplayer&lt;br /&gt;
* mediaTuneinRadio - play, stop, next, back ,steuert den TuneIn Radio Mediaplayer&lt;br /&gt;
* mediaAldiMusic - play, stop, next, back ,steuert den Aldi Musik Mediaplayer&lt;br /&gt;
* mediaAudible - play, stop, next, back ,steuert den Audible Mediaplayer&lt;br /&gt;
* mediaYouTube - play, stop, next, back ,steuert den YouTube Mediaplayer&lt;br /&gt;
* mediaVlcPlayer - play, stop, next, back ,steuert den VLC Mediaplayer&lt;br /&gt;
* nextAlarmTime - setzt die Alarmzeit. gilt aber nur innerhalb der nächsten 24 h&lt;br /&gt;
* openCall - ruft eine Nummer an und legt optional nach X Sekunden auf / set DEVICE openCall 01736458 10 / ruft die Nummer an und beendet den Anruf nach 10s&lt;br /&gt;
* screen - on/off/lock/unlock schaltet den Bildschirm ein/aus oder sperrt/entsperrt ihn&lt;br /&gt;
* screenBrightness - setzt die Bildschirmhelligkeit, von 0-255.&lt;br /&gt;
* screenMsg - versendet eine Bildschirmnachricht&lt;br /&gt;
* sendintent - sendet einen Intentstring Bsp: set $AMADDeviceDEVICE sendIntent org.smblott.intentradio.PLAY url http://stream.klassikradio.de/live/mp3-192/stream.klassikradio.de/play.m3u name Klassikradio, der erste Befehl ist die Aktion und der zweite das Extra. Es können immer zwei Extras mitgegeben werden.&lt;br /&gt;
* sendSMS - sendet eine SMS an eine bestimmte Telefonnummer. Bsp.: sendSMS Dies ist ein Test|555487263&lt;br /&gt;
* startDaydream - startet den Daydream&lt;br /&gt;
* statusRequest - Fordert einen neuen Statusreport beim Device an. Es können nicht von allen Readings per statusRequest die Daten geholt werden. Einige wenige geben nur bei Statusänderung ihren Status wieder.&lt;br /&gt;
* timer - setzt einen Timer innerhalb der als Standard definierten Clock-App auf dem Device. Es können nur Sekunden angegeben werden.&lt;br /&gt;
* ttsMsg - versendet eine Nachricht, die als Sprachnachricht ausgegeben wird&lt;br /&gt;
* userFlowState - aktiviert oder deaktiviert einen oder mehrere Flows,&#039;&#039;&#039;set Nexus7Wohnzimmer Badezimmer vorheizen:inactive oder set Nexus7Wohnzimmer Badezimmer vorheizen,Nachtlicht Steven:inactive&#039;&#039;&#039;&lt;br /&gt;
* vibrate - lässt das Androidgerät vibrieren&lt;br /&gt;
* volume - setzt die Medialautstärke. Entweder die internen Lautsprecher oder sofern angeschlossen die Bluetoothlautsprecher und per Klinkenstecker angeschlossene Lautsprecher, + oder - vor dem Wert reduziert die aktuelle Lautstärke um den Wert. Der maximale Sliderwert kann über das Attribut setVolMax geregelt werden.&lt;br /&gt;
* volumeUp - erhöht die Lautstärke um den angegeben Wert im entsprechenden Attribut. Ist kein Attribut angegeben wird per default 2 genommen.&lt;br /&gt;
* volumeDown - reduziert die Lautstärke um den angegeben Wert im entsprechenden Attribut. Ist kein Attribut angegeben wird per default 2 genommen.&lt;br /&gt;
* volumeNotification - setzt die Benachrichtigungslautstärke.&lt;br /&gt;
&lt;br /&gt;
==== Set abhängig von gesetzten Attributen ====&lt;br /&gt;
* changetoBtDevice - wechselt zu einem anderen Bluetooth Gerät. Attribut setBluetoothDevice muß gesetzt sein. Siehe Hinweis unten!&lt;br /&gt;
* notifySndFile - spielt die angegebene Mediadatei auf dem Androidgerät ab. Die aufzurufende Mediadatei sollte sich im Ordner /storage/emulated/0/Notifications/ befinden. Ist dies nicht der Fall kann man über das Attribut setNotifySndFilePath einen Pfad vorgeben.&lt;br /&gt;
* openApp - öffnet eine ausgewählte App. Attribut setOpenApp&lt;br /&gt;
* openURL - öffnet eine URL im Standardbrowser, sofern kein anderer Browser über das Attribut setOpenUrlBrowser ausgewählt wurde. Bsp: attr Tablet setOpenUrlBrowser de.ozerov.fully|de.ozerov.fully.MainActivity, das erste ist der Package Name und das zweite der Class Name&lt;br /&gt;
* setAPSSID - setzt die AccessPoint SSID um ein WLAN sleep zu verhindern&lt;br /&gt;
* setScreenOnForTimer ändert die Zeitdauer, die das Display an bleiben soll!&lt;br /&gt;
* screenFullscreen - on/off, (aktiviert/deaktiviert) den Vollbildmodus. Attribut setFullscreen&lt;br /&gt;
* screenLock - Sperrt den Bildschirm mit Pinabfrage. Attribut setScreenlockPIN - hier die Pin dafür eingeben. Erlaubt sind nur Zahlen. Es müßen mindestens 4, bis max 16 Zeichen verwendet werden.&lt;br /&gt;
* screenOrientation - Auto,Landscape,Portait, aktiviert die Bildschirmausrichtung (Automatisch,Horizontal,Vertikal). Attribut setScreenOrientation&lt;br /&gt;
* system - setzt Systembefehle ab (nur bei gerootetet Geräten). reboot,shutdown,airplanemodeON (kann nur aktiviert werden) Attribut root, in den Automagic Einstellungen muss &amp;quot;Root Funktion&amp;quot; gesetzt werden&lt;br /&gt;
* setNotifySndFilePath - setzt den korrekten Systempfad zur Notifydatei (default ist /storage/emulated/0/Notifications/&lt;br /&gt;
* setTtsMsgSpeed - setzt die Sprachgeschwindigkeit bei der Sprachausgabe(Werte zwischen 0.5 bis 4.0 in 0.5er Schritten) default ist 1.0&lt;br /&gt;
* setTtsMsgSpeed - setzt die Sprache bei der Sprachausgabe, de oder en (default ist de)&lt;br /&gt;
* setVolUpDownStep - setzt den Step für volumeUp und volumeDown&lt;br /&gt;
* setVolMax - setzt die maximale Volume Größe für den Slider&lt;br /&gt;
* setNotifyVolMax - setzt den maximalen Lautstärkewert für Benachrichtigungslautstärke für den Slider&lt;br /&gt;
* setRingSoundVolMax - setzt den maximalen Lautstärkewert für Klingellautstärke für den Slider&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Um openApp verwenden zu können, muss als Attribut der Package Name der App angegeben werden. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Um zwischen Bluetoothgeräten wechseln zu können, muss das Attribut setBluetoothDevice mit folgender Syntax gesetzt werden. attr &amp;lt;DEVICE&amp;gt; BTdeviceName1|MAC,BTDeviceName2|MAC Es muss zwingend darauf geachtet werden, dass beim BTdeviceName kein Leerzeichen vorhanden ist. Am besten zusammen oder mit Unterstrich. Bei der MAC ist darauf zu achten, dass wirklich nach jeder zweiten Zahl ein : steht&lt;br /&gt;
&lt;br /&gt;
** &#039;&#039;&#039;Beispiel: attr Nexus10Wohnzimmer setBluetoothDevice Logitech_BT_Adapter|AB:12:CD:34:EF:32,Anker_A3565|GH:56:IJ:78:KL:76&lt;br /&gt;
&lt;br /&gt;
=== state ===&lt;br /&gt;
* initialized - Ist der Status kurz nach einem define.&lt;br /&gt;
* active - die Geräteinstanz ist im aktiven Status.&lt;br /&gt;
* disabled - die Geräteinstanz wurde über das Attribut disable deaktiviert&lt;br /&gt;
&lt;br /&gt;
==Anwendungsbeispiele==&lt;br /&gt;
=== Lademanagement ===&lt;br /&gt;
Ich habe die Ladegeräte für meine Androidgeräte an Funkschaltsteckdosen. Ein DOIF schaltet bei unter 30% die Steckdose ein und bei über 90% wieder aus.&lt;br /&gt;
&lt;br /&gt;
Hier mal ein einfaches DOIF Beispiel für ein Lademanagment&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
... DOIF ([Nexus5Handy:powerLevel] &amp;lt; 30) (set LadenetzteilNexus5Handy:FILTER=STATE=off on) DOELSEIF ([Nexus5Handy:powerLevel] &amp;gt; 90) (set LadenetzteilNexus5Handy:FILTER=STATE=on off) DOELSE&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Wecker ===&lt;br /&gt;
Morgens lasse ich mich über mein Tablet im Schlafzimmer mit Musik wecken. Verwendet wird hierzu der wakeuptimer des RESIDENTS Modules. Das Abspielen stoppe ich dann von Hand. Danach erfolgt noch eine Ansage wie das Wetter gerade ist und wird.&lt;br /&gt;
&lt;br /&gt;
=== Mediacenter ===&lt;br /&gt;
Mein 10&amp;quot; Tablet im Wohnzimmer ist Mediaplayer für das Wohnzimmer mit Bluetoothlautsprechern. Die Lautstärke wird automatisch heruntergesetzt, wenn die Fritzbox einen Anruf auf das Wohnzimmer Handgerät signalisiert.&lt;br /&gt;
&lt;br /&gt;
=== Sprachbefehl - Abfragen von Zuständen diverser Sensoren ===&lt;br /&gt;
Wenn ich die Spracheingabe aktiviere und nach der Temperatur im Wohnzimmer frage, bekomme ich diese angesagt.&lt;br /&gt;
&lt;br /&gt;
Der Teil im Feld Daten ist ein klassisches ReadingsVal, halt nur ohne Komma und ohne Anführungszeichen&lt;br /&gt;
&lt;br /&gt;
WIRD GERADE ÜBERARBEITET&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Schaltbefehle vom Androidgerät an FHEM senden ===&lt;br /&gt;
Hierfür ist ein eigener Flow einzurichten. Wie das genau geht, verrät die Hilfe.&lt;br /&gt;
Um einen Schaltbefehl für FHEM zu erstellen, folgt nach dem Trigger eine Aktion als Script (Aktion Type: Script). Hier ist folgendes einzutragen:&lt;br /&gt;
&lt;br /&gt;
setcmd = &amp;quot;LichtWohnzimmerLampeRechts on&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;set&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In der ersten Zeile wird also der Schaltbefehl in der Variablem setcmd eingetragen und in der zweiten Zeile der FHEM Befehl in der Variablen fhemcmd.&lt;br /&gt;
&lt;br /&gt;
Danach müsst Ihr nur noch in einer weiteren Aktion den Flow &amp;quot;Send Data to AMADCommBridge&amp;quot; ausführen (Aktion Type: Flows ausführen). Die Aktion sollte bereits in Eurer Liste Vorhanden sein.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Screenshot_20160717-134948.png|200px]]&lt;br /&gt;
[[Datei:Screenshot 17.07.2016 1-50-27.png|200px]]&lt;br /&gt;
&lt;br /&gt;
Nun sollte Lampe1 angeschalten werden, wenn der Flow ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
=== Mit FHEM ein Flow ausführen ===&lt;br /&gt;
Es gibt den set Befehl userFlowRun. Als Argument übergibt man einen Flownamen. &#039;&#039;&#039;Achtung dieser Flowname darf keine Sonder oder Leerzeichen enthalten!!!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Schaltbefehle an FHEM senden mit Hilfe eines eigenen Flows&lt;br /&gt;
== Lister aller Variablen für die AMADCommandBridge ==&lt;br /&gt;
fhemcmd Variable &lt;br /&gt;
* Wert &amp;quot;set&amp;quot; - Variable für den Schaltbefehl &#039;setcmd&#039;&lt;br /&gt;
* Wert &amp;quot;setreading&amp;quot; - Variable für die Readingswerte &#039;fhemdata&#039;&lt;br /&gt;
* &amp;quot;readingsval&amp;quot; - Variable für die Abfragewerte &#039;readingsvalcmd&#039;&lt;br /&gt;
* &amp;quot;fhemfunc&amp;quot; - Variable für den Funktionsnamen &#039;fhemsub&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele für Skriptinhalte:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Schalten einer Lampe&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
setcmd = &amp;quot;LichtWohnzimmerLampeRechts on&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;set&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Status eines Device abfragen&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
readingsvalcmd = &amp;quot;DEVICE READING DEFAULT&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;readingsval&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Rückgabevariable, die dann weiter verarbeitet werden kann, heißt &#039;&#039;&#039;respreadingsval&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Aufruf einer 99_myUtils Subroutine&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
fhemsub = &amp;quot;mySub()&amp;quot;; oder natürlich auch &amp;quot;mySub(&#039;was_auch_immer&#039;)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;fhemfunc&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Rückgabevariable, die dann weiter verarbeitet werden kann, heißt &#039;&#039;&#039;respfhemfunc&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Bekannte Meldungen/Hinweise/Probleme ==&lt;br /&gt;
&lt;br /&gt;
Wenn auf dem Android-Gerät die Fehlermeldung &#039;Accessibility service not running&#039; von Automagic kommt oder im FHEM das reading state  &#039;Flow Informations mit Fehler beendet&#039; steht, dann muss der Accessibility Service auf dem Android-Device aktiviert werden: Einstellungen --&amp;gt; Bedienungshilfen --&amp;gt; Automagic Premium. Hier muss der Schalter auf &#039;an&#039; stehen. Sollte dies der Fall sein, hilft u.U. ein kurzes Aus- und wieder Einschalten.&lt;br /&gt;
&lt;br /&gt;
Gerät wird oft als offline angezeigt und es können keine set Befehle abgesetzt werden.&lt;br /&gt;
Mit der AMAD Version 2.2 hielt eine neue Behandlung des deviceState Readings Einzug. Das Reading stellt nun den tatsächlichen Status des Gerätes gegenüber FHEM da. Bei vielen Android 6 Geräten kommt es aber auf Grund vom DeepSleep Modus zum Wegfall der WLAN Verbindung. Hier hilft die neue KeepAlive Funktion in AMAD. Dafür muß lediglich unter &lt;br /&gt;
* Einstellungen --&amp;gt; Akku --&amp;gt; oben auf die drei Punkte - Akku Leistungsoptimierung --&amp;gt; alle Apps und dann Automagic auswählen und &amp;quot;Nicht optimieren&amp;quot;&lt;br /&gt;
ausgewählt werden und in FHEM für das Device das Attribut setAPSSID gesetzt werden. Alles andere macht das Modul selbst.&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=AMAD&amp;diff=27711</id>
		<title>AMAD</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=AMAD&amp;diff=27711"/>
		<updated>2018-08-16T12:31:39Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: /* Mit FHEM ein Flow ausführen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuern von Androidgeräten und Anzeige von bestimmten Informationen dieser Geräte&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Sonstige Systeme&lt;br /&gt;
|ModTechName=73_AMADCommBridge.pm, 74_AMADDevice.pm&lt;br /&gt;
|ModOwner=CoolTux &amp;lt;br /&amp;gt;([http://forum.fhem.de/index.php?action=profile;u=13684 Forum] / [[Benutzer:CoolTux|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= AMAD 4.2 [AMADNG] =&lt;br /&gt;
== 73_AMADCommBridge / 74_AMADDevice ==&lt;br /&gt;
&lt;br /&gt;
= Vorwort =&lt;br /&gt;
=== Warum AMADNG ===&lt;br /&gt;
Nach fast 6 Monaten Entwicklungszeit wurde die neuste AMAD Version am 24.07.2017 offiziell frei gegeben. Diesmal lagen mir mehrere Dinge am Herzen.&lt;br /&gt;
In erster Linie wollte ich eine softwareseitige Trennung der AMADCommBridge vom eigentlichen Android Device. Daher ist die neue Version ein zweistufiges Modul geworden.&lt;br /&gt;
Im Laufe der Entwicklung kamen auch andere Anforderungen hinzu, die ich dann fähig war umzusetzen. Eine dieser Anforderungen war eine einfachere und besser funktionierende Installation. Herausgekommen ist ein Android Installationsassistant.&lt;br /&gt;
Mit ihm wird auf einfache Art und Weise direkt per Sprachführung und Eingabedialogen Automagic für AMAD konfiguriert und das Device in FHEM automatisch erstellt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Es ist darauf zu achten, das Autocreate aktiv ist, da sonst kein Device mit Hilfe des Assistenten angelegt werden kann!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Vorstellung =&lt;br /&gt;
Dieses 2-stufige Modul liefert, &#039;&#039;&#039;in Verbindung mit der Android App Automagic&#039;&#039;&#039;, diverse Informationen von Android Geräten. &lt;br /&gt;
Die AndroidAPP Automagic (die nicht von mir stammt und 2.90 Euro kostet) funktioniert wie Tasker, ist aber bei weitem benutzungsfreundlicher.&lt;br /&gt;
&lt;br /&gt;
=== Features / Funktionen ===&lt;br /&gt;
Im Auslieferungszustand werden folgende Zustände dargestellt:&lt;br /&gt;
* installierte Android Version&lt;br /&gt;
* Zustand von Automagic auf dem Gerät&lt;br /&gt;
* Spracheingabe&lt;br /&gt;
* Bluetooth An/Aus&lt;br /&gt;
* Zustand einer definierten App (läuft aktiv im Vordergrund oder nicht?)&lt;br /&gt;
* verbundene Bluetoothgeräte, inklusive deren MAC Adresse&lt;br /&gt;
* aktuell abgespieltes Musikalbum des verwendeten Mediaplayers&lt;br /&gt;
* aktuell abgespielter Musikinterpret des verwendeten Mediaplayers&lt;br /&gt;
* aktuell abgespielter Musiktitel des verwendeten Mediaplayers&lt;br /&gt;
* Status des Androidgerätes - Online/Offline&lt;br /&gt;
* nächster Alarmtag&lt;br /&gt;
* nächste Alarmzeit&lt;br /&gt;
* Batteriestatus in %&lt;br /&gt;
* Ladestatus - Netztei angeschlossen / nicht angeschlossen&lt;br /&gt;
* Bildschirmstatus An/Aus&lt;br /&gt;
* Bildschirmhelligkeit&lt;br /&gt;
* Vollbildmodus An/Aus&lt;br /&gt;
* Bildschirmausrichtung Auto/Landscape/Portrait&lt;br /&gt;
* Standardlautstärke&lt;br /&gt;
* Media Lautstärke&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Mit etwas Einarbeitung können jegliche Informationen, die Automagic bereit stellt, in FHEM angezeigt werden. Hierzu bedarf es lediglich eines eigenen Flows, der seine Daten an die AMADCommBridge sendet. Das Modul gibt auch die Möglichkeit Androidgeräte zu steuern.&lt;br /&gt;
&lt;br /&gt;
= AMADCommBridge - Kommunikationsbrücke für alle AMAD Geräte =&lt;br /&gt;
Dieses Modul ist das Ausgangsmodul zur erfolgreichen Integration von Androidgeräten in FHEM. Es stellt ferner eine Verbindungsebene zwischen AMAD unterstützten Geräten und FHEM zur Verfügung. Alle Kommunikation zwischen AMAD Android und FHEM läuft über diese Schnittstelle.&lt;br /&gt;
Daher erfolgt die Ersteinrichtung eines AMAD Devices auch genau über diese Modulinstanz. &lt;br /&gt;
&lt;br /&gt;
Damit erfolgreich ein Androidgerät in FHEM eingerichtet werden kann, muss im ersten Schritt ein AMADCommBridge Device angelegt werden.&lt;br /&gt;
&lt;br /&gt;
=== Definition in FHEM ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; AMADCommBridge&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== Beispiel ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define AMADBridge AMADCommBridge&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Anweisung erstellt ein neues AMADCommBridge Device namens AMADBridge.&lt;br /&gt;
&lt;br /&gt;
Im folgenden muß lediglich das Flowset auf dem Android Gerät installiert werden und der Flow &#039;First Run Assistent&#039; ausgeführt werden. (einfach den Homebutton drücken)&lt;br /&gt;
Der Assistent geleitet dann durch die Einrichtung des AMAD Gerätes und sorgt dafür, dass am Ende des Installationsprozess das Androidgerät als AMAD Device in FHEM angelegt wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
* JSON_ERROR - JSON Fehlermeldung, die von Perl gemeldet wird&lt;br /&gt;
* JSON_ERROR_STRING - der String, der die JSON Fehlermeldung verursacht hat&lt;br /&gt;
* fhemServerIP - die Ip-Adresse des FHEM Servers; wird vom Modul auf Basis des JSON Strings vom Installationsassistenten gesetzt. Kann aber auch mittels set Befehles vom User gesetzt werden&lt;br /&gt;
* receiveFhemCommand - ist das Attribut fhemControlMode auf trigger gestellt, wird das Reading gesetzt sobald ein FHEM Befehl übersendet wird. Hierauf kann dann ein Notify triggern. Wird anstelle von trigger setControl als Wert für fhemControlMode eingestellt, wird das Reading nicht gesetzt sondern der set Befehl sofort ausgeführt.&lt;br /&gt;
* receiveVoiceCommand - wird die Sprachsteuerung von AMAD aktiviert (set DEVICE activateVoiceInput) so wird der letzte erkannten Sprachbefehle in dieses Reading geschrieben.&lt;br /&gt;
* receiveVoiceDevice - Name des Devices von wo aus der letzte erkannte Sprachbefehl gesendet wurde&lt;br /&gt;
* state - Status der Bridge, open, closed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
* allowFrom - Regexp der erlaubten IP-Adressen oder Hostnamen. Wenn dieses Attribut gesetzt wurde, werden ausschließlich Verbindungen von diesen Adressen akzeptiert. Achtung: falls allowfrom nicht gesetzt ist, und keine gütige allowed Instanz definiert ist, und die Gegenstelle eine nicht lokale Adresse hat, dann wird die Verbindung abgewiesen. Folgende Adressen werden als local betrachtet: IPV4: 127/8, 10/8, 192.168/16, 172.16/10, 169.254/16, IPV6: ::1, fe80/10&lt;br /&gt;
* debugJSON - wenn auf 1 gesetzt, werden JSON Fehlermeldungen in Readings geschrieben. Siehe hierzu JSON_ERROR* unter Readings&lt;br /&gt;
* fhemControlMode - steuert die zulässige Art der Steuerung von FHEM Devices. Es können über die Bridge auf 2 Arten FHEM-Devices angesteuert werden: per direktem FHEM-Befehl aus einem Flow heraus oder als Sprachbefehl mittels Sprachsteuerung (set DEVICE activateVoiceInput)&lt;br /&gt;
** trigger - ist der Wert trigger gesetzt, werden alle an die Bridge gesendeten FHEM set Befehle in das Reading receiveFhemCommand geschrieben und können so mittels notify ausgeführt werden. Sprachsteuerung ist möglich, es werden Readings receiveVoice* gesetzt. Auf dem Androidgerät können bei Sprachsteuerung mehrere Sprachbefehle mittels &amp;quot;und&amp;quot; verknüpft/aneinander gereiht werden. Bsp: schalte die Lichtszene Abends an und schalte den Fernseher an&lt;br /&gt;
** setControl - alle set Befehle, die mittels eines Flows über die Bridge gesendet werden, werden automatisch ausgeführt. Das Triggern eines Readings ist nicht nötig. Die Steuerung mittels Sprache verhält sich wie beim Wert trigger&lt;br /&gt;
** thirdPartControl - verhält sich wie trigger, bei der Sprachsteuerung ist jedoch ein Anreihen von Sprachbefehlen mittels &amp;quot;und&amp;quot; nicht möglich. Dient der Sprachsteuerung über Module anderer Modulautoren ((z.B. 39_TEERKO.pm)&lt;br /&gt;
&lt;br /&gt;
= AMADDevice - Automagic Android Device =&lt;br /&gt;
Dieses Modul liefert, in Verbindung mit der Android APP Automagic, diverse Informationen von Android Geräten. Die Android App Automagic (die nicht von mir stammt und 2.90 Euro kostet) funktioniert wie Tasker, ist aber bei weitem User freundlicher. &lt;br /&gt;
Mit etwas Einarbeitung können jegliche Informationen, die Automagic bereit stellt in FHEM angezeigt werden. Hierzu bedarf es lediglich eines eigenen Flows, der seine Daten an die AMADDeviceCommBridge sendet. Das Modul gibt auch die Möglichkeit Androidgeräte zu steuern. &lt;br /&gt;
Für all diese Aktionen und Informationen wird auf dem Androidgerät &amp;quot;Automagic&amp;quot; und ein so genannter Flow benötigt. Die App ist über den Google PlayStore zu beziehen. Das benötigte Flowset bekommt man aus dem FHEM Verzeichnis. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Wie genau verwendet man nun AMADDevice? ===&lt;br /&gt;
* sicherstellen, dass als allererstes die AMADCommBridge in FHEM definiert wurde&lt;br /&gt;
* installieren der App &amp;quot;Automagic Premium&amp;quot; aus dem PlayStore&lt;br /&gt;
* installieren des Flowset 74_AMADDeviceautomagicFlowset$VERSION.xml aus dem Ordner $INSTALLFHEM/FHEM/lib/ auf dem Androidgerät&lt;br /&gt;
* aktivieren des Installationsassistanten Flow in Automagic. Wenn man nun Automagic in den Hintergrund schickt, z.B. Hometaste drücken, startet der Assistant und legt automatisch ein Device für das Androidgerät an.&lt;br /&gt;
&lt;br /&gt;
=== Ein AMADDevice Gerät von Hand anlegen. ===&lt;br /&gt;
&lt;br /&gt;
Define&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; AMADDevice &amp;lt;IP-ADRESSE&amp;gt; &amp;lt;AMAD_ID&amp;gt; &amp;lt;REMOTESERVER&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Beispiel ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define WandTabletWohnzimmer AMADDevice 192.168.0.23 123456 Automagic&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Fall wird ein AMADDevice von Hand angelegt. Die AMAD_ID, hier 123456, muß auch exakt so als globale Variable in Automagic eingetragen sein.&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
* airplanemode - Status des Flugmodus&lt;br /&gt;
* androidVersion - aktuell installierte Androidversion&lt;br /&gt;
* automagicState - Statusmeldungen von der Automagic App &#039;&#039;&#039;(Voraussetzung Android &amp;gt;4.3). Ist Android größer 4.3 vorhanden und im Reading steht &amp;quot;wird nicht unterstützt&amp;quot;, muss in den Androideinstellungen unter Ton und Benachrichtigungen -&amp;gt; Benachrichtigungszugriff ein Haken für Automagic gesetzt werden&#039;&#039;&#039;&lt;br /&gt;
* batteryHealth - Zustand der Battery (1=unbekannt, 2=gut, 3=überhitzt, 4=tot, 5=Überspannung, 6=unbekannter Fehler, 7=kalt)&lt;br /&gt;
* batterytemperature - Temperatur der Batterie&lt;br /&gt;
* bluetooth - on/off, Bluetooth Status an oder aus&lt;br /&gt;
* checkActiveTask - Zustand einer zuvor definierten App. 0=nicht aktiv oder nicht aktiv im Vordergrund, 1=aktiv im Vordergrund, &#039;&#039;&#039;siehe Hinweis unten&#039;&#039;&#039;&lt;br /&gt;
* connectedBTdevices - eine Liste der verbundenen Gerät&lt;br /&gt;
* connectedBTdevicesMAC - eine Liste der MAC Adressen aller verbundender BT Geräte&lt;br /&gt;
* currentMusicAlbum - aktuell abgespieltes Musikalbum des verwendeten Mediaplayers&lt;br /&gt;
* currentMusicApp - aktuell verwendeter Mediaplayer (Amazon Music, Google Play Music, Google Play Video, Spotify, YouTube, TuneIn Player, Aldi Life Music)&lt;br /&gt;
* currentMusicArtist - aktuell abgespielter Musikinterpret des verwendeten Mediaplayers&lt;br /&gt;
* currentMusicIcon - Cover vom aktuell abgespielten Album &#039;&#039;&#039;Noch nicht fertig implementiert&#039;&#039;&#039;&lt;br /&gt;
* currentMusicState - Status des aktuellen/zuletzt verwendeten Mediaplayers&lt;br /&gt;
* currentMusicTrack - aktuell abgespielter Musiktitel des verwendeten Mediaplayers&lt;br /&gt;
* daydream - on/off, Daydream gestartet oder nicht&lt;br /&gt;
* deviceState - Status des Androidgerätes. unknown, online, offline.&lt;br /&gt;
* doNotDisturb - aktueller Status des Nicht-Stören-Modus&lt;br /&gt;
* dockingState - undocked/docked Status, ob sich das Gerät in einer Dockingstation befindet.&lt;br /&gt;
* flow_SetCommands - active/inactive, Status des SetCommands Flow&lt;br /&gt;
* flow_informations - active/inactive, Status des Informations Flow&lt;br /&gt;
* flowsetVersionAtDevice - aktuell installierte Flowsetversion auf dem Device&lt;br /&gt;
* incomingCallerName - Anrufername des eingehenden Anrufes&lt;br /&gt;
* incomingCallerNumber - Anrufernummer des eingehenden Anrufes&lt;br /&gt;
* incommingWhatsAppMessageFrom - letzte WhatsApp Nachricht&lt;br /&gt;
* incommingWhatsTelegramMessageFrom - letzte Telegram Nachricht&lt;br /&gt;
* intentRadioName - zuletzt gestreamter Intent Radio Name&lt;br /&gt;
* intentRadioState - Status des IntentRadio Players&lt;br /&gt;
* keyguardSet - 0/1 Displaysperre gesetzt 0=nein 1=ja, bedeutet nicht, dass sie gerade aktiv ist&lt;br /&gt;
* lastSetCommandError - letzte Fehlermeldung vom set Befehl&lt;br /&gt;
* lastSetCommandState - letzter Status vom set Befehl, Befehl erfolgreich/nicht erfolgreich gesendet&lt;br /&gt;
* lastStatusRequestError - letzte Fehlermeldung vom statusRequest Befehl&lt;br /&gt;
* lastStatusRequestState - letzter Status vom statusRequest Befehl, Befehl erfolgreich/nicht erfolgreich gesendet&lt;br /&gt;
* nextAlarmDay - aktiver Alarmtag&lt;br /&gt;
* nextAlarmState - aktueller Status des &amp;quot;Androidinternen&amp;quot; Weckers&lt;br /&gt;
* nextAlarmTime - aktive Alarmzeit&lt;br /&gt;
* powerLevel - Status der Batterie in %&lt;br /&gt;
* powerPlugged - Netzteil angeschlossen? 1=AC Adapter, 2=USB, 4=Kabellos 0=nicht eingesteckt&lt;br /&gt;
* screen - on locked/unlocked, off locked/unlocked gibt an ob der Bildschirm an oder aus ist und gleichzeitig gesperrt oder nicht gesperrt&lt;br /&gt;
* screenBrightness - Bildschirmhelligkeit von 0-255&lt;br /&gt;
* screenFullscreen - on/off, Vollbildmodus (An,Aus)&lt;br /&gt;
* screenOrientation - Landscape,Portrait, Bildschirmausrichtung (Horizontal,Vertikal)&lt;br /&gt;
* screenOrientationMode - auto/manual, Modus für die Ausrichtung (Automatisch, Manuell)&lt;br /&gt;
* state - aktueller Status&lt;br /&gt;
* userFlowState - aktueller Status eines Flows, festgelegt unter dem setUserFlowState Attribut&lt;br /&gt;
* volume - Media Lautstärkewert&lt;br /&gt;
* volumeNotification - Benachrichtigungs-Lautstärke&lt;br /&gt;
&lt;br /&gt;
Beim Reading checkActivTask muß zuvor der Packagename der zu prüfenden App als Attribut checkActiveTask angegeben werden. Beispiel: attr Nexus10Wohnzimmer checkActiveTask com.android.chrome für den Chrome Browser.&lt;br /&gt;
&lt;br /&gt;
=== Set ===&lt;br /&gt;
* activateVoiceInput - aktiviert die Spracheingabe&lt;br /&gt;
* bluetooth - on/off, aktiviert/deaktiviert Bluetooth&lt;br /&gt;
* clearNotificationBar - All,Automagic, löscht alle Meldungen oder nur die Automagic Meldungen in der Statusleiste&lt;br /&gt;
* closeCall - beendet einen laufenden Anruf&lt;br /&gt;
* currentFlowsetUpdate - führt ein Flowsetupdate auf dem Device durch&lt;br /&gt;
* doNotDisturb - schaltet den Nicht-Stören-Modus: always immer stören, never niemals stören, alarmClockOnly nur Wecker darf stören, onlyImportant nur wichtige Störungen&lt;br /&gt;
* installFlowSource - installiert einen Flow auf dem Device, &amp;lt;u&amp;gt;das XML File muss unter /tmp/ liegen und die Endung xml haben. &amp;lt;b&amp;gt;Bsp:&amp;lt;/b&amp;gt; set TabletWohnzimmer installFlowSource WlanUebwerwachen.xml&amp;lt;/u&amp;gt;&lt;br /&gt;
* mediaAmazonMusic - play, stop, next, back ,steuert den Amazon Musik Mediaplayer&lt;br /&gt;
* mediaGoogleMusic - play, stop, next, back ,steuert den Google Play Musik Mediaplayer&lt;br /&gt;
* mediaSpotifyMusic - play, stop, next, back ,steuert den Spotify Mediaplayer&lt;br /&gt;
* mediaTuneinRadio - play, stop, next, back ,steuert den TuneIn Radio Mediaplayer&lt;br /&gt;
* mediaAldiMusic - play, stop, next, back ,steuert den Aldi Musik Mediaplayer&lt;br /&gt;
* mediaAudible - play, stop, next, back ,steuert den Audible Mediaplayer&lt;br /&gt;
* mediaYouTube - play, stop, next, back ,steuert den YouTube Mediaplayer&lt;br /&gt;
* mediaVlcPlayer - play, stop, next, back ,steuert den VLC Mediaplayer&lt;br /&gt;
* nextAlarmTime - setzt die Alarmzeit. gilt aber nur innerhalb der nächsten 24 h&lt;br /&gt;
* openCall - ruft eine Nummer an und legt optional nach X Sekunden auf / set DEVICE openCall 01736458 10 / ruft die Nummer an und beendet den Anruf nach 10s&lt;br /&gt;
* screen - on/off/lock/unlock schaltet den Bildschirm ein/aus oder sperrt/entsperrt ihn&lt;br /&gt;
* screenBrightness - setzt die Bildschirmhelligkeit, von 0-255.&lt;br /&gt;
* screenMsg - versendet eine Bildschirmnachricht&lt;br /&gt;
* sendintent - sendet einen Intentstring Bsp: set $AMADDeviceDEVICE sendIntent org.smblott.intentradio.PLAY url http://stream.klassikradio.de/live/mp3-192/stream.klassikradio.de/play.m3u name Klassikradio, der erste Befehl ist die Aktion und der zweite das Extra. Es können immer zwei Extras mitgegeben werden.&lt;br /&gt;
* sendSMS - sendet eine SMS an eine bestimmte Telefonnummer. Bsp.: sendSMS Dies ist ein Test|555487263&lt;br /&gt;
* startDaydream - startet den Daydream&lt;br /&gt;
* statusRequest - Fordert einen neuen Statusreport beim Device an. Es können nicht von allen Readings per statusRequest die Daten geholt werden. Einige wenige geben nur bei Statusänderung ihren Status wieder.&lt;br /&gt;
* timer - setzt einen Timer innerhalb der als Standard definierten Clock-App auf dem Device. Es können nur Sekunden angegeben werden.&lt;br /&gt;
* ttsMsg - versendet eine Nachricht, die als Sprachnachricht ausgegeben wird&lt;br /&gt;
* userFlowState - aktiviert oder deaktiviert einen oder mehrere Flows,&#039;&#039;&#039;set Nexus7Wohnzimmer Badezimmer vorheizen:inactive oder set Nexus7Wohnzimmer Badezimmer vorheizen,Nachtlicht Steven:inactive&#039;&#039;&#039;&lt;br /&gt;
* vibrate - lässt das Androidgerät vibrieren&lt;br /&gt;
* volume - setzt die Medialautstärke. Entweder die internen Lautsprecher oder sofern angeschlossen die Bluetoothlautsprecher und per Klinkenstecker angeschlossene Lautsprecher, + oder - vor dem Wert reduziert die aktuelle Lautstärke um den Wert. Der maximale Sliderwert kann über das Attribut setVolMax geregelt werden.&lt;br /&gt;
* volumeUp - erhöht die Lautstärke um den angegeben Wert im entsprechenden Attribut. Ist kein Attribut angegeben wird per default 2 genommen.&lt;br /&gt;
* volumeDown - reduziert die Lautstärke um den angegeben Wert im entsprechenden Attribut. Ist kein Attribut angegeben wird per default 2 genommen.&lt;br /&gt;
* volumeNotification - setzt die Benachrichtigungslautstärke.&lt;br /&gt;
&lt;br /&gt;
==== Set abhängig von gesetzten Attributen ====&lt;br /&gt;
* changetoBtDevice - wechselt zu einem anderen Bluetooth Gerät. Attribut setBluetoothDevice muß gesetzt sein. Siehe Hinweis unten!&lt;br /&gt;
* notifySndFile - spielt die angegebene Mediadatei auf dem Androidgerät ab. Die aufzurufende Mediadatei sollte sich im Ordner /storage/emulated/0/Notifications/ befinden. Ist dies nicht der Fall kann man über das Attribut setNotifySndFilePath einen Pfad vorgeben.&lt;br /&gt;
* openApp - öffnet eine ausgewählte App. Attribut setOpenApp&lt;br /&gt;
* openURL - öffnet eine URL im Standardbrowser, sofern kein anderer Browser über das Attribut setOpenUrlBrowser ausgewählt wurde. Bsp: attr Tablet setOpenUrlBrowser de.ozerov.fully|de.ozerov.fully.MainActivity, das erste ist der Package Name und das zweite der Class Name&lt;br /&gt;
* setAPSSID - setzt die AccessPoint SSID um ein WLAN sleep zu verhindern&lt;br /&gt;
* setScreenOnForTimer ändert die Zeitdauer, die das Display an bleiben soll!&lt;br /&gt;
* screenFullscreen - on/off, (aktiviert/deaktiviert) den Vollbildmodus. Attribut setFullscreen&lt;br /&gt;
* screenLock - Sperrt den Bildschirm mit Pinabfrage. Attribut setScreenlockPIN - hier die Pin dafür eingeben. Erlaubt sind nur Zahlen. Es müßen mindestens 4, bis max 16 Zeichen verwendet werden.&lt;br /&gt;
* screenOrientation - Auto,Landscape,Portait, aktiviert die Bildschirmausrichtung (Automatisch,Horizontal,Vertikal). Attribut setScreenOrientation&lt;br /&gt;
* system - setzt Systembefehle ab (nur bei gerootetet Geräten). reboot,shutdown,airplanemodeON (kann nur aktiviert werden) Attribut root, in den Automagic Einstellungen muss &amp;quot;Root Funktion&amp;quot; gesetzt werden&lt;br /&gt;
* setNotifySndFilePath - setzt den korrekten Systempfad zur Notifydatei (default ist /storage/emulated/0/Notifications/&lt;br /&gt;
* setTtsMsgSpeed - setzt die Sprachgeschwindigkeit bei der Sprachausgabe(Werte zwischen 0.5 bis 4.0 in 0.5er Schritten) default ist 1.0&lt;br /&gt;
* setTtsMsgSpeed - setzt die Sprache bei der Sprachausgabe, de oder en (default ist de)&lt;br /&gt;
* setVolUpDownStep - setzt den Step für volumeUp und volumeDown&lt;br /&gt;
* setVolMax - setzt die maximale Volume Größe für den Slider&lt;br /&gt;
* setNotifyVolMax - setzt den maximalen Lautstärkewert für Benachrichtigungslautstärke für den Slider&lt;br /&gt;
* setRingSoundVolMax - setzt den maximalen Lautstärkewert für Klingellautstärke für den Slider&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Um openApp verwenden zu können, muss als Attribut der Package Name der App angegeben werden. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Um zwischen Bluetoothgeräten wechseln zu können, muss das Attribut setBluetoothDevice mit folgender Syntax gesetzt werden. attr &amp;lt;DEVICE&amp;gt; BTdeviceName1|MAC,BTDeviceName2|MAC Es muss zwingend darauf geachtet werden, dass beim BTdeviceName kein Leerzeichen vorhanden ist. Am besten zusammen oder mit Unterstrich. Bei der MAC ist darauf zu achten, dass wirklich nach jeder zweiten Zahl ein : steht&lt;br /&gt;
&lt;br /&gt;
** &#039;&#039;&#039;Beispiel: attr Nexus10Wohnzimmer setBluetoothDevice Logitech_BT_Adapter|AB:12:CD:34:EF:32,Anker_A3565|GH:56:IJ:78:KL:76&lt;br /&gt;
&lt;br /&gt;
=== state ===&lt;br /&gt;
* initialized - Ist der Status kurz nach einem define.&lt;br /&gt;
* active - die Geräteinstanz ist im aktiven Status.&lt;br /&gt;
* disabled - die Geräteinstanz wurde über das Attribut disable deaktiviert&lt;br /&gt;
&lt;br /&gt;
==Anwendungsbeispiele==&lt;br /&gt;
=== Lademanagement ===&lt;br /&gt;
Ich habe die Ladegeräte für meine Androidgeräte an Funkschaltsteckdosen. Ein DOIF schaltet bei unter 30% die Steckdose ein und bei über 90% wieder aus.&lt;br /&gt;
&lt;br /&gt;
Hier mal ein einfaches DOIF Beispiel für ein Lademanagment&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
... DOIF ([Nexus5Handy:powerLevel] &amp;lt; 30) (set LadenetzteilNexus5Handy:FILTER=STATE=off on) DOELSEIF ([Nexus5Handy:powerLevel] &amp;gt; 90) (set LadenetzteilNexus5Handy:FILTER=STATE=on off) DOELSE&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Wecker ===&lt;br /&gt;
Morgens lasse ich mich über mein Tablet im Schlafzimmer mit Musik wecken. Verwendet wird hierzu der wakeuptimer des RESIDENTS Modules. Das Abspielen stoppe ich dann von Hand. Danach erfolgt noch eine Ansage wie das Wetter gerade ist und wird.&lt;br /&gt;
&lt;br /&gt;
=== Mediacenter ===&lt;br /&gt;
Mein 10&amp;quot; Tablet im Wohnzimmer ist Mediaplayer für das Wohnzimmer mit Bluetoothlautsprechern. Die Lautstärke wird automatisch heruntergesetzt, wenn die Fritzbox einen Anruf auf das Wohnzimmer Handgerät signalisiert.&lt;br /&gt;
&lt;br /&gt;
=== Sprachbefehl - Abfragen von Zuständen diverser Sensoren ===&lt;br /&gt;
Wenn ich die Spracheingabe aktiviere und nach der Temperatur im Wohnzimmer frage, bekomme ich diese angesagt.&lt;br /&gt;
&lt;br /&gt;
Der Teil im Feld Daten ist ein klassisches ReadingsVal, halt nur ohne Komma und ohne Anführungszeichen&lt;br /&gt;
&lt;br /&gt;
WIRD GERADE ÜBERARBEITET&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Schaltbefehle vom Androidgerät an FHEM senden ===&lt;br /&gt;
Hierfür ist ein eigener Flow einzurichten. Wie das genau geht, verrät die Hilfe.&lt;br /&gt;
Um einen Schaltbefehl für FHEM zu erstellen, folgt nach dem Trigger eine Aktion als Script (Aktion Type: Script). Hier ist folgendes einzutragen:&lt;br /&gt;
&lt;br /&gt;
setcmd = &amp;quot;LichtWohnzimmerLampeRechts on&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;set&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In der ersten Zeile wird also der Schaltbefehl in der Variablem setcmd eingetragen und in der zweiten Zeile der FHEM Befehl in der Variablen fhemcmd.&lt;br /&gt;
&lt;br /&gt;
Danach müsst Ihr nur noch in einer weiteren Aktion den Flow &amp;quot;Send Data to AMADCommBridge&amp;quot; ausführen (Aktion Type: Flows ausführen). Die Aktion sollte bereits in Eurer Liste Vorhanden sein.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Screenshot_20160717-134948.png|200px]]&lt;br /&gt;
[[Datei:Screenshot 17.07.2016 1-50-27.png|200px]]&lt;br /&gt;
&lt;br /&gt;
Nun sollte Lampe1 angeschalten werden, wenn der Flow ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
=== Mit FHEM ein Flow ausführen ===&lt;br /&gt;
Es gibt den set Befehl userFlowRun. Als Argument übergibt man einen Flownamen. &#039;&#039;&#039;Achtung dieser Flowname darf keine Sonder oder Leerzeichen enthalten!!!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Lister aller Variablen für die AMADCommandBridge ===&lt;br /&gt;
fhemcmd Variable &lt;br /&gt;
* Wert &amp;quot;set&amp;quot; - Variable für den Schaltbefehl &#039;setcmd&#039;&lt;br /&gt;
* Wert &amp;quot;setreading&amp;quot; - Variable für die Readingswerte &#039;fhemdata&#039;&lt;br /&gt;
* &amp;quot;readingsval&amp;quot; - Variable für die Abfragewerte &#039;readingsvalcmd&#039;&lt;br /&gt;
* &amp;quot;fhemfunc&amp;quot; - Variable für den Funktionsnamen &#039;fhemsub&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele für Skriptinhalte:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Schalten einer Lampe&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
setcmd = &amp;quot;LichtWohnzimmerLampeRechts on&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;set&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Status eines Device abfragen&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
readingsvalcmd = &amp;quot;DEVICE READING DEFAULT&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;readingsval&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Rückgabevariable, die dann weiter verarbeitet werden kann, heißt &#039;&#039;&#039;respreadingsval&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Aufruf einer 99_myUtils Subroutine&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
fhemsub = &amp;quot;mySub()&amp;quot;; oder natürlich auch &amp;quot;mySub(&#039;was_auch_immer&#039;)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;fhemfunc&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Rückgabevariable, die dann weiter verarbeitet werden kann, heißt &#039;&#039;&#039;respfhemfunc&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Bekannte Meldungen/Hinweise/Probleme ==&lt;br /&gt;
&lt;br /&gt;
Wenn auf dem Android-Gerät die Fehlermeldung &#039;Accessibility service not running&#039; von Automagic kommt oder im FHEM das reading state  &#039;Flow Informations mit Fehler beendet&#039; steht, dann muss der Accessibility Service auf dem Android-Device aktiviert werden: Einstellungen --&amp;gt; Bedienungshilfen --&amp;gt; Automagic Premium. Hier muss der Schalter auf &#039;an&#039; stehen. Sollte dies der Fall sein, hilft u.U. ein kurzes Aus- und wieder Einschalten.&lt;br /&gt;
&lt;br /&gt;
Gerät wird oft als offline angezeigt und es können keine set Befehle abgesetzt werden.&lt;br /&gt;
Mit der AMAD Version 2.2 hielt eine neue Behandlung des deviceState Readings Einzug. Das Reading stellt nun den tatsächlichen Status des Gerätes gegenüber FHEM da. Bei vielen Android 6 Geräten kommt es aber auf Grund vom DeepSleep Modus zum Wegfall der WLAN Verbindung. Hier hilft die neue KeepAlive Funktion in AMAD. Dafür muß lediglich unter &lt;br /&gt;
* Einstellungen --&amp;gt; Akku --&amp;gt; oben auf die drei Punkte - Akku Leistungsoptimierung --&amp;gt; alle Apps und dann Automagic auswählen und &amp;quot;Nicht optimieren&amp;quot;&lt;br /&gt;
ausgewählt werden und in FHEM für das Device das Attribut setAPSSID gesetzt werden. Alles andere macht das Modul selbst.&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=AMAD&amp;diff=27710</id>
		<title>AMAD</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=AMAD&amp;diff=27710"/>
		<updated>2018-08-16T12:27:59Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: /* Mit FHEM ein Flow ausführen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuern von Androidgeräten und Anzeige von bestimmten Informationen dieser Geräte&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Sonstige Systeme&lt;br /&gt;
|ModTechName=73_AMADCommBridge.pm, 74_AMADDevice.pm&lt;br /&gt;
|ModOwner=CoolTux &amp;lt;br /&amp;gt;([http://forum.fhem.de/index.php?action=profile;u=13684 Forum] / [[Benutzer:CoolTux|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= AMAD 4.2 [AMADNG] =&lt;br /&gt;
== 73_AMADCommBridge / 74_AMADDevice ==&lt;br /&gt;
&lt;br /&gt;
= Vorwort =&lt;br /&gt;
=== Warum AMADNG ===&lt;br /&gt;
Nach fast 6 Monaten Entwicklungszeit wurde die neuste AMAD Version am 24.07.2017 offiziell frei gegeben. Diesmal lagen mir mehrere Dinge am Herzen.&lt;br /&gt;
In erster Linie wollte ich eine softwareseitige Trennung der AMADCommBridge vom eigentlichen Android Device. Daher ist die neue Version ein zweistufiges Modul geworden.&lt;br /&gt;
Im Laufe der Entwicklung kamen auch andere Anforderungen hinzu, die ich dann fähig war umzusetzen. Eine dieser Anforderungen war eine einfachere und besser funktionierende Installation. Herausgekommen ist ein Android Installationsassistant.&lt;br /&gt;
Mit ihm wird auf einfache Art und Weise direkt per Sprachführung und Eingabedialogen Automagic für AMAD konfiguriert und das Device in FHEM automatisch erstellt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Es ist darauf zu achten, das Autocreate aktiv ist, da sonst kein Device mit Hilfe des Assistenten angelegt werden kann!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Vorstellung =&lt;br /&gt;
Dieses 2-stufige Modul liefert, &#039;&#039;&#039;in Verbindung mit der Android App Automagic&#039;&#039;&#039;, diverse Informationen von Android Geräten. &lt;br /&gt;
Die AndroidAPP Automagic (die nicht von mir stammt und 2.90 Euro kostet) funktioniert wie Tasker, ist aber bei weitem benutzungsfreundlicher.&lt;br /&gt;
&lt;br /&gt;
=== Features / Funktionen ===&lt;br /&gt;
Im Auslieferungszustand werden folgende Zustände dargestellt:&lt;br /&gt;
* installierte Android Version&lt;br /&gt;
* Zustand von Automagic auf dem Gerät&lt;br /&gt;
* Spracheingabe&lt;br /&gt;
* Bluetooth An/Aus&lt;br /&gt;
* Zustand einer definierten App (läuft aktiv im Vordergrund oder nicht?)&lt;br /&gt;
* verbundene Bluetoothgeräte, inklusive deren MAC Adresse&lt;br /&gt;
* aktuell abgespieltes Musikalbum des verwendeten Mediaplayers&lt;br /&gt;
* aktuell abgespielter Musikinterpret des verwendeten Mediaplayers&lt;br /&gt;
* aktuell abgespielter Musiktitel des verwendeten Mediaplayers&lt;br /&gt;
* Status des Androidgerätes - Online/Offline&lt;br /&gt;
* nächster Alarmtag&lt;br /&gt;
* nächste Alarmzeit&lt;br /&gt;
* Batteriestatus in %&lt;br /&gt;
* Ladestatus - Netztei angeschlossen / nicht angeschlossen&lt;br /&gt;
* Bildschirmstatus An/Aus&lt;br /&gt;
* Bildschirmhelligkeit&lt;br /&gt;
* Vollbildmodus An/Aus&lt;br /&gt;
* Bildschirmausrichtung Auto/Landscape/Portrait&lt;br /&gt;
* Standardlautstärke&lt;br /&gt;
* Media Lautstärke&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Mit etwas Einarbeitung können jegliche Informationen, die Automagic bereit stellt, in FHEM angezeigt werden. Hierzu bedarf es lediglich eines eigenen Flows, der seine Daten an die AMADCommBridge sendet. Das Modul gibt auch die Möglichkeit Androidgeräte zu steuern.&lt;br /&gt;
&lt;br /&gt;
= AMADCommBridge - Kommunikationsbrücke für alle AMAD Geräte =&lt;br /&gt;
Dieses Modul ist das Ausgangsmodul zur erfolgreichen Integration von Androidgeräten in FHEM. Es stellt ferner eine Verbindungsebene zwischen AMAD unterstützten Geräten und FHEM zur Verfügung. Alle Kommunikation zwischen AMAD Android und FHEM läuft über diese Schnittstelle.&lt;br /&gt;
Daher erfolgt die Ersteinrichtung eines AMAD Devices auch genau über diese Modulinstanz. &lt;br /&gt;
&lt;br /&gt;
Damit erfolgreich ein Androidgerät in FHEM eingerichtet werden kann, muss im ersten Schritt ein AMADCommBridge Device angelegt werden.&lt;br /&gt;
&lt;br /&gt;
=== Definition in FHEM ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; AMADCommBridge&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== Beispiel ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define AMADBridge AMADCommBridge&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Anweisung erstellt ein neues AMADCommBridge Device namens AMADBridge.&lt;br /&gt;
&lt;br /&gt;
Im folgenden muß lediglich das Flowset auf dem Android Gerät installiert werden und der Flow &#039;First Run Assistent&#039; ausgeführt werden. (einfach den Homebutton drücken)&lt;br /&gt;
Der Assistent geleitet dann durch die Einrichtung des AMAD Gerätes und sorgt dafür, dass am Ende des Installationsprozess das Androidgerät als AMAD Device in FHEM angelegt wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
* JSON_ERROR - JSON Fehlermeldung, die von Perl gemeldet wird&lt;br /&gt;
* JSON_ERROR_STRING - der String, der die JSON Fehlermeldung verursacht hat&lt;br /&gt;
* fhemServerIP - die Ip-Adresse des FHEM Servers; wird vom Modul auf Basis des JSON Strings vom Installationsassistenten gesetzt. Kann aber auch mittels set Befehles vom User gesetzt werden&lt;br /&gt;
* receiveFhemCommand - ist das Attribut fhemControlMode auf trigger gestellt, wird das Reading gesetzt sobald ein FHEM Befehl übersendet wird. Hierauf kann dann ein Notify triggern. Wird anstelle von trigger setControl als Wert für fhemControlMode eingestellt, wird das Reading nicht gesetzt sondern der set Befehl sofort ausgeführt.&lt;br /&gt;
* receiveVoiceCommand - wird die Sprachsteuerung von AMAD aktiviert (set DEVICE activateVoiceInput) so wird der letzte erkannten Sprachbefehle in dieses Reading geschrieben.&lt;br /&gt;
* receiveVoiceDevice - Name des Devices von wo aus der letzte erkannte Sprachbefehl gesendet wurde&lt;br /&gt;
* state - Status der Bridge, open, closed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
* allowFrom - Regexp der erlaubten IP-Adressen oder Hostnamen. Wenn dieses Attribut gesetzt wurde, werden ausschließlich Verbindungen von diesen Adressen akzeptiert. Achtung: falls allowfrom nicht gesetzt ist, und keine gütige allowed Instanz definiert ist, und die Gegenstelle eine nicht lokale Adresse hat, dann wird die Verbindung abgewiesen. Folgende Adressen werden als local betrachtet: IPV4: 127/8, 10/8, 192.168/16, 172.16/10, 169.254/16, IPV6: ::1, fe80/10&lt;br /&gt;
* debugJSON - wenn auf 1 gesetzt, werden JSON Fehlermeldungen in Readings geschrieben. Siehe hierzu JSON_ERROR* unter Readings&lt;br /&gt;
* fhemControlMode - steuert die zulässige Art der Steuerung von FHEM Devices. Es können über die Bridge auf 2 Arten FHEM-Devices angesteuert werden: per direktem FHEM-Befehl aus einem Flow heraus oder als Sprachbefehl mittels Sprachsteuerung (set DEVICE activateVoiceInput)&lt;br /&gt;
** trigger - ist der Wert trigger gesetzt, werden alle an die Bridge gesendeten FHEM set Befehle in das Reading receiveFhemCommand geschrieben und können so mittels notify ausgeführt werden. Sprachsteuerung ist möglich, es werden Readings receiveVoice* gesetzt. Auf dem Androidgerät können bei Sprachsteuerung mehrere Sprachbefehle mittels &amp;quot;und&amp;quot; verknüpft/aneinander gereiht werden. Bsp: schalte die Lichtszene Abends an und schalte den Fernseher an&lt;br /&gt;
** setControl - alle set Befehle, die mittels eines Flows über die Bridge gesendet werden, werden automatisch ausgeführt. Das Triggern eines Readings ist nicht nötig. Die Steuerung mittels Sprache verhält sich wie beim Wert trigger&lt;br /&gt;
** thirdPartControl - verhält sich wie trigger, bei der Sprachsteuerung ist jedoch ein Anreihen von Sprachbefehlen mittels &amp;quot;und&amp;quot; nicht möglich. Dient der Sprachsteuerung über Module anderer Modulautoren ((z.B. 39_TEERKO.pm)&lt;br /&gt;
&lt;br /&gt;
= AMADDevice - Automagic Android Device =&lt;br /&gt;
Dieses Modul liefert, in Verbindung mit der Android APP Automagic, diverse Informationen von Android Geräten. Die Android App Automagic (die nicht von mir stammt und 2.90 Euro kostet) funktioniert wie Tasker, ist aber bei weitem User freundlicher. &lt;br /&gt;
Mit etwas Einarbeitung können jegliche Informationen, die Automagic bereit stellt in FHEM angezeigt werden. Hierzu bedarf es lediglich eines eigenen Flows, der seine Daten an die AMADDeviceCommBridge sendet. Das Modul gibt auch die Möglichkeit Androidgeräte zu steuern. &lt;br /&gt;
Für all diese Aktionen und Informationen wird auf dem Androidgerät &amp;quot;Automagic&amp;quot; und ein so genannter Flow benötigt. Die App ist über den Google PlayStore zu beziehen. Das benötigte Flowset bekommt man aus dem FHEM Verzeichnis. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Wie genau verwendet man nun AMADDevice? ===&lt;br /&gt;
* sicherstellen, dass als allererstes die AMADCommBridge in FHEM definiert wurde&lt;br /&gt;
* installieren der App &amp;quot;Automagic Premium&amp;quot; aus dem PlayStore&lt;br /&gt;
* installieren des Flowset 74_AMADDeviceautomagicFlowset$VERSION.xml aus dem Ordner $INSTALLFHEM/FHEM/lib/ auf dem Androidgerät&lt;br /&gt;
* aktivieren des Installationsassistanten Flow in Automagic. Wenn man nun Automagic in den Hintergrund schickt, z.B. Hometaste drücken, startet der Assistant und legt automatisch ein Device für das Androidgerät an.&lt;br /&gt;
&lt;br /&gt;
=== Ein AMADDevice Gerät von Hand anlegen. ===&lt;br /&gt;
&lt;br /&gt;
Define&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; AMADDevice &amp;lt;IP-ADRESSE&amp;gt; &amp;lt;AMAD_ID&amp;gt; &amp;lt;REMOTESERVER&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Beispiel ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define WandTabletWohnzimmer AMADDevice 192.168.0.23 123456 Automagic&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Fall wird ein AMADDevice von Hand angelegt. Die AMAD_ID, hier 123456, muß auch exakt so als globale Variable in Automagic eingetragen sein.&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
* airplanemode - Status des Flugmodus&lt;br /&gt;
* androidVersion - aktuell installierte Androidversion&lt;br /&gt;
* automagicState - Statusmeldungen von der Automagic App &#039;&#039;&#039;(Voraussetzung Android &amp;gt;4.3). Ist Android größer 4.3 vorhanden und im Reading steht &amp;quot;wird nicht unterstützt&amp;quot;, muss in den Androideinstellungen unter Ton und Benachrichtigungen -&amp;gt; Benachrichtigungszugriff ein Haken für Automagic gesetzt werden&#039;&#039;&#039;&lt;br /&gt;
* batteryHealth - Zustand der Battery (1=unbekannt, 2=gut, 3=überhitzt, 4=tot, 5=Überspannung, 6=unbekannter Fehler, 7=kalt)&lt;br /&gt;
* batterytemperature - Temperatur der Batterie&lt;br /&gt;
* bluetooth - on/off, Bluetooth Status an oder aus&lt;br /&gt;
* checkActiveTask - Zustand einer zuvor definierten App. 0=nicht aktiv oder nicht aktiv im Vordergrund, 1=aktiv im Vordergrund, &#039;&#039;&#039;siehe Hinweis unten&#039;&#039;&#039;&lt;br /&gt;
* connectedBTdevices - eine Liste der verbundenen Gerät&lt;br /&gt;
* connectedBTdevicesMAC - eine Liste der MAC Adressen aller verbundender BT Geräte&lt;br /&gt;
* currentMusicAlbum - aktuell abgespieltes Musikalbum des verwendeten Mediaplayers&lt;br /&gt;
* currentMusicApp - aktuell verwendeter Mediaplayer (Amazon Music, Google Play Music, Google Play Video, Spotify, YouTube, TuneIn Player, Aldi Life Music)&lt;br /&gt;
* currentMusicArtist - aktuell abgespielter Musikinterpret des verwendeten Mediaplayers&lt;br /&gt;
* currentMusicIcon - Cover vom aktuell abgespielten Album &#039;&#039;&#039;Noch nicht fertig implementiert&#039;&#039;&#039;&lt;br /&gt;
* currentMusicState - Status des aktuellen/zuletzt verwendeten Mediaplayers&lt;br /&gt;
* currentMusicTrack - aktuell abgespielter Musiktitel des verwendeten Mediaplayers&lt;br /&gt;
* daydream - on/off, Daydream gestartet oder nicht&lt;br /&gt;
* deviceState - Status des Androidgerätes. unknown, online, offline.&lt;br /&gt;
* doNotDisturb - aktueller Status des Nicht-Stören-Modus&lt;br /&gt;
* dockingState - undocked/docked Status, ob sich das Gerät in einer Dockingstation befindet.&lt;br /&gt;
* flow_SetCommands - active/inactive, Status des SetCommands Flow&lt;br /&gt;
* flow_informations - active/inactive, Status des Informations Flow&lt;br /&gt;
* flowsetVersionAtDevice - aktuell installierte Flowsetversion auf dem Device&lt;br /&gt;
* incomingCallerName - Anrufername des eingehenden Anrufes&lt;br /&gt;
* incomingCallerNumber - Anrufernummer des eingehenden Anrufes&lt;br /&gt;
* incommingWhatsAppMessageFrom - letzte WhatsApp Nachricht&lt;br /&gt;
* incommingWhatsTelegramMessageFrom - letzte Telegram Nachricht&lt;br /&gt;
* intentRadioName - zuletzt gestreamter Intent Radio Name&lt;br /&gt;
* intentRadioState - Status des IntentRadio Players&lt;br /&gt;
* keyguardSet - 0/1 Displaysperre gesetzt 0=nein 1=ja, bedeutet nicht, dass sie gerade aktiv ist&lt;br /&gt;
* lastSetCommandError - letzte Fehlermeldung vom set Befehl&lt;br /&gt;
* lastSetCommandState - letzter Status vom set Befehl, Befehl erfolgreich/nicht erfolgreich gesendet&lt;br /&gt;
* lastStatusRequestError - letzte Fehlermeldung vom statusRequest Befehl&lt;br /&gt;
* lastStatusRequestState - letzter Status vom statusRequest Befehl, Befehl erfolgreich/nicht erfolgreich gesendet&lt;br /&gt;
* nextAlarmDay - aktiver Alarmtag&lt;br /&gt;
* nextAlarmState - aktueller Status des &amp;quot;Androidinternen&amp;quot; Weckers&lt;br /&gt;
* nextAlarmTime - aktive Alarmzeit&lt;br /&gt;
* powerLevel - Status der Batterie in %&lt;br /&gt;
* powerPlugged - Netzteil angeschlossen? 1=AC Adapter, 2=USB, 4=Kabellos 0=nicht eingesteckt&lt;br /&gt;
* screen - on locked/unlocked, off locked/unlocked gibt an ob der Bildschirm an oder aus ist und gleichzeitig gesperrt oder nicht gesperrt&lt;br /&gt;
* screenBrightness - Bildschirmhelligkeit von 0-255&lt;br /&gt;
* screenFullscreen - on/off, Vollbildmodus (An,Aus)&lt;br /&gt;
* screenOrientation - Landscape,Portrait, Bildschirmausrichtung (Horizontal,Vertikal)&lt;br /&gt;
* screenOrientationMode - auto/manual, Modus für die Ausrichtung (Automatisch, Manuell)&lt;br /&gt;
* state - aktueller Status&lt;br /&gt;
* userFlowState - aktueller Status eines Flows, festgelegt unter dem setUserFlowState Attribut&lt;br /&gt;
* volume - Media Lautstärkewert&lt;br /&gt;
* volumeNotification - Benachrichtigungs-Lautstärke&lt;br /&gt;
&lt;br /&gt;
Beim Reading checkActivTask muß zuvor der Packagename der zu prüfenden App als Attribut checkActiveTask angegeben werden. Beispiel: attr Nexus10Wohnzimmer checkActiveTask com.android.chrome für den Chrome Browser.&lt;br /&gt;
&lt;br /&gt;
=== Set ===&lt;br /&gt;
* activateVoiceInput - aktiviert die Spracheingabe&lt;br /&gt;
* bluetooth - on/off, aktiviert/deaktiviert Bluetooth&lt;br /&gt;
* clearNotificationBar - All,Automagic, löscht alle Meldungen oder nur die Automagic Meldungen in der Statusleiste&lt;br /&gt;
* closeCall - beendet einen laufenden Anruf&lt;br /&gt;
* currentFlowsetUpdate - führt ein Flowsetupdate auf dem Device durch&lt;br /&gt;
* doNotDisturb - schaltet den Nicht-Stören-Modus: always immer stören, never niemals stören, alarmClockOnly nur Wecker darf stören, onlyImportant nur wichtige Störungen&lt;br /&gt;
* installFlowSource - installiert einen Flow auf dem Device, &amp;lt;u&amp;gt;das XML File muss unter /tmp/ liegen und die Endung xml haben. &amp;lt;b&amp;gt;Bsp:&amp;lt;/b&amp;gt; set TabletWohnzimmer installFlowSource WlanUebwerwachen.xml&amp;lt;/u&amp;gt;&lt;br /&gt;
* mediaAmazonMusic - play, stop, next, back ,steuert den Amazon Musik Mediaplayer&lt;br /&gt;
* mediaGoogleMusic - play, stop, next, back ,steuert den Google Play Musik Mediaplayer&lt;br /&gt;
* mediaSpotifyMusic - play, stop, next, back ,steuert den Spotify Mediaplayer&lt;br /&gt;
* mediaTuneinRadio - play, stop, next, back ,steuert den TuneIn Radio Mediaplayer&lt;br /&gt;
* mediaAldiMusic - play, stop, next, back ,steuert den Aldi Musik Mediaplayer&lt;br /&gt;
* mediaAudible - play, stop, next, back ,steuert den Audible Mediaplayer&lt;br /&gt;
* mediaYouTube - play, stop, next, back ,steuert den YouTube Mediaplayer&lt;br /&gt;
* mediaVlcPlayer - play, stop, next, back ,steuert den VLC Mediaplayer&lt;br /&gt;
* nextAlarmTime - setzt die Alarmzeit. gilt aber nur innerhalb der nächsten 24 h&lt;br /&gt;
* openCall - ruft eine Nummer an und legt optional nach X Sekunden auf / set DEVICE openCall 01736458 10 / ruft die Nummer an und beendet den Anruf nach 10s&lt;br /&gt;
* screen - on/off/lock/unlock schaltet den Bildschirm ein/aus oder sperrt/entsperrt ihn&lt;br /&gt;
* screenBrightness - setzt die Bildschirmhelligkeit, von 0-255.&lt;br /&gt;
* screenMsg - versendet eine Bildschirmnachricht&lt;br /&gt;
* sendintent - sendet einen Intentstring Bsp: set $AMADDeviceDEVICE sendIntent org.smblott.intentradio.PLAY url http://stream.klassikradio.de/live/mp3-192/stream.klassikradio.de/play.m3u name Klassikradio, der erste Befehl ist die Aktion und der zweite das Extra. Es können immer zwei Extras mitgegeben werden.&lt;br /&gt;
* sendSMS - sendet eine SMS an eine bestimmte Telefonnummer. Bsp.: sendSMS Dies ist ein Test|555487263&lt;br /&gt;
* startDaydream - startet den Daydream&lt;br /&gt;
* statusRequest - Fordert einen neuen Statusreport beim Device an. Es können nicht von allen Readings per statusRequest die Daten geholt werden. Einige wenige geben nur bei Statusänderung ihren Status wieder.&lt;br /&gt;
* timer - setzt einen Timer innerhalb der als Standard definierten Clock-App auf dem Device. Es können nur Sekunden angegeben werden.&lt;br /&gt;
* ttsMsg - versendet eine Nachricht, die als Sprachnachricht ausgegeben wird&lt;br /&gt;
* userFlowState - aktiviert oder deaktiviert einen oder mehrere Flows,&#039;&#039;&#039;set Nexus7Wohnzimmer Badezimmer vorheizen:inactive oder set Nexus7Wohnzimmer Badezimmer vorheizen,Nachtlicht Steven:inactive&#039;&#039;&#039;&lt;br /&gt;
* vibrate - lässt das Androidgerät vibrieren&lt;br /&gt;
* volume - setzt die Medialautstärke. Entweder die internen Lautsprecher oder sofern angeschlossen die Bluetoothlautsprecher und per Klinkenstecker angeschlossene Lautsprecher, + oder - vor dem Wert reduziert die aktuelle Lautstärke um den Wert. Der maximale Sliderwert kann über das Attribut setVolMax geregelt werden.&lt;br /&gt;
* volumeUp - erhöht die Lautstärke um den angegeben Wert im entsprechenden Attribut. Ist kein Attribut angegeben wird per default 2 genommen.&lt;br /&gt;
* volumeDown - reduziert die Lautstärke um den angegeben Wert im entsprechenden Attribut. Ist kein Attribut angegeben wird per default 2 genommen.&lt;br /&gt;
* volumeNotification - setzt die Benachrichtigungslautstärke.&lt;br /&gt;
&lt;br /&gt;
==== Set abhängig von gesetzten Attributen ====&lt;br /&gt;
* changetoBtDevice - wechselt zu einem anderen Bluetooth Gerät. Attribut setBluetoothDevice muß gesetzt sein. Siehe Hinweis unten!&lt;br /&gt;
* notifySndFile - spielt die angegebene Mediadatei auf dem Androidgerät ab. Die aufzurufende Mediadatei sollte sich im Ordner /storage/emulated/0/Notifications/ befinden. Ist dies nicht der Fall kann man über das Attribut setNotifySndFilePath einen Pfad vorgeben.&lt;br /&gt;
* openApp - öffnet eine ausgewählte App. Attribut setOpenApp&lt;br /&gt;
* openURL - öffnet eine URL im Standardbrowser, sofern kein anderer Browser über das Attribut setOpenUrlBrowser ausgewählt wurde. Bsp: attr Tablet setOpenUrlBrowser de.ozerov.fully|de.ozerov.fully.MainActivity, das erste ist der Package Name und das zweite der Class Name&lt;br /&gt;
* setAPSSID - setzt die AccessPoint SSID um ein WLAN sleep zu verhindern&lt;br /&gt;
* setScreenOnForTimer ändert die Zeitdauer, die das Display an bleiben soll!&lt;br /&gt;
* screenFullscreen - on/off, (aktiviert/deaktiviert) den Vollbildmodus. Attribut setFullscreen&lt;br /&gt;
* screenLock - Sperrt den Bildschirm mit Pinabfrage. Attribut setScreenlockPIN - hier die Pin dafür eingeben. Erlaubt sind nur Zahlen. Es müßen mindestens 4, bis max 16 Zeichen verwendet werden.&lt;br /&gt;
* screenOrientation - Auto,Landscape,Portait, aktiviert die Bildschirmausrichtung (Automatisch,Horizontal,Vertikal). Attribut setScreenOrientation&lt;br /&gt;
* system - setzt Systembefehle ab (nur bei gerootetet Geräten). reboot,shutdown,airplanemodeON (kann nur aktiviert werden) Attribut root, in den Automagic Einstellungen muss &amp;quot;Root Funktion&amp;quot; gesetzt werden&lt;br /&gt;
* setNotifySndFilePath - setzt den korrekten Systempfad zur Notifydatei (default ist /storage/emulated/0/Notifications/&lt;br /&gt;
* setTtsMsgSpeed - setzt die Sprachgeschwindigkeit bei der Sprachausgabe(Werte zwischen 0.5 bis 4.0 in 0.5er Schritten) default ist 1.0&lt;br /&gt;
* setTtsMsgSpeed - setzt die Sprache bei der Sprachausgabe, de oder en (default ist de)&lt;br /&gt;
* setVolUpDownStep - setzt den Step für volumeUp und volumeDown&lt;br /&gt;
* setVolMax - setzt die maximale Volume Größe für den Slider&lt;br /&gt;
* setNotifyVolMax - setzt den maximalen Lautstärkewert für Benachrichtigungslautstärke für den Slider&lt;br /&gt;
* setRingSoundVolMax - setzt den maximalen Lautstärkewert für Klingellautstärke für den Slider&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Um openApp verwenden zu können, muss als Attribut der Package Name der App angegeben werden. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Um zwischen Bluetoothgeräten wechseln zu können, muss das Attribut setBluetoothDevice mit folgender Syntax gesetzt werden. attr &amp;lt;DEVICE&amp;gt; BTdeviceName1|MAC,BTDeviceName2|MAC Es muss zwingend darauf geachtet werden, dass beim BTdeviceName kein Leerzeichen vorhanden ist. Am besten zusammen oder mit Unterstrich. Bei der MAC ist darauf zu achten, dass wirklich nach jeder zweiten Zahl ein : steht&lt;br /&gt;
&lt;br /&gt;
** &#039;&#039;&#039;Beispiel: attr Nexus10Wohnzimmer setBluetoothDevice Logitech_BT_Adapter|AB:12:CD:34:EF:32,Anker_A3565|GH:56:IJ:78:KL:76&lt;br /&gt;
&lt;br /&gt;
=== state ===&lt;br /&gt;
* initialized - Ist der Status kurz nach einem define.&lt;br /&gt;
* active - die Geräteinstanz ist im aktiven Status.&lt;br /&gt;
* disabled - die Geräteinstanz wurde über das Attribut disable deaktiviert&lt;br /&gt;
&lt;br /&gt;
==Anwendungsbeispiele==&lt;br /&gt;
=== Lademanagement ===&lt;br /&gt;
Ich habe die Ladegeräte für meine Androidgeräte an Funkschaltsteckdosen. Ein DOIF schaltet bei unter 30% die Steckdose ein und bei über 90% wieder aus.&lt;br /&gt;
&lt;br /&gt;
Hier mal ein einfaches DOIF Beispiel für ein Lademanagment&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
... DOIF ([Nexus5Handy:powerLevel] &amp;lt; 30) (set LadenetzteilNexus5Handy:FILTER=STATE=off on) DOELSEIF ([Nexus5Handy:powerLevel] &amp;gt; 90) (set LadenetzteilNexus5Handy:FILTER=STATE=on off) DOELSE&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Wecker ===&lt;br /&gt;
Morgens lasse ich mich über mein Tablet im Schlafzimmer mit Musik wecken. Verwendet wird hierzu der wakeuptimer des RESIDENTS Modules. Das Abspielen stoppe ich dann von Hand. Danach erfolgt noch eine Ansage wie das Wetter gerade ist und wird.&lt;br /&gt;
&lt;br /&gt;
=== Mediacenter ===&lt;br /&gt;
Mein 10&amp;quot; Tablet im Wohnzimmer ist Mediaplayer für das Wohnzimmer mit Bluetoothlautsprechern. Die Lautstärke wird automatisch heruntergesetzt, wenn die Fritzbox einen Anruf auf das Wohnzimmer Handgerät signalisiert.&lt;br /&gt;
&lt;br /&gt;
=== Sprachbefehl - Abfragen von Zuständen diverser Sensoren ===&lt;br /&gt;
Wenn ich die Spracheingabe aktiviere und nach der Temperatur im Wohnzimmer frage, bekomme ich diese angesagt.&lt;br /&gt;
&lt;br /&gt;
Der Teil im Feld Daten ist ein klassisches ReadingsVal, halt nur ohne Komma und ohne Anführungszeichen&lt;br /&gt;
&lt;br /&gt;
WIRD GERADE ÜBERARBEITET&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Schaltbefehle vom Androidgerät an FHEM senden ===&lt;br /&gt;
Hierfür ist ein eigener Flow einzurichten. Wie das genau geht, verrät die Hilfe.&lt;br /&gt;
Um einen Schaltbefehl für FHEM zu erstellen, folgt nach dem Trigger eine Aktion als Script (Aktion Type: Script). Hier ist folgendes einzutragen:&lt;br /&gt;
&lt;br /&gt;
setcmd = &amp;quot;LichtWohnzimmerLampeRechts on&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;set&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In der ersten Zeile wird also der Schaltbefehl in der Variablem setcmd eingetragen und in der zweiten Zeile der FHEM Befehl in der Variablen fhemcmd.&lt;br /&gt;
&lt;br /&gt;
Danach müsst Ihr nur noch in einer weiteren Aktion den Flow &amp;quot;Send Data to AMADCommBridge&amp;quot; ausführen (Aktion Type: Flows ausführen). Die Aktion sollte bereits in Eurer Liste Vorhanden sein.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Screenshot_20160717-134948.png|200px]]&lt;br /&gt;
[[Datei:Screenshot 17.07.2016 1-50-27.png|200px]]&lt;br /&gt;
&lt;br /&gt;
Nun sollte Lampe1 angeschalten werden, wenn der Flow ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
=== Mit FHEM ein Flow ausführen ===&lt;br /&gt;
In Automagic einen Trigger vom Type General Broadcast für den Flow wählen welchen man fern ausführen möchte. In der Trigger Definition steht unter Aktion &#039;&#039;automagic.NameDesFlows&#039;&#039; und auf Wunsch unter Access Intent Extra&#039;s &#039;&#039;param1 = getString(&amp;quot;label1&amp;quot;); param2 = getString(&amp;quot;label2&amp;quot;);&#039;&#039;. &#039;&#039;NameDesFlows&#039;&#039; ist natürlich die Name des Flows, der kein Leerzeichen enthält. Mit ein FHEM Command &#039;set &#039;&#039;AMADDevice&#039;&#039; sendIntent &#039;&#039;automagic.namederflow label1 param1 label2 param2&#039;&#039;&#039; wird dann der Flow aus geführt.&lt;br /&gt;
&lt;br /&gt;
=== Lister aller Variablen für die AMADCommandBridge ===&lt;br /&gt;
fhemcmd Variable &lt;br /&gt;
* Wert &amp;quot;set&amp;quot; - Variable für den Schaltbefehl &#039;setcmd&#039;&lt;br /&gt;
* Wert &amp;quot;setreading&amp;quot; - Variable für die Readingswerte &#039;fhemdata&#039;&lt;br /&gt;
* &amp;quot;readingsval&amp;quot; - Variable für die Abfragewerte &#039;readingsvalcmd&#039;&lt;br /&gt;
* &amp;quot;fhemfunc&amp;quot; - Variable für den Funktionsnamen &#039;fhemsub&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele für Skriptinhalte:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Schalten einer Lampe&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
setcmd = &amp;quot;LichtWohnzimmerLampeRechts on&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;set&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Status eines Device abfragen&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
readingsvalcmd = &amp;quot;DEVICE READING DEFAULT&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;readingsval&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Rückgabevariable, die dann weiter verarbeitet werden kann, heißt &#039;&#039;&#039;respreadingsval&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Aufruf einer 99_myUtils Subroutine&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
fhemsub = &amp;quot;mySub()&amp;quot;; oder natürlich auch &amp;quot;mySub(&#039;was_auch_immer&#039;)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;fhemfunc&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Rückgabevariable, die dann weiter verarbeitet werden kann, heißt &#039;&#039;&#039;respfhemfunc&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Bekannte Meldungen/Hinweise/Probleme ==&lt;br /&gt;
&lt;br /&gt;
Wenn auf dem Android-Gerät die Fehlermeldung &#039;Accessibility service not running&#039; von Automagic kommt oder im FHEM das reading state  &#039;Flow Informations mit Fehler beendet&#039; steht, dann muss der Accessibility Service auf dem Android-Device aktiviert werden: Einstellungen --&amp;gt; Bedienungshilfen --&amp;gt; Automagic Premium. Hier muss der Schalter auf &#039;an&#039; stehen. Sollte dies der Fall sein, hilft u.U. ein kurzes Aus- und wieder Einschalten.&lt;br /&gt;
&lt;br /&gt;
Gerät wird oft als offline angezeigt und es können keine set Befehle abgesetzt werden.&lt;br /&gt;
Mit der AMAD Version 2.2 hielt eine neue Behandlung des deviceState Readings Einzug. Das Reading stellt nun den tatsächlichen Status des Gerätes gegenüber FHEM da. Bei vielen Android 6 Geräten kommt es aber auf Grund vom DeepSleep Modus zum Wegfall der WLAN Verbindung. Hier hilft die neue KeepAlive Funktion in AMAD. Dafür muß lediglich unter &lt;br /&gt;
* Einstellungen --&amp;gt; Akku --&amp;gt; oben auf die drei Punkte - Akku Leistungsoptimierung --&amp;gt; alle Apps und dann Automagic auswählen und &amp;quot;Nicht optimieren&amp;quot;&lt;br /&gt;
ausgewählt werden und in FHEM für das Device das Attribut setAPSSID gesetzt werden. Alles andere macht das Modul selbst.&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=AMAD&amp;diff=27709</id>
		<title>AMAD</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=AMAD&amp;diff=27709"/>
		<updated>2018-08-16T12:24:55Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: /* AMAD 4.0 [AMADNG] */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuern von Androidgeräten und Anzeige von bestimmten Informationen dieser Geräte&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Sonstige Systeme&lt;br /&gt;
|ModTechName=73_AMADCommBridge.pm, 74_AMADDevice.pm&lt;br /&gt;
|ModOwner=CoolTux &amp;lt;br /&amp;gt;([http://forum.fhem.de/index.php?action=profile;u=13684 Forum] / [[Benutzer:CoolTux|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= AMAD 4.2 [AMADNG] =&lt;br /&gt;
== 73_AMADCommBridge / 74_AMADDevice ==&lt;br /&gt;
&lt;br /&gt;
= Vorwort =&lt;br /&gt;
=== Warum AMADNG ===&lt;br /&gt;
Nach fast 6 Monaten Entwicklungszeit wurde die neuste AMAD Version am 24.07.2017 offiziell frei gegeben. Diesmal lagen mir mehrere Dinge am Herzen.&lt;br /&gt;
In erster Linie wollte ich eine softwareseitige Trennung der AMADCommBridge vom eigentlichen Android Device. Daher ist die neue Version ein zweistufiges Modul geworden.&lt;br /&gt;
Im Laufe der Entwicklung kamen auch andere Anforderungen hinzu, die ich dann fähig war umzusetzen. Eine dieser Anforderungen war eine einfachere und besser funktionierende Installation. Herausgekommen ist ein Android Installationsassistant.&lt;br /&gt;
Mit ihm wird auf einfache Art und Weise direkt per Sprachführung und Eingabedialogen Automagic für AMAD konfiguriert und das Device in FHEM automatisch erstellt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Es ist darauf zu achten, das Autocreate aktiv ist, da sonst kein Device mit Hilfe des Assistenten angelegt werden kann!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Vorstellung =&lt;br /&gt;
Dieses 2-stufige Modul liefert, &#039;&#039;&#039;in Verbindung mit der Android App Automagic&#039;&#039;&#039;, diverse Informationen von Android Geräten. &lt;br /&gt;
Die AndroidAPP Automagic (die nicht von mir stammt und 2.90 Euro kostet) funktioniert wie Tasker, ist aber bei weitem benutzungsfreundlicher.&lt;br /&gt;
&lt;br /&gt;
=== Features / Funktionen ===&lt;br /&gt;
Im Auslieferungszustand werden folgende Zustände dargestellt:&lt;br /&gt;
* installierte Android Version&lt;br /&gt;
* Zustand von Automagic auf dem Gerät&lt;br /&gt;
* Spracheingabe&lt;br /&gt;
* Bluetooth An/Aus&lt;br /&gt;
* Zustand einer definierten App (läuft aktiv im Vordergrund oder nicht?)&lt;br /&gt;
* verbundene Bluetoothgeräte, inklusive deren MAC Adresse&lt;br /&gt;
* aktuell abgespieltes Musikalbum des verwendeten Mediaplayers&lt;br /&gt;
* aktuell abgespielter Musikinterpret des verwendeten Mediaplayers&lt;br /&gt;
* aktuell abgespielter Musiktitel des verwendeten Mediaplayers&lt;br /&gt;
* Status des Androidgerätes - Online/Offline&lt;br /&gt;
* nächster Alarmtag&lt;br /&gt;
* nächste Alarmzeit&lt;br /&gt;
* Batteriestatus in %&lt;br /&gt;
* Ladestatus - Netztei angeschlossen / nicht angeschlossen&lt;br /&gt;
* Bildschirmstatus An/Aus&lt;br /&gt;
* Bildschirmhelligkeit&lt;br /&gt;
* Vollbildmodus An/Aus&lt;br /&gt;
* Bildschirmausrichtung Auto/Landscape/Portrait&lt;br /&gt;
* Standardlautstärke&lt;br /&gt;
* Media Lautstärke&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Mit etwas Einarbeitung können jegliche Informationen, die Automagic bereit stellt, in FHEM angezeigt werden. Hierzu bedarf es lediglich eines eigenen Flows, der seine Daten an die AMADCommBridge sendet. Das Modul gibt auch die Möglichkeit Androidgeräte zu steuern.&lt;br /&gt;
&lt;br /&gt;
= AMADCommBridge - Kommunikationsbrücke für alle AMAD Geräte =&lt;br /&gt;
Dieses Modul ist das Ausgangsmodul zur erfolgreichen Integration von Androidgeräten in FHEM. Es stellt ferner eine Verbindungsebene zwischen AMAD unterstützten Geräten und FHEM zur Verfügung. Alle Kommunikation zwischen AMAD Android und FHEM läuft über diese Schnittstelle.&lt;br /&gt;
Daher erfolgt die Ersteinrichtung eines AMAD Devices auch genau über diese Modulinstanz. &lt;br /&gt;
&lt;br /&gt;
Damit erfolgreich ein Androidgerät in FHEM eingerichtet werden kann, muss im ersten Schritt ein AMADCommBridge Device angelegt werden.&lt;br /&gt;
&lt;br /&gt;
=== Definition in FHEM ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; AMADCommBridge&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== Beispiel ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define AMADBridge AMADCommBridge&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Anweisung erstellt ein neues AMADCommBridge Device namens AMADBridge.&lt;br /&gt;
&lt;br /&gt;
Im folgenden muß lediglich das Flowset auf dem Android Gerät installiert werden und der Flow &#039;First Run Assistent&#039; ausgeführt werden. (einfach den Homebutton drücken)&lt;br /&gt;
Der Assistent geleitet dann durch die Einrichtung des AMAD Gerätes und sorgt dafür, dass am Ende des Installationsprozess das Androidgerät als AMAD Device in FHEM angelegt wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
* JSON_ERROR - JSON Fehlermeldung, die von Perl gemeldet wird&lt;br /&gt;
* JSON_ERROR_STRING - der String, der die JSON Fehlermeldung verursacht hat&lt;br /&gt;
* fhemServerIP - die Ip-Adresse des FHEM Servers; wird vom Modul auf Basis des JSON Strings vom Installationsassistenten gesetzt. Kann aber auch mittels set Befehles vom User gesetzt werden&lt;br /&gt;
* receiveFhemCommand - ist das Attribut fhemControlMode auf trigger gestellt, wird das Reading gesetzt sobald ein FHEM Befehl übersendet wird. Hierauf kann dann ein Notify triggern. Wird anstelle von trigger setControl als Wert für fhemControlMode eingestellt, wird das Reading nicht gesetzt sondern der set Befehl sofort ausgeführt.&lt;br /&gt;
* receiveVoiceCommand - wird die Sprachsteuerung von AMAD aktiviert (set DEVICE activateVoiceInput) so wird der letzte erkannten Sprachbefehle in dieses Reading geschrieben.&lt;br /&gt;
* receiveVoiceDevice - Name des Devices von wo aus der letzte erkannte Sprachbefehl gesendet wurde&lt;br /&gt;
* state - Status der Bridge, open, closed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
* allowFrom - Regexp der erlaubten IP-Adressen oder Hostnamen. Wenn dieses Attribut gesetzt wurde, werden ausschließlich Verbindungen von diesen Adressen akzeptiert. Achtung: falls allowfrom nicht gesetzt ist, und keine gütige allowed Instanz definiert ist, und die Gegenstelle eine nicht lokale Adresse hat, dann wird die Verbindung abgewiesen. Folgende Adressen werden als local betrachtet: IPV4: 127/8, 10/8, 192.168/16, 172.16/10, 169.254/16, IPV6: ::1, fe80/10&lt;br /&gt;
* debugJSON - wenn auf 1 gesetzt, werden JSON Fehlermeldungen in Readings geschrieben. Siehe hierzu JSON_ERROR* unter Readings&lt;br /&gt;
* fhemControlMode - steuert die zulässige Art der Steuerung von FHEM Devices. Es können über die Bridge auf 2 Arten FHEM-Devices angesteuert werden: per direktem FHEM-Befehl aus einem Flow heraus oder als Sprachbefehl mittels Sprachsteuerung (set DEVICE activateVoiceInput)&lt;br /&gt;
** trigger - ist der Wert trigger gesetzt, werden alle an die Bridge gesendeten FHEM set Befehle in das Reading receiveFhemCommand geschrieben und können so mittels notify ausgeführt werden. Sprachsteuerung ist möglich, es werden Readings receiveVoice* gesetzt. Auf dem Androidgerät können bei Sprachsteuerung mehrere Sprachbefehle mittels &amp;quot;und&amp;quot; verknüpft/aneinander gereiht werden. Bsp: schalte die Lichtszene Abends an und schalte den Fernseher an&lt;br /&gt;
** setControl - alle set Befehle, die mittels eines Flows über die Bridge gesendet werden, werden automatisch ausgeführt. Das Triggern eines Readings ist nicht nötig. Die Steuerung mittels Sprache verhält sich wie beim Wert trigger&lt;br /&gt;
** thirdPartControl - verhält sich wie trigger, bei der Sprachsteuerung ist jedoch ein Anreihen von Sprachbefehlen mittels &amp;quot;und&amp;quot; nicht möglich. Dient der Sprachsteuerung über Module anderer Modulautoren ((z.B. 39_TEERKO.pm)&lt;br /&gt;
&lt;br /&gt;
= AMADDevice - Automagic Android Device =&lt;br /&gt;
Dieses Modul liefert, in Verbindung mit der Android APP Automagic, diverse Informationen von Android Geräten. Die Android App Automagic (die nicht von mir stammt und 2.90 Euro kostet) funktioniert wie Tasker, ist aber bei weitem User freundlicher. &lt;br /&gt;
Mit etwas Einarbeitung können jegliche Informationen, die Automagic bereit stellt in FHEM angezeigt werden. Hierzu bedarf es lediglich eines eigenen Flows, der seine Daten an die AMADDeviceCommBridge sendet. Das Modul gibt auch die Möglichkeit Androidgeräte zu steuern. &lt;br /&gt;
Für all diese Aktionen und Informationen wird auf dem Androidgerät &amp;quot;Automagic&amp;quot; und ein so genannter Flow benötigt. Die App ist über den Google PlayStore zu beziehen. Das benötigte Flowset bekommt man aus dem FHEM Verzeichnis. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Wie genau verwendet man nun AMADDevice? ===&lt;br /&gt;
* sicherstellen, dass als allererstes die AMADCommBridge in FHEM definiert wurde&lt;br /&gt;
* installieren der App &amp;quot;Automagic Premium&amp;quot; aus dem PlayStore&lt;br /&gt;
* installieren des Flowset 74_AMADDeviceautomagicFlowset$VERSION.xml aus dem Ordner $INSTALLFHEM/FHEM/lib/ auf dem Androidgerät&lt;br /&gt;
* aktivieren des Installationsassistanten Flow in Automagic. Wenn man nun Automagic in den Hintergrund schickt, z.B. Hometaste drücken, startet der Assistant und legt automatisch ein Device für das Androidgerät an.&lt;br /&gt;
&lt;br /&gt;
=== Ein AMADDevice Gerät von Hand anlegen. ===&lt;br /&gt;
&lt;br /&gt;
Define&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; AMADDevice &amp;lt;IP-ADRESSE&amp;gt; &amp;lt;AMAD_ID&amp;gt; &amp;lt;REMOTESERVER&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Beispiel ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define WandTabletWohnzimmer AMADDevice 192.168.0.23 123456 Automagic&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Fall wird ein AMADDevice von Hand angelegt. Die AMAD_ID, hier 123456, muß auch exakt so als globale Variable in Automagic eingetragen sein.&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
* airplanemode - Status des Flugmodus&lt;br /&gt;
* androidVersion - aktuell installierte Androidversion&lt;br /&gt;
* automagicState - Statusmeldungen von der Automagic App &#039;&#039;&#039;(Voraussetzung Android &amp;gt;4.3). Ist Android größer 4.3 vorhanden und im Reading steht &amp;quot;wird nicht unterstützt&amp;quot;, muss in den Androideinstellungen unter Ton und Benachrichtigungen -&amp;gt; Benachrichtigungszugriff ein Haken für Automagic gesetzt werden&#039;&#039;&#039;&lt;br /&gt;
* batteryHealth - Zustand der Battery (1=unbekannt, 2=gut, 3=überhitzt, 4=tot, 5=Überspannung, 6=unbekannter Fehler, 7=kalt)&lt;br /&gt;
* batterytemperature - Temperatur der Batterie&lt;br /&gt;
* bluetooth - on/off, Bluetooth Status an oder aus&lt;br /&gt;
* checkActiveTask - Zustand einer zuvor definierten App. 0=nicht aktiv oder nicht aktiv im Vordergrund, 1=aktiv im Vordergrund, &#039;&#039;&#039;siehe Hinweis unten&#039;&#039;&#039;&lt;br /&gt;
* connectedBTdevices - eine Liste der verbundenen Gerät&lt;br /&gt;
* connectedBTdevicesMAC - eine Liste der MAC Adressen aller verbundender BT Geräte&lt;br /&gt;
* currentMusicAlbum - aktuell abgespieltes Musikalbum des verwendeten Mediaplayers&lt;br /&gt;
* currentMusicApp - aktuell verwendeter Mediaplayer (Amazon Music, Google Play Music, Google Play Video, Spotify, YouTube, TuneIn Player, Aldi Life Music)&lt;br /&gt;
* currentMusicArtist - aktuell abgespielter Musikinterpret des verwendeten Mediaplayers&lt;br /&gt;
* currentMusicIcon - Cover vom aktuell abgespielten Album &#039;&#039;&#039;Noch nicht fertig implementiert&#039;&#039;&#039;&lt;br /&gt;
* currentMusicState - Status des aktuellen/zuletzt verwendeten Mediaplayers&lt;br /&gt;
* currentMusicTrack - aktuell abgespielter Musiktitel des verwendeten Mediaplayers&lt;br /&gt;
* daydream - on/off, Daydream gestartet oder nicht&lt;br /&gt;
* deviceState - Status des Androidgerätes. unknown, online, offline.&lt;br /&gt;
* doNotDisturb - aktueller Status des Nicht-Stören-Modus&lt;br /&gt;
* dockingState - undocked/docked Status, ob sich das Gerät in einer Dockingstation befindet.&lt;br /&gt;
* flow_SetCommands - active/inactive, Status des SetCommands Flow&lt;br /&gt;
* flow_informations - active/inactive, Status des Informations Flow&lt;br /&gt;
* flowsetVersionAtDevice - aktuell installierte Flowsetversion auf dem Device&lt;br /&gt;
* incomingCallerName - Anrufername des eingehenden Anrufes&lt;br /&gt;
* incomingCallerNumber - Anrufernummer des eingehenden Anrufes&lt;br /&gt;
* incommingWhatsAppMessageFrom - letzte WhatsApp Nachricht&lt;br /&gt;
* incommingWhatsTelegramMessageFrom - letzte Telegram Nachricht&lt;br /&gt;
* intentRadioName - zuletzt gestreamter Intent Radio Name&lt;br /&gt;
* intentRadioState - Status des IntentRadio Players&lt;br /&gt;
* keyguardSet - 0/1 Displaysperre gesetzt 0=nein 1=ja, bedeutet nicht, dass sie gerade aktiv ist&lt;br /&gt;
* lastSetCommandError - letzte Fehlermeldung vom set Befehl&lt;br /&gt;
* lastSetCommandState - letzter Status vom set Befehl, Befehl erfolgreich/nicht erfolgreich gesendet&lt;br /&gt;
* lastStatusRequestError - letzte Fehlermeldung vom statusRequest Befehl&lt;br /&gt;
* lastStatusRequestState - letzter Status vom statusRequest Befehl, Befehl erfolgreich/nicht erfolgreich gesendet&lt;br /&gt;
* nextAlarmDay - aktiver Alarmtag&lt;br /&gt;
* nextAlarmState - aktueller Status des &amp;quot;Androidinternen&amp;quot; Weckers&lt;br /&gt;
* nextAlarmTime - aktive Alarmzeit&lt;br /&gt;
* powerLevel - Status der Batterie in %&lt;br /&gt;
* powerPlugged - Netzteil angeschlossen? 1=AC Adapter, 2=USB, 4=Kabellos 0=nicht eingesteckt&lt;br /&gt;
* screen - on locked/unlocked, off locked/unlocked gibt an ob der Bildschirm an oder aus ist und gleichzeitig gesperrt oder nicht gesperrt&lt;br /&gt;
* screenBrightness - Bildschirmhelligkeit von 0-255&lt;br /&gt;
* screenFullscreen - on/off, Vollbildmodus (An,Aus)&lt;br /&gt;
* screenOrientation - Landscape,Portrait, Bildschirmausrichtung (Horizontal,Vertikal)&lt;br /&gt;
* screenOrientationMode - auto/manual, Modus für die Ausrichtung (Automatisch, Manuell)&lt;br /&gt;
* state - aktueller Status&lt;br /&gt;
* userFlowState - aktueller Status eines Flows, festgelegt unter dem setUserFlowState Attribut&lt;br /&gt;
* volume - Media Lautstärkewert&lt;br /&gt;
* volumeNotification - Benachrichtigungs-Lautstärke&lt;br /&gt;
&lt;br /&gt;
Beim Reading checkActivTask muß zuvor der Packagename der zu prüfenden App als Attribut checkActiveTask angegeben werden. Beispiel: attr Nexus10Wohnzimmer checkActiveTask com.android.chrome für den Chrome Browser.&lt;br /&gt;
&lt;br /&gt;
=== Set ===&lt;br /&gt;
* activateVoiceInput - aktiviert die Spracheingabe&lt;br /&gt;
* bluetooth - on/off, aktiviert/deaktiviert Bluetooth&lt;br /&gt;
* clearNotificationBar - All,Automagic, löscht alle Meldungen oder nur die Automagic Meldungen in der Statusleiste&lt;br /&gt;
* closeCall - beendet einen laufenden Anruf&lt;br /&gt;
* currentFlowsetUpdate - führt ein Flowsetupdate auf dem Device durch&lt;br /&gt;
* doNotDisturb - schaltet den Nicht-Stören-Modus: always immer stören, never niemals stören, alarmClockOnly nur Wecker darf stören, onlyImportant nur wichtige Störungen&lt;br /&gt;
* installFlowSource - installiert einen Flow auf dem Device, &amp;lt;u&amp;gt;das XML File muss unter /tmp/ liegen und die Endung xml haben. &amp;lt;b&amp;gt;Bsp:&amp;lt;/b&amp;gt; set TabletWohnzimmer installFlowSource WlanUebwerwachen.xml&amp;lt;/u&amp;gt;&lt;br /&gt;
* mediaAmazonMusic - play, stop, next, back ,steuert den Amazon Musik Mediaplayer&lt;br /&gt;
* mediaGoogleMusic - play, stop, next, back ,steuert den Google Play Musik Mediaplayer&lt;br /&gt;
* mediaSpotifyMusic - play, stop, next, back ,steuert den Spotify Mediaplayer&lt;br /&gt;
* mediaTuneinRadio - play, stop, next, back ,steuert den TuneIn Radio Mediaplayer&lt;br /&gt;
* mediaAldiMusic - play, stop, next, back ,steuert den Aldi Musik Mediaplayer&lt;br /&gt;
* mediaAudible - play, stop, next, back ,steuert den Audible Mediaplayer&lt;br /&gt;
* mediaYouTube - play, stop, next, back ,steuert den YouTube Mediaplayer&lt;br /&gt;
* mediaVlcPlayer - play, stop, next, back ,steuert den VLC Mediaplayer&lt;br /&gt;
* nextAlarmTime - setzt die Alarmzeit. gilt aber nur innerhalb der nächsten 24 h&lt;br /&gt;
* openCall - ruft eine Nummer an und legt optional nach X Sekunden auf / set DEVICE openCall 01736458 10 / ruft die Nummer an und beendet den Anruf nach 10s&lt;br /&gt;
* screen - on/off/lock/unlock schaltet den Bildschirm ein/aus oder sperrt/entsperrt ihn&lt;br /&gt;
* screenBrightness - setzt die Bildschirmhelligkeit, von 0-255.&lt;br /&gt;
* screenMsg - versendet eine Bildschirmnachricht&lt;br /&gt;
* sendintent - sendet einen Intentstring Bsp: set $AMADDeviceDEVICE sendIntent org.smblott.intentradio.PLAY url http://stream.klassikradio.de/live/mp3-192/stream.klassikradio.de/play.m3u name Klassikradio, der erste Befehl ist die Aktion und der zweite das Extra. Es können immer zwei Extras mitgegeben werden.&lt;br /&gt;
* sendSMS - sendet eine SMS an eine bestimmte Telefonnummer. Bsp.: sendSMS Dies ist ein Test|555487263&lt;br /&gt;
* startDaydream - startet den Daydream&lt;br /&gt;
* statusRequest - Fordert einen neuen Statusreport beim Device an. Es können nicht von allen Readings per statusRequest die Daten geholt werden. Einige wenige geben nur bei Statusänderung ihren Status wieder.&lt;br /&gt;
* timer - setzt einen Timer innerhalb der als Standard definierten Clock-App auf dem Device. Es können nur Sekunden angegeben werden.&lt;br /&gt;
* ttsMsg - versendet eine Nachricht, die als Sprachnachricht ausgegeben wird&lt;br /&gt;
* userFlowState - aktiviert oder deaktiviert einen oder mehrere Flows,&#039;&#039;&#039;set Nexus7Wohnzimmer Badezimmer vorheizen:inactive oder set Nexus7Wohnzimmer Badezimmer vorheizen,Nachtlicht Steven:inactive&#039;&#039;&#039;&lt;br /&gt;
* vibrate - lässt das Androidgerät vibrieren&lt;br /&gt;
* volume - setzt die Medialautstärke. Entweder die internen Lautsprecher oder sofern angeschlossen die Bluetoothlautsprecher und per Klinkenstecker angeschlossene Lautsprecher, + oder - vor dem Wert reduziert die aktuelle Lautstärke um den Wert. Der maximale Sliderwert kann über das Attribut setVolMax geregelt werden.&lt;br /&gt;
* volumeUp - erhöht die Lautstärke um den angegeben Wert im entsprechenden Attribut. Ist kein Attribut angegeben wird per default 2 genommen.&lt;br /&gt;
* volumeDown - reduziert die Lautstärke um den angegeben Wert im entsprechenden Attribut. Ist kein Attribut angegeben wird per default 2 genommen.&lt;br /&gt;
* volumeNotification - setzt die Benachrichtigungslautstärke.&lt;br /&gt;
&lt;br /&gt;
==== Set abhängig von gesetzten Attributen ====&lt;br /&gt;
* changetoBtDevice - wechselt zu einem anderen Bluetooth Gerät. Attribut setBluetoothDevice muß gesetzt sein. Siehe Hinweis unten!&lt;br /&gt;
* notifySndFile - spielt die angegebene Mediadatei auf dem Androidgerät ab. Die aufzurufende Mediadatei sollte sich im Ordner /storage/emulated/0/Notifications/ befinden. Ist dies nicht der Fall kann man über das Attribut setNotifySndFilePath einen Pfad vorgeben.&lt;br /&gt;
* openApp - öffnet eine ausgewählte App. Attribut setOpenApp&lt;br /&gt;
* openURL - öffnet eine URL im Standardbrowser, sofern kein anderer Browser über das Attribut setOpenUrlBrowser ausgewählt wurde. Bsp: attr Tablet setOpenUrlBrowser de.ozerov.fully|de.ozerov.fully.MainActivity, das erste ist der Package Name und das zweite der Class Name&lt;br /&gt;
* setAPSSID - setzt die AccessPoint SSID um ein WLAN sleep zu verhindern&lt;br /&gt;
* setScreenOnForTimer ändert die Zeitdauer, die das Display an bleiben soll!&lt;br /&gt;
* screenFullscreen - on/off, (aktiviert/deaktiviert) den Vollbildmodus. Attribut setFullscreen&lt;br /&gt;
* screenLock - Sperrt den Bildschirm mit Pinabfrage. Attribut setScreenlockPIN - hier die Pin dafür eingeben. Erlaubt sind nur Zahlen. Es müßen mindestens 4, bis max 16 Zeichen verwendet werden.&lt;br /&gt;
* screenOrientation - Auto,Landscape,Portait, aktiviert die Bildschirmausrichtung (Automatisch,Horizontal,Vertikal). Attribut setScreenOrientation&lt;br /&gt;
* system - setzt Systembefehle ab (nur bei gerootetet Geräten). reboot,shutdown,airplanemodeON (kann nur aktiviert werden) Attribut root, in den Automagic Einstellungen muss &amp;quot;Root Funktion&amp;quot; gesetzt werden&lt;br /&gt;
* setNotifySndFilePath - setzt den korrekten Systempfad zur Notifydatei (default ist /storage/emulated/0/Notifications/&lt;br /&gt;
* setTtsMsgSpeed - setzt die Sprachgeschwindigkeit bei der Sprachausgabe(Werte zwischen 0.5 bis 4.0 in 0.5er Schritten) default ist 1.0&lt;br /&gt;
* setTtsMsgSpeed - setzt die Sprache bei der Sprachausgabe, de oder en (default ist de)&lt;br /&gt;
* setVolUpDownStep - setzt den Step für volumeUp und volumeDown&lt;br /&gt;
* setVolMax - setzt die maximale Volume Größe für den Slider&lt;br /&gt;
* setNotifyVolMax - setzt den maximalen Lautstärkewert für Benachrichtigungslautstärke für den Slider&lt;br /&gt;
* setRingSoundVolMax - setzt den maximalen Lautstärkewert für Klingellautstärke für den Slider&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Um openApp verwenden zu können, muss als Attribut der Package Name der App angegeben werden. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Um zwischen Bluetoothgeräten wechseln zu können, muss das Attribut setBluetoothDevice mit folgender Syntax gesetzt werden. attr &amp;lt;DEVICE&amp;gt; BTdeviceName1|MAC,BTDeviceName2|MAC Es muss zwingend darauf geachtet werden, dass beim BTdeviceName kein Leerzeichen vorhanden ist. Am besten zusammen oder mit Unterstrich. Bei der MAC ist darauf zu achten, dass wirklich nach jeder zweiten Zahl ein : steht&lt;br /&gt;
&lt;br /&gt;
** &#039;&#039;&#039;Beispiel: attr Nexus10Wohnzimmer setBluetoothDevice Logitech_BT_Adapter|AB:12:CD:34:EF:32,Anker_A3565|GH:56:IJ:78:KL:76&lt;br /&gt;
&lt;br /&gt;
=== state ===&lt;br /&gt;
* initialized - Ist der Status kurz nach einem define.&lt;br /&gt;
* active - die Geräteinstanz ist im aktiven Status.&lt;br /&gt;
* disabled - die Geräteinstanz wurde über das Attribut disable deaktiviert&lt;br /&gt;
&lt;br /&gt;
==Anwendungsbeispiele==&lt;br /&gt;
=== Lademanagement ===&lt;br /&gt;
Ich habe die Ladegeräte für meine Androidgeräte an Funkschaltsteckdosen. Ein DOIF schaltet bei unter 30% die Steckdose ein und bei über 90% wieder aus.&lt;br /&gt;
&lt;br /&gt;
Hier mal ein einfaches DOIF Beispiel für ein Lademanagment&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
... DOIF ([Nexus5Handy:powerLevel] &amp;lt; 30) (set LadenetzteilNexus5Handy:FILTER=STATE=off on) DOELSEIF ([Nexus5Handy:powerLevel] &amp;gt; 90) (set LadenetzteilNexus5Handy:FILTER=STATE=on off) DOELSE&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Wecker ===&lt;br /&gt;
Morgens lasse ich mich über mein Tablet im Schlafzimmer mit Musik wecken. Verwendet wird hierzu der wakeuptimer des RESIDENTS Modules. Das Abspielen stoppe ich dann von Hand. Danach erfolgt noch eine Ansage wie das Wetter gerade ist und wird.&lt;br /&gt;
&lt;br /&gt;
=== Mediacenter ===&lt;br /&gt;
Mein 10&amp;quot; Tablet im Wohnzimmer ist Mediaplayer für das Wohnzimmer mit Bluetoothlautsprechern. Die Lautstärke wird automatisch heruntergesetzt, wenn die Fritzbox einen Anruf auf das Wohnzimmer Handgerät signalisiert.&lt;br /&gt;
&lt;br /&gt;
=== Sprachbefehl - Abfragen von Zuständen diverser Sensoren ===&lt;br /&gt;
Wenn ich die Spracheingabe aktiviere und nach der Temperatur im Wohnzimmer frage, bekomme ich diese angesagt.&lt;br /&gt;
&lt;br /&gt;
Der Teil im Feld Daten ist ein klassisches ReadingsVal, halt nur ohne Komma und ohne Anführungszeichen&lt;br /&gt;
&lt;br /&gt;
WIRD GERADE ÜBERARBEITET&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Schaltbefehle vom Androidgerät an FHEM senden ===&lt;br /&gt;
Hierfür ist ein eigener Flow einzurichten. Wie das genau geht, verrät die Hilfe.&lt;br /&gt;
Um einen Schaltbefehl für FHEM zu erstellen, folgt nach dem Trigger eine Aktion als Script (Aktion Type: Script). Hier ist folgendes einzutragen:&lt;br /&gt;
&lt;br /&gt;
setcmd = &amp;quot;LichtWohnzimmerLampeRechts on&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;set&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In der ersten Zeile wird also der Schaltbefehl in der Variablem setcmd eingetragen und in der zweiten Zeile der FHEM Befehl in der Variablen fhemcmd.&lt;br /&gt;
&lt;br /&gt;
Danach müsst Ihr nur noch in einer weiteren Aktion den Flow &amp;quot;Send Data to AMADCommBridge&amp;quot; ausführen (Aktion Type: Flows ausführen). Die Aktion sollte bereits in Eurer Liste Vorhanden sein.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Screenshot_20160717-134948.png|200px]]&lt;br /&gt;
[[Datei:Screenshot 17.07.2016 1-50-27.png|200px]]&lt;br /&gt;
&lt;br /&gt;
Nun sollte Lampe1 angeschalten werden, wenn der Flow ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
=== Mit FHEM ein Flow ausführen ===&lt;br /&gt;
In Automagic einen Triggervom Type General Broadcast für den Flow wählen welchen man fern ausführen möchte. In der Trigger Definition steht unter Aktion &#039;&#039;automagic.NameDesFlows&#039;&#039; und auf Wunsch unter Access Intent Extra&#039;s &#039;&#039;param1 = getString(&amp;quot;label1&amp;quot;); param2 = getString(&amp;quot;label2&amp;quot;);&#039;&#039;. &#039;&#039;NameDesFlows&#039;&#039; ist natürlich die Name des Flows, der kein Leerzeichen enthält. Mit ein FHEM Command &#039;set &#039;&#039;AMADDevice&#039;&#039; sendIntent &#039;&#039;automagic.namederflow label1 param1 label2 param2&#039;&#039;&#039; wird dann der Flow aus geführt.&lt;br /&gt;
&lt;br /&gt;
=== Lister aller Variablen für die AMADCommandBridge ===&lt;br /&gt;
fhemcmd Variable &lt;br /&gt;
* Wert &amp;quot;set&amp;quot; - Variable für den Schaltbefehl &#039;setcmd&#039;&lt;br /&gt;
* Wert &amp;quot;setreading&amp;quot; - Variable für die Readingswerte &#039;fhemdata&#039;&lt;br /&gt;
* &amp;quot;readingsval&amp;quot; - Variable für die Abfragewerte &#039;readingsvalcmd&#039;&lt;br /&gt;
* &amp;quot;fhemfunc&amp;quot; - Variable für den Funktionsnamen &#039;fhemsub&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele für Skriptinhalte:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Schalten einer Lampe&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
setcmd = &amp;quot;LichtWohnzimmerLampeRechts on&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;set&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Status eines Device abfragen&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
readingsvalcmd = &amp;quot;DEVICE READING DEFAULT&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;readingsval&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Rückgabevariable, die dann weiter verarbeitet werden kann, heißt &#039;&#039;&#039;respreadingsval&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Aufruf einer 99_myUtils Subroutine&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
fhemsub = &amp;quot;mySub()&amp;quot;; oder natürlich auch &amp;quot;mySub(&#039;was_auch_immer&#039;)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;fhemfunc&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Rückgabevariable, die dann weiter verarbeitet werden kann, heißt &#039;&#039;&#039;respfhemfunc&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Bekannte Meldungen/Hinweise/Probleme ==&lt;br /&gt;
&lt;br /&gt;
Wenn auf dem Android-Gerät die Fehlermeldung &#039;Accessibility service not running&#039; von Automagic kommt oder im FHEM das reading state  &#039;Flow Informations mit Fehler beendet&#039; steht, dann muss der Accessibility Service auf dem Android-Device aktiviert werden: Einstellungen --&amp;gt; Bedienungshilfen --&amp;gt; Automagic Premium. Hier muss der Schalter auf &#039;an&#039; stehen. Sollte dies der Fall sein, hilft u.U. ein kurzes Aus- und wieder Einschalten.&lt;br /&gt;
&lt;br /&gt;
Gerät wird oft als offline angezeigt und es können keine set Befehle abgesetzt werden.&lt;br /&gt;
Mit der AMAD Version 2.2 hielt eine neue Behandlung des deviceState Readings Einzug. Das Reading stellt nun den tatsächlichen Status des Gerätes gegenüber FHEM da. Bei vielen Android 6 Geräten kommt es aber auf Grund vom DeepSleep Modus zum Wegfall der WLAN Verbindung. Hier hilft die neue KeepAlive Funktion in AMAD. Dafür muß lediglich unter &lt;br /&gt;
* Einstellungen --&amp;gt; Akku --&amp;gt; oben auf die drei Punkte - Akku Leistungsoptimierung --&amp;gt; alle Apps und dann Automagic auswählen und &amp;quot;Nicht optimieren&amp;quot;&lt;br /&gt;
ausgewählt werden und in FHEM für das Device das Attribut setAPSSID gesetzt werden. Alles andere macht das Modul selbst.&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=AMAD&amp;diff=27649</id>
		<title>AMAD</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=AMAD&amp;diff=27649"/>
		<updated>2018-08-10T14:42:20Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: /* Warum AMADNG */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuern von Androidgeräten und Anzeige von bestimmten Informationen dieser Geräte&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Sonstige Systeme&lt;br /&gt;
|ModTechName=73_AMADCommBridge.pm, 74_AMADDevice.pm&lt;br /&gt;
|ModOwner=CoolTux &amp;lt;br /&amp;gt;([http://forum.fhem.de/index.php?action=profile;u=13684 Forum] / [[Benutzer:CoolTux|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= AMAD 4.0 [AMADNG] =&lt;br /&gt;
== 73_AMADCommBridge / 74_AMADDevice ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Vorwort =&lt;br /&gt;
=== Warum AMADNG ===&lt;br /&gt;
Nach fast 6 Monaten Entwicklungszeit wurde die neuste AMAD Version am 24.07.2017 offiziell frei gegeben. Diesmal lagen mir mehrere Dinge am Herzen.&lt;br /&gt;
In erster Linie wollte ich eine softwareseitige Trennung der AMADCommBridge vom eigentlichen Android Device. Daher ist die neue Version ein zweistufiges Modul geworden.&lt;br /&gt;
Im Laufe der Entwicklung kamen auch andere Anforderungen hinzu, die ich dann fähig war umzusetzen. Eine dieser Anforderungen war eine einfachere und besser funktionierende Installation. Herausgekommen ist ein Android Installationsassistant.&lt;br /&gt;
Mit ihm wird auf einfache Art und Weise direkt per Sprachführung und Eingabedialogen Automagic für AMAD konfiguriert und das Device in FHEM automatisch erstellt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Es ist darauf zu achten, das Autocreate aktiv ist, da sonst kein Device mit Hilfe des Assistenten angelegt werden kann!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Vorstellung =&lt;br /&gt;
Dieses 2-stufige Modul liefert, &#039;&#039;&#039;in Verbindung mit der Android App Automagic&#039;&#039;&#039;, diverse Informationen von Android Geräten. &lt;br /&gt;
Die AndroidAPP Automagic (die nicht von mir stammt und 2.90 Euro kostet) funktioniert wie Tasker, ist aber bei weitem benutzungsfreundlicher.&lt;br /&gt;
&lt;br /&gt;
=== Features / Funktionen ===&lt;br /&gt;
Im Auslieferungszustand werden folgende Zustände dargestellt:&lt;br /&gt;
* installierte Android Version&lt;br /&gt;
* Zustand von Automagic auf dem Gerät&lt;br /&gt;
* Spracheingabe&lt;br /&gt;
* Bluetooth An/Aus&lt;br /&gt;
* Zustand einer definierten App (läuft aktiv im Vordergrund oder nicht?)&lt;br /&gt;
* verbundene Bluetoothgeräte, inklusive deren MAC Adresse&lt;br /&gt;
* aktuell abgespieltes Musikalbum des verwendeten Mediaplayers&lt;br /&gt;
* aktuell abgespielter Musikinterpret des verwendeten Mediaplayers&lt;br /&gt;
* aktuell abgespielter Musiktitel des verwendeten Mediaplayers&lt;br /&gt;
* Status des Androidgerätes - Online/Offline&lt;br /&gt;
* nächster Alarmtag&lt;br /&gt;
* nächste Alarmzeit&lt;br /&gt;
* Batteriestatus in %&lt;br /&gt;
* Ladestatus - Netztei angeschlossen / nicht angeschlossen&lt;br /&gt;
* Bildschirmstatus An/Aus&lt;br /&gt;
* Bildschirmhelligkeit&lt;br /&gt;
* Vollbildmodus An/Aus&lt;br /&gt;
* Bildschirmausrichtung Auto/Landscape/Portrait&lt;br /&gt;
* Standardlautstärke&lt;br /&gt;
* Media Lautstärke&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Mit etwas Einarbeitung können jegliche Informationen, die Automagic bereit stellt, in FHEM angezeigt werden. Hierzu bedarf es lediglich eines eigenen Flows, der seine Daten an die AMADCommBridge sendet. Das Modul gibt auch die Möglichkeit Androidgeräte zu steuern.&lt;br /&gt;
&lt;br /&gt;
= AMADCommBridge - Kommunikationsbrücke für alle AMAD Geräte =&lt;br /&gt;
Dieses Modul ist das Ausgangsmodul zur erfolgreichen Integration von Androidgeräten in FHEM. Es stellt ferner eine Verbindungsebene zwischen AMAD unterstützten Geräten und FHEM zur Verfügung. Alle Kommunikation zwischen AMAD Android und FHEM läuft über diese Schnittstelle.&lt;br /&gt;
Daher erfolgt die Ersteinrichtung eines AMAD Devices auch genau über diese Modulinstanz. &lt;br /&gt;
&lt;br /&gt;
Damit erfolgreich ein Androidgerät in FHEM eingerichtet werden kann, muss im ersten Schritt ein AMADCommBridge Device angelegt werden.&lt;br /&gt;
&lt;br /&gt;
=== Definition in FHEM ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; AMADCommBridge&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== Beispiel ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define AMADBridge AMADCommBridge&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Anweisung erstellt ein neues AMADCommBridge Device namens AMADBridge.&lt;br /&gt;
&lt;br /&gt;
Im folgenden muß lediglich das Flowset auf dem Android Gerät installiert werden und der Flow &#039;First Run Assistent&#039; ausgeführt werden. (einfach den Homebutton drücken)&lt;br /&gt;
Der Assistent geleitet dann durch die Einrichtung des AMAD Gerätes und sorgt dafür, dass am Ende des Installationsprozess das Androidgerät als AMAD Device in FHEM angelegt wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
* JSON_ERROR - JSON Fehlermeldung, die von Perl gemeldet wird&lt;br /&gt;
* JSON_ERROR_STRING - der String, der die JSON Fehlermeldung verursacht hat&lt;br /&gt;
* fhemServerIP - die Ip-Adresse des FHEM Servers; wird vom Modul auf Basis des JSON Strings vom Installationsassistenten gesetzt. Kann aber auch mittels set Befehles vom User gesetzt werden&lt;br /&gt;
* receiveFhemCommand - ist das Attribut fhemControlMode auf trigger gestellt, wird das Reading gesetzt sobald ein FHEM Befehl übersendet wird. Hierauf kann dann ein Notify triggern. Wird anstelle von trigger setControl als Wert für fhemControlMode eingestellt, wird das Reading nicht gesetzt sondern der set Befehl sofort ausgeführt.&lt;br /&gt;
* receiveVoiceCommand - wird die Sprachsteuerung von AMAD aktiviert (set DEVICE activateVoiceInput) so wird der letzte erkannten Sprachbefehle in dieses Reading geschrieben.&lt;br /&gt;
* receiveVoiceDevice - Name des Devices von wo aus der letzte erkannte Sprachbefehl gesendet wurde&lt;br /&gt;
* state - Status der Bridge, open, closed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
* allowFrom - Regexp der erlaubten IP-Adressen oder Hostnamen. Wenn dieses Attribut gesetzt wurde, werden ausschließlich Verbindungen von diesen Adressen akzeptiert. Achtung: falls allowfrom nicht gesetzt ist, und keine gütige allowed Instanz definiert ist, und die Gegenstelle eine nicht lokale Adresse hat, dann wird die Verbindung abgewiesen. Folgende Adressen werden als local betrachtet: IPV4: 127/8, 10/8, 192.168/16, 172.16/10, 169.254/16, IPV6: ::1, fe80/10&lt;br /&gt;
* debugJSON - wenn auf 1 gesetzt, werden JSON Fehlermeldungen in Readings geschrieben. Siehe hierzu JSON_ERROR* unter Readings&lt;br /&gt;
* fhemControlMode - steuert die zulässige Art der Steuerung von FHEM Devices. Es können über die Bridge auf 2 Arten FHEM-Devices angesteuert werden: per direktem FHEM-Befehl aus einem Flow heraus oder als Sprachbefehl mittels Sprachsteuerung (set DEVICE activateVoiceInput)&lt;br /&gt;
** trigger - ist der Wert trigger gesetzt, werden alle an die Bridge gesendeten FHEM set Befehle in das Reading receiveFhemCommand geschrieben und können so mittels notify ausgeführt werden. Sprachsteuerung ist möglich, es werden Readings receiveVoice* gesetzt. Auf dem Androidgerät können bei Sprachsteuerung mehrere Sprachbefehle mittels &amp;quot;und&amp;quot; verknüpft/aneinander gereiht werden. Bsp: schalte die Lichtszene Abends an und schalte den Fernseher an&lt;br /&gt;
** setControl - alle set Befehle, die mittels eines Flows über die Bridge gesendet werden, werden automatisch ausgeführt. Das Triggern eines Readings ist nicht nötig. Die Steuerung mittels Sprache verhält sich wie beim Wert trigger&lt;br /&gt;
** thirdPartControl - verhält sich wie trigger, bei der Sprachsteuerung ist jedoch ein Anreihen von Sprachbefehlen mittels &amp;quot;und&amp;quot; nicht möglich. Dient der Sprachsteuerung über Module anderer Modulautoren ((z.B. 39_TEERKO.pm)&lt;br /&gt;
&lt;br /&gt;
= AMADDevice - Automagic Android Device =&lt;br /&gt;
Dieses Modul liefert, in Verbindung mit der Android APP Automagic, diverse Informationen von Android Geräten. Die Android App Automagic (die nicht von mir stammt und 2.90 Euro kostet) funktioniert wie Tasker, ist aber bei weitem User freundlicher. &lt;br /&gt;
Mit etwas Einarbeitung können jegliche Informationen, die Automagic bereit stellt in FHEM angezeigt werden. Hierzu bedarf es lediglich eines eigenen Flows, der seine Daten an die AMADDeviceCommBridge sendet. Das Modul gibt auch die Möglichkeit Androidgeräte zu steuern. &lt;br /&gt;
Für all diese Aktionen und Informationen wird auf dem Androidgerät &amp;quot;Automagic&amp;quot; und ein so genannter Flow benötigt. Die App ist über den Google PlayStore zu beziehen. Das benötigte Flowset bekommt man aus dem FHEM Verzeichnis. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Wie genau verwendet man nun AMADDevice? ===&lt;br /&gt;
* sicherstellen, dass als allererstes die AMADCommBridge in FHEM definiert wurde&lt;br /&gt;
* installieren der App &amp;quot;Automagic Premium&amp;quot; aus dem PlayStore&lt;br /&gt;
* installieren des Flowset 74_AMADDeviceautomagicFlowset$VERSION.xml aus dem Ordner $INSTALLFHEM/FHEM/lib/ auf dem Androidgerät&lt;br /&gt;
* aktivieren des Installationsassistanten Flow in Automagic. Wenn man nun Automagic in den Hintergrund schickt, z.B. Hometaste drücken, startet der Assistant und legt automatisch ein Device für das Androidgerät an.&lt;br /&gt;
&lt;br /&gt;
=== Ein AMADDevice Gerät von Hand anlegen. ===&lt;br /&gt;
&lt;br /&gt;
Define&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; AMADDevice &amp;lt;IP-ADRESSE&amp;gt; &amp;lt;AMAD_ID&amp;gt; &amp;lt;REMOTESERVER&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Beispiel ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define WandTabletWohnzimmer AMADDevice 192.168.0.23 123456 Automagic&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Fall wird ein AMADDevice von Hand angelegt. Die AMAD_ID, hier 123456, muß auch exakt so als globale Variable in Automagic eingetragen sein.&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
* airplanemode - Status des Flugmodus&lt;br /&gt;
* androidVersion - aktuell installierte Androidversion&lt;br /&gt;
* automagicState - Statusmeldungen von der Automagic App &#039;&#039;&#039;(Voraussetzung Android &amp;gt;4.3). Ist Android größer 4.3 vorhanden und im Reading steht &amp;quot;wird nicht unterstützt&amp;quot;, muss in den Androideinstellungen unter Ton und Benachrichtigungen -&amp;gt; Benachrichtigungszugriff ein Haken für Automagic gesetzt werden&#039;&#039;&#039;&lt;br /&gt;
* batteryHealth - Zustand der Battery (1=unbekannt, 2=gut, 3=überhitzt, 4=tot, 5=Überspannung, 6=unbekannter Fehler, 7=kalt)&lt;br /&gt;
* batterytemperature - Temperatur der Batterie&lt;br /&gt;
* bluetooth - on/off, Bluetooth Status an oder aus&lt;br /&gt;
* checkActiveTask - Zustand einer zuvor definierten App. 0=nicht aktiv oder nicht aktiv im Vordergrund, 1=aktiv im Vordergrund, &#039;&#039;&#039;siehe Hinweis unten&#039;&#039;&#039;&lt;br /&gt;
* connectedBTdevices - eine Liste der verbundenen Gerät&lt;br /&gt;
* connectedBTdevicesMAC - eine Liste der MAC Adressen aller verbundender BT Geräte&lt;br /&gt;
* currentMusicAlbum - aktuell abgespieltes Musikalbum des verwendeten Mediaplayers&lt;br /&gt;
* currentMusicApp - aktuell verwendeter Mediaplayer (Amazon Music, Google Play Music, Google Play Video, Spotify, YouTube, TuneIn Player, Aldi Life Music)&lt;br /&gt;
* currentMusicArtist - aktuell abgespielter Musikinterpret des verwendeten Mediaplayers&lt;br /&gt;
* currentMusicIcon - Cover vom aktuell abgespielten Album &#039;&#039;&#039;Noch nicht fertig implementiert&#039;&#039;&#039;&lt;br /&gt;
* currentMusicState - Status des aktuellen/zuletzt verwendeten Mediaplayers&lt;br /&gt;
* currentMusicTrack - aktuell abgespielter Musiktitel des verwendeten Mediaplayers&lt;br /&gt;
* daydream - on/off, Daydream gestartet oder nicht&lt;br /&gt;
* deviceState - Status des Androidgerätes. unknown, online, offline.&lt;br /&gt;
* doNotDisturb - aktueller Status des Nicht-Stören-Modus&lt;br /&gt;
* dockingState - undocked/docked Status, ob sich das Gerät in einer Dockingstation befindet.&lt;br /&gt;
* flow_SetCommands - active/inactive, Status des SetCommands Flow&lt;br /&gt;
* flow_informations - active/inactive, Status des Informations Flow&lt;br /&gt;
* flowsetVersionAtDevice - aktuell installierte Flowsetversion auf dem Device&lt;br /&gt;
* incomingCallerName - Anrufername des eingehenden Anrufes&lt;br /&gt;
* incomingCallerNumber - Anrufernummer des eingehenden Anrufes&lt;br /&gt;
* incommingWhatsAppMessageFrom - letzte WhatsApp Nachricht&lt;br /&gt;
* incommingWhatsTelegramMessageFrom - letzte Telegram Nachricht&lt;br /&gt;
* intentRadioName - zuletzt gestreamter Intent Radio Name&lt;br /&gt;
* intentRadioState - Status des IntentRadio Players&lt;br /&gt;
* keyguardSet - 0/1 Displaysperre gesetzt 0=nein 1=ja, bedeutet nicht, dass sie gerade aktiv ist&lt;br /&gt;
* lastSetCommandError - letzte Fehlermeldung vom set Befehl&lt;br /&gt;
* lastSetCommandState - letzter Status vom set Befehl, Befehl erfolgreich/nicht erfolgreich gesendet&lt;br /&gt;
* lastStatusRequestError - letzte Fehlermeldung vom statusRequest Befehl&lt;br /&gt;
* lastStatusRequestState - letzter Status vom statusRequest Befehl, Befehl erfolgreich/nicht erfolgreich gesendet&lt;br /&gt;
* nextAlarmDay - aktiver Alarmtag&lt;br /&gt;
* nextAlarmState - aktueller Status des &amp;quot;Androidinternen&amp;quot; Weckers&lt;br /&gt;
* nextAlarmTime - aktive Alarmzeit&lt;br /&gt;
* powerLevel - Status der Batterie in %&lt;br /&gt;
* powerPlugged - Netzteil angeschlossen? 1=AC Adapter, 2=USB, 4=Kabellos 0=nicht eingesteckt&lt;br /&gt;
* screen - on locked/unlocked, off locked/unlocked gibt an ob der Bildschirm an oder aus ist und gleichzeitig gesperrt oder nicht gesperrt&lt;br /&gt;
* screenBrightness - Bildschirmhelligkeit von 0-255&lt;br /&gt;
* screenFullscreen - on/off, Vollbildmodus (An,Aus)&lt;br /&gt;
* screenOrientation - Landscape,Portrait, Bildschirmausrichtung (Horizontal,Vertikal)&lt;br /&gt;
* screenOrientationMode - auto/manual, Modus für die Ausrichtung (Automatisch, Manuell)&lt;br /&gt;
* state - aktueller Status&lt;br /&gt;
* userFlowState - aktueller Status eines Flows, festgelegt unter dem setUserFlowState Attribut&lt;br /&gt;
* volume - Media Lautstärkewert&lt;br /&gt;
* volumeNotification - Benachrichtigungs-Lautstärke&lt;br /&gt;
&lt;br /&gt;
Beim Reading checkActivTask muß zuvor der Packagename der zu prüfenden App als Attribut checkActiveTask angegeben werden. Beispiel: attr Nexus10Wohnzimmer checkActiveTask com.android.chrome für den Chrome Browser.&lt;br /&gt;
&lt;br /&gt;
=== Set ===&lt;br /&gt;
* activateVoiceInput - aktiviert die Spracheingabe&lt;br /&gt;
* bluetooth - on/off, aktiviert/deaktiviert Bluetooth&lt;br /&gt;
* clearNotificationBar - All,Automagic, löscht alle Meldungen oder nur die Automagic Meldungen in der Statusleiste&lt;br /&gt;
* closeCall - beendet einen laufenden Anruf&lt;br /&gt;
* currentFlowsetUpdate - führt ein Flowsetupdate auf dem Device durch&lt;br /&gt;
* doNotDisturb - schaltet den Nicht-Stören-Modus: always immer stören, never niemals stören, alarmClockOnly nur Wecker darf stören, onlyImportant nur wichtige Störungen&lt;br /&gt;
* installFlowSource - installiert einen Flow auf dem Device, &amp;lt;u&amp;gt;das XML File muss unter /tmp/ liegen und die Endung xml haben. &amp;lt;b&amp;gt;Bsp:&amp;lt;/b&amp;gt; set TabletWohnzimmer installFlowSource WlanUebwerwachen.xml&amp;lt;/u&amp;gt;&lt;br /&gt;
* mediaAmazonMusic - play, stop, next, back ,steuert den Amazon Musik Mediaplayer&lt;br /&gt;
* mediaGoogleMusic - play, stop, next, back ,steuert den Google Play Musik Mediaplayer&lt;br /&gt;
* mediaSpotifyMusic - play, stop, next, back ,steuert den Spotify Mediaplayer&lt;br /&gt;
* mediaTuneinRadio - play, stop, next, back ,steuert den TuneIn Radio Mediaplayer&lt;br /&gt;
* mediaAldiMusic - play, stop, next, back ,steuert den Aldi Musik Mediaplayer&lt;br /&gt;
* mediaAudible - play, stop, next, back ,steuert den Audible Mediaplayer&lt;br /&gt;
* mediaYouTube - play, stop, next, back ,steuert den YouTube Mediaplayer&lt;br /&gt;
* mediaVlcPlayer - play, stop, next, back ,steuert den VLC Mediaplayer&lt;br /&gt;
* nextAlarmTime - setzt die Alarmzeit. gilt aber nur innerhalb der nächsten 24 h&lt;br /&gt;
* openCall - ruft eine Nummer an und legt optional nach X Sekunden auf / set DEVICE openCall 01736458 10 / ruft die Nummer an und beendet den Anruf nach 10s&lt;br /&gt;
* screen - on/off/lock/unlock schaltet den Bildschirm ein/aus oder sperrt/entsperrt ihn&lt;br /&gt;
* screenBrightness - setzt die Bildschirmhelligkeit, von 0-255.&lt;br /&gt;
* screenMsg - versendet eine Bildschirmnachricht&lt;br /&gt;
* sendintent - sendet einen Intentstring Bsp: set $AMADDeviceDEVICE sendIntent org.smblott.intentradio.PLAY url http://stream.klassikradio.de/live/mp3-192/stream.klassikradio.de/play.m3u name Klassikradio, der erste Befehl ist die Aktion und der zweite das Extra. Es können immer zwei Extras mitgegeben werden.&lt;br /&gt;
* sendSMS - sendet eine SMS an eine bestimmte Telefonnummer. Bsp.: sendSMS Dies ist ein Test|555487263&lt;br /&gt;
* startDaydream - startet den Daydream&lt;br /&gt;
* statusRequest - Fordert einen neuen Statusreport beim Device an. Es können nicht von allen Readings per statusRequest die Daten geholt werden. Einige wenige geben nur bei Statusänderung ihren Status wieder.&lt;br /&gt;
* timer - setzt einen Timer innerhalb der als Standard definierten Clock-App auf dem Device. Es können nur Sekunden angegeben werden.&lt;br /&gt;
* ttsMsg - versendet eine Nachricht, die als Sprachnachricht ausgegeben wird&lt;br /&gt;
* userFlowState - aktiviert oder deaktiviert einen oder mehrere Flows,&#039;&#039;&#039;set Nexus7Wohnzimmer Badezimmer vorheizen:inactive oder set Nexus7Wohnzimmer Badezimmer vorheizen,Nachtlicht Steven:inactive&#039;&#039;&#039;&lt;br /&gt;
* vibrate - lässt das Androidgerät vibrieren&lt;br /&gt;
* volume - setzt die Medialautstärke. Entweder die internen Lautsprecher oder sofern angeschlossen die Bluetoothlautsprecher und per Klinkenstecker angeschlossene Lautsprecher, + oder - vor dem Wert reduziert die aktuelle Lautstärke um den Wert. Der maximale Sliderwert kann über das Attribut setVolMax geregelt werden.&lt;br /&gt;
* volumeUp - erhöht die Lautstärke um den angegeben Wert im entsprechenden Attribut. Ist kein Attribut angegeben wird per default 2 genommen.&lt;br /&gt;
* volumeDown - reduziert die Lautstärke um den angegeben Wert im entsprechenden Attribut. Ist kein Attribut angegeben wird per default 2 genommen.&lt;br /&gt;
* volumeNotification - setzt die Benachrichtigungslautstärke.&lt;br /&gt;
&lt;br /&gt;
==== Set abhängig von gesetzten Attributen ====&lt;br /&gt;
* changetoBtDevice - wechselt zu einem anderen Bluetooth Gerät. Attribut setBluetoothDevice muß gesetzt sein. Siehe Hinweis unten!&lt;br /&gt;
* notifySndFile - spielt die angegebene Mediadatei auf dem Androidgerät ab. Die aufzurufende Mediadatei sollte sich im Ordner /storage/emulated/0/Notifications/ befinden. Ist dies nicht der Fall kann man über das Attribut setNotifySndFilePath einen Pfad vorgeben.&lt;br /&gt;
* openApp - öffnet eine ausgewählte App. Attribut setOpenApp&lt;br /&gt;
* openURL - öffnet eine URL im Standardbrowser, sofern kein anderer Browser über das Attribut setOpenUrlBrowser ausgewählt wurde. Bsp: attr Tablet setOpenUrlBrowser de.ozerov.fully|de.ozerov.fully.MainActivity, das erste ist der Package Name und das zweite der Class Name&lt;br /&gt;
* setAPSSID - setzt die AccessPoint SSID um ein WLAN sleep zu verhindern&lt;br /&gt;
* setScreenOnForTimer ändert die Zeitdauer, die das Display an bleiben soll!&lt;br /&gt;
* screenFullscreen - on/off, (aktiviert/deaktiviert) den Vollbildmodus. Attribut setFullscreen&lt;br /&gt;
* screenLock - Sperrt den Bildschirm mit Pinabfrage. Attribut setScreenlockPIN - hier die Pin dafür eingeben. Erlaubt sind nur Zahlen. Es müßen mindestens 4, bis max 16 Zeichen verwendet werden.&lt;br /&gt;
* screenOrientation - Auto,Landscape,Portait, aktiviert die Bildschirmausrichtung (Automatisch,Horizontal,Vertikal). Attribut setScreenOrientation&lt;br /&gt;
* system - setzt Systembefehle ab (nur bei gerootetet Geräten). reboot,shutdown,airplanemodeON (kann nur aktiviert werden) Attribut root, in den Automagic Einstellungen muss &amp;quot;Root Funktion&amp;quot; gesetzt werden&lt;br /&gt;
* setNotifySndFilePath - setzt den korrekten Systempfad zur Notifydatei (default ist /storage/emulated/0/Notifications/&lt;br /&gt;
* setTtsMsgSpeed - setzt die Sprachgeschwindigkeit bei der Sprachausgabe(Werte zwischen 0.5 bis 4.0 in 0.5er Schritten) default ist 1.0&lt;br /&gt;
* setTtsMsgSpeed - setzt die Sprache bei der Sprachausgabe, de oder en (default ist de)&lt;br /&gt;
* setVolUpDownStep - setzt den Step für volumeUp und volumeDown&lt;br /&gt;
* setVolMax - setzt die maximale Volume Größe für den Slider&lt;br /&gt;
* setNotifyVolMax - setzt den maximalen Lautstärkewert für Benachrichtigungslautstärke für den Slider&lt;br /&gt;
* setRingSoundVolMax - setzt den maximalen Lautstärkewert für Klingellautstärke für den Slider&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Um openApp verwenden zu können, muss als Attribut der Package Name der App angegeben werden. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Um zwischen Bluetoothgeräten wechseln zu können, muss das Attribut setBluetoothDevice mit folgender Syntax gesetzt werden. attr &amp;lt;DEVICE&amp;gt; BTdeviceName1|MAC,BTDeviceName2|MAC Es muss zwingend darauf geachtet werden, dass beim BTdeviceName kein Leerzeichen vorhanden ist. Am besten zusammen oder mit Unterstrich. Bei der MAC ist darauf zu achten, dass wirklich nach jeder zweiten Zahl ein : steht&lt;br /&gt;
&lt;br /&gt;
** &#039;&#039;&#039;Beispiel: attr Nexus10Wohnzimmer setBluetoothDevice Logitech_BT_Adapter|AB:12:CD:34:EF:32,Anker_A3565|GH:56:IJ:78:KL:76&lt;br /&gt;
&lt;br /&gt;
=== state ===&lt;br /&gt;
* initialized - Ist der Status kurz nach einem define.&lt;br /&gt;
* active - die Geräteinstanz ist im aktiven Status.&lt;br /&gt;
* disabled - die Geräteinstanz wurde über das Attribut disable deaktiviert&lt;br /&gt;
&lt;br /&gt;
==Anwendungsbeispiele==&lt;br /&gt;
=== Lademanagement ===&lt;br /&gt;
Ich habe die Ladegeräte für meine Androidgeräte an Funkschaltsteckdosen. Ein DOIF schaltet bei unter 30% die Steckdose ein und bei über 90% wieder aus.&lt;br /&gt;
&lt;br /&gt;
Hier mal ein einfaches DOIF Beispiel für ein Lademanagment&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
... DOIF ([Nexus5Handy:powerLevel] &amp;lt; 30) (set LadenetzteilNexus5Handy:FILTER=STATE=off on) DOELSEIF ([Nexus5Handy:powerLevel] &amp;gt; 90) (set LadenetzteilNexus5Handy:FILTER=STATE=on off) DOELSE&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Wecker ===&lt;br /&gt;
Morgens lasse ich mich über mein Tablet im Schlafzimmer mit Musik wecken. Verwendet wird hierzu der wakeuptimer des RESIDENTS Modules. Das Abspielen stoppe ich dann von Hand. Danach erfolgt noch eine Ansage wie das Wetter gerade ist und wird.&lt;br /&gt;
&lt;br /&gt;
=== Mediacenter ===&lt;br /&gt;
Mein 10&amp;quot; Tablet im Wohnzimmer ist Mediaplayer für das Wohnzimmer mit Bluetoothlautsprechern. Die Lautstärke wird automatisch heruntergesetzt, wenn die Fritzbox einen Anruf auf das Wohnzimmer Handgerät signalisiert.&lt;br /&gt;
&lt;br /&gt;
=== Sprachbefehl - Abfragen von Zuständen diverser Sensoren ===&lt;br /&gt;
Wenn ich die Spracheingabe aktiviere und nach der Temperatur im Wohnzimmer frage, bekomme ich diese angesagt.&lt;br /&gt;
&lt;br /&gt;
Der Teil im Feld Daten ist ein klassisches ReadingsVal, halt nur ohne Komma und ohne Anführungszeichen&lt;br /&gt;
&lt;br /&gt;
WIRD GERADE ÜBERARBEITET&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Schaltbefehle vom Androidgerät an FHEM senden ===&lt;br /&gt;
Hierfür ist ein eigener Flow einzurichten. Wie das genau geht, verrät die Hilfe.&lt;br /&gt;
Um einen Schaltbefehl für FHEM zu erstellen, folgt nach dem Trigger eine Aktion als Script (Aktion Type: Script). Hier ist folgendes einzutragen:&lt;br /&gt;
&lt;br /&gt;
setcmd = &amp;quot;LichtWohnzimmerLampeRechts on&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;set&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In der ersten Zeile wird also der Schaltbefehl in der Variablem setcmd eingetragen und in der zweiten Zeile der FHEM Befehl in der Variablen fhemcmd.&lt;br /&gt;
&lt;br /&gt;
Danach müsst Ihr nur noch in einer weiteren Aktion den Flow &amp;quot;Send Data to AMADCommBridge&amp;quot; ausführen (Aktion Type: Flows ausführen). Die Aktion sollte bereits in Eurer Liste Vorhanden sein.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Screenshot_20160717-134948.png|200px]]&lt;br /&gt;
[[Datei:Screenshot 17.07.2016 1-50-27.png|200px]]&lt;br /&gt;
&lt;br /&gt;
Nun sollte Lampe1 angeschalten werden, wenn der Flow ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
=== Mit FHEM ein Flow ausführen ===&lt;br /&gt;
In Automagic einen Triggervom Type General Broadcast für den Flow wählen welchen man fern ausführen möchte. In der Trigger Definition steht unter Aktion &#039;&#039;automagic.NameDesFlows&#039;&#039; und auf Wunsch unter Access Intent Extra&#039;s &#039;&#039;param1 = getString(&amp;quot;label1&amp;quot;); param2 = getString(&amp;quot;label2&amp;quot;);&#039;&#039;. &#039;&#039;NameDesFlows&#039;&#039; ist natürlich die Name des Flows, der kein Leerzeichen enthält. Mit ein FHEM Command &#039;set &#039;&#039;AMADDevice&#039;&#039; sendIntent &#039;&#039;automagic.namederflow label1 param1 label2 param2&#039;&#039;&#039; wird dann der Flow aus geführt.&lt;br /&gt;
&lt;br /&gt;
=== Lister aller Variablen für die AMADCommandBridge ===&lt;br /&gt;
fhemcmd Variable &lt;br /&gt;
* Wert &amp;quot;set&amp;quot; - Variable für den Schaltbefehl &#039;setcmd&#039;&lt;br /&gt;
* Wert &amp;quot;setreading&amp;quot; - Variable für die Readingswerte &#039;fhemdata&#039;&lt;br /&gt;
* &amp;quot;readingsval&amp;quot; - Variable für die Abfragewerte &#039;readingsvalcmd&#039;&lt;br /&gt;
* &amp;quot;fhemfunc&amp;quot; - Variable für den Funktionsnamen &#039;fhemsub&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele für Skriptinhalte:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Schalten einer Lampe&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
setcmd = &amp;quot;LichtWohnzimmerLampeRechts on&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;set&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Status eines Device abfragen&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
readingsvalcmd = &amp;quot;DEVICE READING DEFAULT&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;readingsval&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Rückgabevariable, die dann weiter verarbeitet werden kann, heißt &#039;&#039;&#039;respreadingsval&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Aufruf einer 99_myUtils Subroutine&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
fhemsub = &amp;quot;mySub()&amp;quot;; oder natürlich auch &amp;quot;mySub(&#039;was_auch_immer&#039;)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;fhemfunc&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Rückgabevariable, die dann weiter verarbeitet werden kann, heißt &#039;&#039;&#039;respfhemfunc&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Bekannte Meldungen/Hinweise/Probleme ==&lt;br /&gt;
&lt;br /&gt;
Wenn auf dem Android-Gerät die Fehlermeldung &#039;Accessibility service not running&#039; von Automagic kommt oder im FHEM das reading state  &#039;Flow Informations mit Fehler beendet&#039; steht, dann muss der Accessibility Service auf dem Android-Device aktiviert werden: Einstellungen --&amp;gt; Bedienungshilfen --&amp;gt; Automagic Premium. Hier muss der Schalter auf &#039;an&#039; stehen. Sollte dies der Fall sein, hilft u.U. ein kurzes Aus- und wieder Einschalten.&lt;br /&gt;
&lt;br /&gt;
Gerät wird oft als offline angezeigt und es können keine set Befehle abgesetzt werden.&lt;br /&gt;
Mit der AMAD Version 2.2 hielt eine neue Behandlung des deviceState Readings Einzug. Das Reading stellt nun den tatsächlichen Status des Gerätes gegenüber FHEM da. Bei vielen Android 6 Geräten kommt es aber auf Grund vom DeepSleep Modus zum Wegfall der WLAN Verbindung. Hier hilft die neue KeepAlive Funktion in AMAD. Dafür muß lediglich unter &lt;br /&gt;
* Einstellungen --&amp;gt; Akku --&amp;gt; oben auf die drei Punkte - Akku Leistungsoptimierung --&amp;gt; alle Apps und dann Automagic auswählen und &amp;quot;Nicht optimieren&amp;quot;&lt;br /&gt;
ausgewählt werden und in FHEM für das Device das Attribut setAPSSID gesetzt werden. Alles andere macht das Modul selbst.&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=AMAD&amp;diff=27647</id>
		<title>AMAD</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=AMAD&amp;diff=27647"/>
		<updated>2018-08-10T09:49:36Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: /* Ein AMADDevice Gerät von Hand anlegen. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuern von Androidgeräten und Anzeige von bestimmten Informationen dieser Geräte&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Sonstige Systeme&lt;br /&gt;
|ModTechName=73_AMADCommBridge.pm, 74_AMADDevice.pm&lt;br /&gt;
|ModOwner=CoolTux &amp;lt;br /&amp;gt;([http://forum.fhem.de/index.php?action=profile;u=13684 Forum] / [[Benutzer:CoolTux|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= AMAD 4.0 [AMADNG] =&lt;br /&gt;
== 73_AMADCommBridge / 74_AMADDevice ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Vorwort =&lt;br /&gt;
=== Warum AMADNG ===&lt;br /&gt;
Nach fast 6 Monaten Entwicklungszeit wurde die neuste AMAD Version am 24.07.2017 offiziell frei gegeben. Diesmal lagen mir mehrere Dinge am Herzen.&lt;br /&gt;
In erster Linie wollte ich eine softwareseitige Trennung der AMADCommBridge vom eigentlichen Android Device. Daher ist die neue Version ein zweistufiges Modul geworden.&lt;br /&gt;
Im Laufe der Entwicklung kamen auch andere Anforderungen hinzu, die ich dann fähig war umzusetzen. Eine dieser Anforderungen war eine einfachere und besser funktionierende Installation. Herausgekommen ist ein Android Installationsassistant.&lt;br /&gt;
Mit ihm wird auf einfache Art und Weise direkt per Sprachführung und Eingabedialogen Automagic für AMAD konfiguriert und das Device in FHEM automatisch erstellt. Es ist darauf zu achten, das Autocreate aktiv ist, da sonst kein Device mit Hilfe des Assistenten angelegt werden kann!&lt;br /&gt;
&lt;br /&gt;
= Vorstellung =&lt;br /&gt;
Dieses 2-stufige Modul liefert, &#039;&#039;&#039;in Verbindung mit der Android App Automagic&#039;&#039;&#039;, diverse Informationen von Android Geräten. &lt;br /&gt;
Die AndroidAPP Automagic (die nicht von mir stammt und 2.90 Euro kostet) funktioniert wie Tasker, ist aber bei weitem benutzungsfreundlicher.&lt;br /&gt;
&lt;br /&gt;
=== Features / Funktionen ===&lt;br /&gt;
Im Auslieferungszustand werden folgende Zustände dargestellt:&lt;br /&gt;
* installierte Android Version&lt;br /&gt;
* Zustand von Automagic auf dem Gerät&lt;br /&gt;
* Spracheingabe&lt;br /&gt;
* Bluetooth An/Aus&lt;br /&gt;
* Zustand einer definierten App (läuft aktiv im Vordergrund oder nicht?)&lt;br /&gt;
* verbundene Bluetoothgeräte, inklusive deren MAC Adresse&lt;br /&gt;
* aktuell abgespieltes Musikalbum des verwendeten Mediaplayers&lt;br /&gt;
* aktuell abgespielter Musikinterpret des verwendeten Mediaplayers&lt;br /&gt;
* aktuell abgespielter Musiktitel des verwendeten Mediaplayers&lt;br /&gt;
* Status des Androidgerätes - Online/Offline&lt;br /&gt;
* nächster Alarmtag&lt;br /&gt;
* nächste Alarmzeit&lt;br /&gt;
* Batteriestatus in %&lt;br /&gt;
* Ladestatus - Netztei angeschlossen / nicht angeschlossen&lt;br /&gt;
* Bildschirmstatus An/Aus&lt;br /&gt;
* Bildschirmhelligkeit&lt;br /&gt;
* Vollbildmodus An/Aus&lt;br /&gt;
* Bildschirmausrichtung Auto/Landscape/Portrait&lt;br /&gt;
* Standardlautstärke&lt;br /&gt;
* Media Lautstärke&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Mit etwas Einarbeitung können jegliche Informationen, die Automagic bereit stellt, in FHEM angezeigt werden. Hierzu bedarf es lediglich eines eigenen Flows, der seine Daten an die AMADCommBridge sendet. Das Modul gibt auch die Möglichkeit Androidgeräte zu steuern.&lt;br /&gt;
&lt;br /&gt;
= AMADCommBridge - Kommunikationsbrücke für alle AMAD Geräte =&lt;br /&gt;
Dieses Modul ist das Ausgangsmodul zur erfolgreichen Integration von Androidgeräten in FHEM. Es stellt ferner eine Verbindungsebene zwischen AMAD unterstützten Geräten und FHEM zur Verfügung. Alle Kommunikation zwischen AMAD Android und FHEM läuft über diese Schnittstelle.&lt;br /&gt;
Daher erfolgt die Ersteinrichtung eines AMAD Devices auch genau über diese Modulinstanz. &lt;br /&gt;
&lt;br /&gt;
Damit erfolgreich ein Androidgerät in FHEM eingerichtet werden kann, muss im ersten Schritt ein AMADCommBridge Device angelegt werden.&lt;br /&gt;
&lt;br /&gt;
=== Definition in FHEM ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; AMADCommBridge&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== Beispiel ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define AMADBridge AMADCommBridge&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Anweisung erstellt ein neues AMADCommBridge Device namens AMADBridge.&lt;br /&gt;
&lt;br /&gt;
Im folgenden muß lediglich das Flowset auf dem Android Gerät installiert werden und der Flow &#039;First Run Assistent&#039; ausgeführt werden. (einfach den Homebutton drücken)&lt;br /&gt;
Der Assistent geleitet dann durch die Einrichtung des AMAD Gerätes und sorgt dafür, dass am Ende des Installationsprozess das Androidgerät als AMAD Device in FHEM angelegt wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
* JSON_ERROR - JSON Fehlermeldung, die von Perl gemeldet wird&lt;br /&gt;
* JSON_ERROR_STRING - der String, der die JSON Fehlermeldung verursacht hat&lt;br /&gt;
* fhemServerIP - die Ip-Adresse des FHEM Servers; wird vom Modul auf Basis des JSON Strings vom Installationsassistenten gesetzt. Kann aber auch mittels set Befehles vom User gesetzt werden&lt;br /&gt;
* receiveFhemCommand - ist das Attribut fhemControlMode auf trigger gestellt, wird das Reading gesetzt sobald ein FHEM Befehl übersendet wird. Hierauf kann dann ein Notify triggern. Wird anstelle von trigger setControl als Wert für fhemControlMode eingestellt, wird das Reading nicht gesetzt sondern der set Befehl sofort ausgeführt.&lt;br /&gt;
* receiveVoiceCommand - wird die Sprachsteuerung von AMAD aktiviert (set DEVICE activateVoiceInput) so wird der letzte erkannten Sprachbefehle in dieses Reading geschrieben.&lt;br /&gt;
* receiveVoiceDevice - Name des Devices von wo aus der letzte erkannte Sprachbefehl gesendet wurde&lt;br /&gt;
* state - Status der Bridge, open, closed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
* allowFrom - Regexp der erlaubten IP-Adressen oder Hostnamen. Wenn dieses Attribut gesetzt wurde, werden ausschließlich Verbindungen von diesen Adressen akzeptiert. Achtung: falls allowfrom nicht gesetzt ist, und keine gütige allowed Instanz definiert ist, und die Gegenstelle eine nicht lokale Adresse hat, dann wird die Verbindung abgewiesen. Folgende Adressen werden als local betrachtet: IPV4: 127/8, 10/8, 192.168/16, 172.16/10, 169.254/16, IPV6: ::1, fe80/10&lt;br /&gt;
* debugJSON - wenn auf 1 gesetzt, werden JSON Fehlermeldungen in Readings geschrieben. Siehe hierzu JSON_ERROR* unter Readings&lt;br /&gt;
* fhemControlMode - steuert die zulässige Art der Steuerung von FHEM Devices. Es können über die Bridge auf 2 Arten FHEM-Devices angesteuert werden: per direktem FHEM-Befehl aus einem Flow heraus oder als Sprachbefehl mittels Sprachsteuerung (set DEVICE activateVoiceInput)&lt;br /&gt;
** trigger - ist der Wert trigger gesetzt, werden alle an die Bridge gesendeten FHEM set Befehle in das Reading receiveFhemCommand geschrieben und können so mittels notify ausgeführt werden. Sprachsteuerung ist möglich, es werden Readings receiveVoice* gesetzt. Auf dem Androidgerät können bei Sprachsteuerung mehrere Sprachbefehle mittels &amp;quot;und&amp;quot; verknüpft/aneinander gereiht werden. Bsp: schalte die Lichtszene Abends an und schalte den Fernseher an&lt;br /&gt;
** setControl - alle set Befehle, die mittels eines Flows über die Bridge gesendet werden, werden automatisch ausgeführt. Das Triggern eines Readings ist nicht nötig. Die Steuerung mittels Sprache verhält sich wie beim Wert trigger&lt;br /&gt;
** thirdPartControl - verhält sich wie trigger, bei der Sprachsteuerung ist jedoch ein Anreihen von Sprachbefehlen mittels &amp;quot;und&amp;quot; nicht möglich. Dient der Sprachsteuerung über Module anderer Modulautoren ((z.B. 39_TEERKO.pm)&lt;br /&gt;
&lt;br /&gt;
= AMADDevice - Automagic Android Device =&lt;br /&gt;
Dieses Modul liefert, in Verbindung mit der Android APP Automagic, diverse Informationen von Android Geräten. Die Android App Automagic (die nicht von mir stammt und 2.90 Euro kostet) funktioniert wie Tasker, ist aber bei weitem User freundlicher. &lt;br /&gt;
Mit etwas Einarbeitung können jegliche Informationen, die Automagic bereit stellt in FHEM angezeigt werden. Hierzu bedarf es lediglich eines eigenen Flows, der seine Daten an die AMADDeviceCommBridge sendet. Das Modul gibt auch die Möglichkeit Androidgeräte zu steuern. &lt;br /&gt;
Für all diese Aktionen und Informationen wird auf dem Androidgerät &amp;quot;Automagic&amp;quot; und ein so genannter Flow benötigt. Die App ist über den Google PlayStore zu beziehen. Das benötigte Flowset bekommt man aus dem FHEM Verzeichnis. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Wie genau verwendet man nun AMADDevice? ===&lt;br /&gt;
* sicherstellen, dass als allererstes die AMADCommBridge in FHEM definiert wurde&lt;br /&gt;
* installieren der App &amp;quot;Automagic Premium&amp;quot; aus dem PlayStore&lt;br /&gt;
* installieren des Flowset 74_AMADDeviceautomagicFlowset$VERSION.xml aus dem Ordner $INSTALLFHEM/FHEM/lib/ auf dem Androidgerät&lt;br /&gt;
* aktivieren des Installationsassistanten Flow in Automagic. Wenn man nun Automagic in den Hintergrund schickt, z.B. Hometaste drücken, startet der Assistant und legt automatisch ein Device für das Androidgerät an.&lt;br /&gt;
&lt;br /&gt;
=== Ein AMADDevice Gerät von Hand anlegen. ===&lt;br /&gt;
&lt;br /&gt;
Define&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; AMADDevice &amp;lt;IP-ADRESSE&amp;gt; &amp;lt;AMAD_ID&amp;gt; &amp;lt;REMOTESERVER&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Beispiel ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define WandTabletWohnzimmer AMADDevice 192.168.0.23 123456 Automagic&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Fall wird ein AMADDevice von Hand angelegt. Die AMAD_ID, hier 123456, muß auch exakt so als globale Variable in Automagic eingetragen sein.&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
* airplanemode - Status des Flugmodus&lt;br /&gt;
* androidVersion - aktuell installierte Androidversion&lt;br /&gt;
* automagicState - Statusmeldungen von der Automagic App &#039;&#039;&#039;(Voraussetzung Android &amp;gt;4.3). Ist Android größer 4.3 vorhanden und im Reading steht &amp;quot;wird nicht unterstützt&amp;quot;, muss in den Androideinstellungen unter Ton und Benachrichtigungen -&amp;gt; Benachrichtigungszugriff ein Haken für Automagic gesetzt werden&#039;&#039;&#039;&lt;br /&gt;
* batteryHealth - Zustand der Battery (1=unbekannt, 2=gut, 3=überhitzt, 4=tot, 5=Überspannung, 6=unbekannter Fehler, 7=kalt)&lt;br /&gt;
* batterytemperature - Temperatur der Batterie&lt;br /&gt;
* bluetooth - on/off, Bluetooth Status an oder aus&lt;br /&gt;
* checkActiveTask - Zustand einer zuvor definierten App. 0=nicht aktiv oder nicht aktiv im Vordergrund, 1=aktiv im Vordergrund, &#039;&#039;&#039;siehe Hinweis unten&#039;&#039;&#039;&lt;br /&gt;
* connectedBTdevices - eine Liste der verbundenen Gerät&lt;br /&gt;
* connectedBTdevicesMAC - eine Liste der MAC Adressen aller verbundender BT Geräte&lt;br /&gt;
* currentMusicAlbum - aktuell abgespieltes Musikalbum des verwendeten Mediaplayers&lt;br /&gt;
* currentMusicApp - aktuell verwendeter Mediaplayer (Amazon Music, Google Play Music, Google Play Video, Spotify, YouTube, TuneIn Player, Aldi Life Music)&lt;br /&gt;
* currentMusicArtist - aktuell abgespielter Musikinterpret des verwendeten Mediaplayers&lt;br /&gt;
* currentMusicIcon - Cover vom aktuell abgespielten Album &#039;&#039;&#039;Noch nicht fertig implementiert&#039;&#039;&#039;&lt;br /&gt;
* currentMusicState - Status des aktuellen/zuletzt verwendeten Mediaplayers&lt;br /&gt;
* currentMusicTrack - aktuell abgespielter Musiktitel des verwendeten Mediaplayers&lt;br /&gt;
* daydream - on/off, Daydream gestartet oder nicht&lt;br /&gt;
* deviceState - Status des Androidgerätes. unknown, online, offline.&lt;br /&gt;
* doNotDisturb - aktueller Status des Nicht-Stören-Modus&lt;br /&gt;
* dockingState - undocked/docked Status, ob sich das Gerät in einer Dockingstation befindet.&lt;br /&gt;
* flow_SetCommands - active/inactive, Status des SetCommands Flow&lt;br /&gt;
* flow_informations - active/inactive, Status des Informations Flow&lt;br /&gt;
* flowsetVersionAtDevice - aktuell installierte Flowsetversion auf dem Device&lt;br /&gt;
* incomingCallerName - Anrufername des eingehenden Anrufes&lt;br /&gt;
* incomingCallerNumber - Anrufernummer des eingehenden Anrufes&lt;br /&gt;
* incommingWhatsAppMessageFrom - letzte WhatsApp Nachricht&lt;br /&gt;
* incommingWhatsTelegramMessageFrom - letzte Telegram Nachricht&lt;br /&gt;
* intentRadioName - zuletzt gestreamter Intent Radio Name&lt;br /&gt;
* intentRadioState - Status des IntentRadio Players&lt;br /&gt;
* keyguardSet - 0/1 Displaysperre gesetzt 0=nein 1=ja, bedeutet nicht, dass sie gerade aktiv ist&lt;br /&gt;
* lastSetCommandError - letzte Fehlermeldung vom set Befehl&lt;br /&gt;
* lastSetCommandState - letzter Status vom set Befehl, Befehl erfolgreich/nicht erfolgreich gesendet&lt;br /&gt;
* lastStatusRequestError - letzte Fehlermeldung vom statusRequest Befehl&lt;br /&gt;
* lastStatusRequestState - letzter Status vom statusRequest Befehl, Befehl erfolgreich/nicht erfolgreich gesendet&lt;br /&gt;
* nextAlarmDay - aktiver Alarmtag&lt;br /&gt;
* nextAlarmState - aktueller Status des &amp;quot;Androidinternen&amp;quot; Weckers&lt;br /&gt;
* nextAlarmTime - aktive Alarmzeit&lt;br /&gt;
* powerLevel - Status der Batterie in %&lt;br /&gt;
* powerPlugged - Netzteil angeschlossen? 1=AC Adapter, 2=USB, 4=Kabellos 0=nicht eingesteckt&lt;br /&gt;
* screen - on locked/unlocked, off locked/unlocked gibt an ob der Bildschirm an oder aus ist und gleichzeitig gesperrt oder nicht gesperrt&lt;br /&gt;
* screenBrightness - Bildschirmhelligkeit von 0-255&lt;br /&gt;
* screenFullscreen - on/off, Vollbildmodus (An,Aus)&lt;br /&gt;
* screenOrientation - Landscape,Portrait, Bildschirmausrichtung (Horizontal,Vertikal)&lt;br /&gt;
* screenOrientationMode - auto/manual, Modus für die Ausrichtung (Automatisch, Manuell)&lt;br /&gt;
* state - aktueller Status&lt;br /&gt;
* userFlowState - aktueller Status eines Flows, festgelegt unter dem setUserFlowState Attribut&lt;br /&gt;
* volume - Media Lautstärkewert&lt;br /&gt;
* volumeNotification - Benachrichtigungs-Lautstärke&lt;br /&gt;
&lt;br /&gt;
Beim Reading checkActivTask muß zuvor der Packagename der zu prüfenden App als Attribut checkActiveTask angegeben werden. Beispiel: attr Nexus10Wohnzimmer checkActiveTask com.android.chrome für den Chrome Browser.&lt;br /&gt;
&lt;br /&gt;
=== Set ===&lt;br /&gt;
* activateVoiceInput - aktiviert die Spracheingabe&lt;br /&gt;
* bluetooth - on/off, aktiviert/deaktiviert Bluetooth&lt;br /&gt;
* clearNotificationBar - All,Automagic, löscht alle Meldungen oder nur die Automagic Meldungen in der Statusleiste&lt;br /&gt;
* closeCall - beendet einen laufenden Anruf&lt;br /&gt;
* currentFlowsetUpdate - führt ein Flowsetupdate auf dem Device durch&lt;br /&gt;
* doNotDisturb - schaltet den Nicht-Stören-Modus: always immer stören, never niemals stören, alarmClockOnly nur Wecker darf stören, onlyImportant nur wichtige Störungen&lt;br /&gt;
* installFlowSource - installiert einen Flow auf dem Device, &amp;lt;u&amp;gt;das XML File muss unter /tmp/ liegen und die Endung xml haben. &amp;lt;b&amp;gt;Bsp:&amp;lt;/b&amp;gt; set TabletWohnzimmer installFlowSource WlanUebwerwachen.xml&amp;lt;/u&amp;gt;&lt;br /&gt;
* mediaAmazonMusic - play, stop, next, back ,steuert den Amazon Musik Mediaplayer&lt;br /&gt;
* mediaGoogleMusic - play, stop, next, back ,steuert den Google Play Musik Mediaplayer&lt;br /&gt;
* mediaSpotifyMusic - play, stop, next, back ,steuert den Spotify Mediaplayer&lt;br /&gt;
* mediaTuneinRadio - play, stop, next, back ,steuert den TuneIn Radio Mediaplayer&lt;br /&gt;
* mediaAldiMusic - play, stop, next, back ,steuert den Aldi Musik Mediaplayer&lt;br /&gt;
* mediaAudible - play, stop, next, back ,steuert den Audible Mediaplayer&lt;br /&gt;
* mediaYouTube - play, stop, next, back ,steuert den YouTube Mediaplayer&lt;br /&gt;
* mediaVlcPlayer - play, stop, next, back ,steuert den VLC Mediaplayer&lt;br /&gt;
* nextAlarmTime - setzt die Alarmzeit. gilt aber nur innerhalb der nächsten 24 h&lt;br /&gt;
* openCall - ruft eine Nummer an und legt optional nach X Sekunden auf / set DEVICE openCall 01736458 10 / ruft die Nummer an und beendet den Anruf nach 10s&lt;br /&gt;
* screen - on/off/lock/unlock schaltet den Bildschirm ein/aus oder sperrt/entsperrt ihn&lt;br /&gt;
* screenBrightness - setzt die Bildschirmhelligkeit, von 0-255.&lt;br /&gt;
* screenMsg - versendet eine Bildschirmnachricht&lt;br /&gt;
* sendintent - sendet einen Intentstring Bsp: set $AMADDeviceDEVICE sendIntent org.smblott.intentradio.PLAY url http://stream.klassikradio.de/live/mp3-192/stream.klassikradio.de/play.m3u name Klassikradio, der erste Befehl ist die Aktion und der zweite das Extra. Es können immer zwei Extras mitgegeben werden.&lt;br /&gt;
* sendSMS - sendet eine SMS an eine bestimmte Telefonnummer. Bsp.: sendSMS Dies ist ein Test|555487263&lt;br /&gt;
* startDaydream - startet den Daydream&lt;br /&gt;
* statusRequest - Fordert einen neuen Statusreport beim Device an. Es können nicht von allen Readings per statusRequest die Daten geholt werden. Einige wenige geben nur bei Statusänderung ihren Status wieder.&lt;br /&gt;
* timer - setzt einen Timer innerhalb der als Standard definierten Clock-App auf dem Device. Es können nur Sekunden angegeben werden.&lt;br /&gt;
* ttsMsg - versendet eine Nachricht, die als Sprachnachricht ausgegeben wird&lt;br /&gt;
* userFlowState - aktiviert oder deaktiviert einen oder mehrere Flows,&#039;&#039;&#039;set Nexus7Wohnzimmer Badezimmer vorheizen:inactive oder set Nexus7Wohnzimmer Badezimmer vorheizen,Nachtlicht Steven:inactive&#039;&#039;&#039;&lt;br /&gt;
* vibrate - lässt das Androidgerät vibrieren&lt;br /&gt;
* volume - setzt die Medialautstärke. Entweder die internen Lautsprecher oder sofern angeschlossen die Bluetoothlautsprecher und per Klinkenstecker angeschlossene Lautsprecher, + oder - vor dem Wert reduziert die aktuelle Lautstärke um den Wert. Der maximale Sliderwert kann über das Attribut setVolMax geregelt werden.&lt;br /&gt;
* volumeUp - erhöht die Lautstärke um den angegeben Wert im entsprechenden Attribut. Ist kein Attribut angegeben wird per default 2 genommen.&lt;br /&gt;
* volumeDown - reduziert die Lautstärke um den angegeben Wert im entsprechenden Attribut. Ist kein Attribut angegeben wird per default 2 genommen.&lt;br /&gt;
* volumeNotification - setzt die Benachrichtigungslautstärke.&lt;br /&gt;
&lt;br /&gt;
==== Set abhängig von gesetzten Attributen ====&lt;br /&gt;
* changetoBtDevice - wechselt zu einem anderen Bluetooth Gerät. Attribut setBluetoothDevice muß gesetzt sein. Siehe Hinweis unten!&lt;br /&gt;
* notifySndFile - spielt die angegebene Mediadatei auf dem Androidgerät ab. Die aufzurufende Mediadatei sollte sich im Ordner /storage/emulated/0/Notifications/ befinden. Ist dies nicht der Fall kann man über das Attribut setNotifySndFilePath einen Pfad vorgeben.&lt;br /&gt;
* openApp - öffnet eine ausgewählte App. Attribut setOpenApp&lt;br /&gt;
* openURL - öffnet eine URL im Standardbrowser, sofern kein anderer Browser über das Attribut setOpenUrlBrowser ausgewählt wurde. Bsp: attr Tablet setOpenUrlBrowser de.ozerov.fully|de.ozerov.fully.MainActivity, das erste ist der Package Name und das zweite der Class Name&lt;br /&gt;
* setAPSSID - setzt die AccessPoint SSID um ein WLAN sleep zu verhindern&lt;br /&gt;
* setScreenOnForTimer ändert die Zeitdauer, die das Display an bleiben soll!&lt;br /&gt;
* screenFullscreen - on/off, (aktiviert/deaktiviert) den Vollbildmodus. Attribut setFullscreen&lt;br /&gt;
* screenLock - Sperrt den Bildschirm mit Pinabfrage. Attribut setScreenlockPIN - hier die Pin dafür eingeben. Erlaubt sind nur Zahlen. Es müßen mindestens 4, bis max 16 Zeichen verwendet werden.&lt;br /&gt;
* screenOrientation - Auto,Landscape,Portait, aktiviert die Bildschirmausrichtung (Automatisch,Horizontal,Vertikal). Attribut setScreenOrientation&lt;br /&gt;
* system - setzt Systembefehle ab (nur bei gerootetet Geräten). reboot,shutdown,airplanemodeON (kann nur aktiviert werden) Attribut root, in den Automagic Einstellungen muss &amp;quot;Root Funktion&amp;quot; gesetzt werden&lt;br /&gt;
* setNotifySndFilePath - setzt den korrekten Systempfad zur Notifydatei (default ist /storage/emulated/0/Notifications/&lt;br /&gt;
* setTtsMsgSpeed - setzt die Sprachgeschwindigkeit bei der Sprachausgabe(Werte zwischen 0.5 bis 4.0 in 0.5er Schritten) default ist 1.0&lt;br /&gt;
* setTtsMsgSpeed - setzt die Sprache bei der Sprachausgabe, de oder en (default ist de)&lt;br /&gt;
* setVolUpDownStep - setzt den Step für volumeUp und volumeDown&lt;br /&gt;
* setVolMax - setzt die maximale Volume Größe für den Slider&lt;br /&gt;
* setNotifyVolMax - setzt den maximalen Lautstärkewert für Benachrichtigungslautstärke für den Slider&lt;br /&gt;
* setRingSoundVolMax - setzt den maximalen Lautstärkewert für Klingellautstärke für den Slider&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Um openApp verwenden zu können, muss als Attribut der Package Name der App angegeben werden. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Um zwischen Bluetoothgeräten wechseln zu können, muss das Attribut setBluetoothDevice mit folgender Syntax gesetzt werden. attr &amp;lt;DEVICE&amp;gt; BTdeviceName1|MAC,BTDeviceName2|MAC Es muss zwingend darauf geachtet werden, dass beim BTdeviceName kein Leerzeichen vorhanden ist. Am besten zusammen oder mit Unterstrich. Bei der MAC ist darauf zu achten, dass wirklich nach jeder zweiten Zahl ein : steht&lt;br /&gt;
&lt;br /&gt;
** &#039;&#039;&#039;Beispiel: attr Nexus10Wohnzimmer setBluetoothDevice Logitech_BT_Adapter|AB:12:CD:34:EF:32,Anker_A3565|GH:56:IJ:78:KL:76&lt;br /&gt;
&lt;br /&gt;
=== state ===&lt;br /&gt;
* initialized - Ist der Status kurz nach einem define.&lt;br /&gt;
* active - die Geräteinstanz ist im aktiven Status.&lt;br /&gt;
* disabled - die Geräteinstanz wurde über das Attribut disable deaktiviert&lt;br /&gt;
&lt;br /&gt;
==Anwendungsbeispiele==&lt;br /&gt;
=== Lademanagement ===&lt;br /&gt;
Ich habe die Ladegeräte für meine Androidgeräte an Funkschaltsteckdosen. Ein DOIF schaltet bei unter 30% die Steckdose ein und bei über 90% wieder aus.&lt;br /&gt;
&lt;br /&gt;
Hier mal ein einfaches DOIF Beispiel für ein Lademanagment&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
... DOIF ([Nexus5Handy:powerLevel] &amp;lt; 30) (set LadenetzteilNexus5Handy:FILTER=STATE=off on) DOELSEIF ([Nexus5Handy:powerLevel] &amp;gt; 90) (set LadenetzteilNexus5Handy:FILTER=STATE=on off) DOELSE&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Wecker ===&lt;br /&gt;
Morgens lasse ich mich über mein Tablet im Schlafzimmer mit Musik wecken. Verwendet wird hierzu der wakeuptimer des RESIDENTS Modules. Das Abspielen stoppe ich dann von Hand. Danach erfolgt noch eine Ansage wie das Wetter gerade ist und wird.&lt;br /&gt;
&lt;br /&gt;
=== Mediacenter ===&lt;br /&gt;
Mein 10&amp;quot; Tablet im Wohnzimmer ist Mediaplayer für das Wohnzimmer mit Bluetoothlautsprechern. Die Lautstärke wird automatisch heruntergesetzt, wenn die Fritzbox einen Anruf auf das Wohnzimmer Handgerät signalisiert.&lt;br /&gt;
&lt;br /&gt;
=== Sprachbefehl - Abfragen von Zuständen diverser Sensoren ===&lt;br /&gt;
Wenn ich die Spracheingabe aktiviere und nach der Temperatur im Wohnzimmer frage, bekomme ich diese angesagt.&lt;br /&gt;
&lt;br /&gt;
Der Teil im Feld Daten ist ein klassisches ReadingsVal, halt nur ohne Komma und ohne Anführungszeichen&lt;br /&gt;
&lt;br /&gt;
WIRD GERADE ÜBERARBEITET&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Schaltbefehle vom Androidgerät an FHEM senden ===&lt;br /&gt;
Hierfür ist ein eigener Flow einzurichten. Wie das genau geht, verrät die Hilfe.&lt;br /&gt;
Um einen Schaltbefehl für FHEM zu erstellen, folgt nach dem Trigger eine Aktion als Script (Aktion Type: Script). Hier ist folgendes einzutragen:&lt;br /&gt;
&lt;br /&gt;
setcmd = &amp;quot;LichtWohnzimmerLampeRechts on&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;set&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In der ersten Zeile wird also der Schaltbefehl in der Variablem setcmd eingetragen und in der zweiten Zeile der FHEM Befehl in der Variablen fhemcmd.&lt;br /&gt;
&lt;br /&gt;
Danach müsst Ihr nur noch in einer weiteren Aktion den Flow &amp;quot;Send Data to AMADCommBridge&amp;quot; ausführen (Aktion Type: Flows ausführen). Die Aktion sollte bereits in Eurer Liste Vorhanden sein.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Screenshot_20160717-134948.png|200px]]&lt;br /&gt;
[[Datei:Screenshot 17.07.2016 1-50-27.png|200px]]&lt;br /&gt;
&lt;br /&gt;
Nun sollte Lampe1 angeschalten werden, wenn der Flow ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
=== Mit FHEM ein Flow ausführen ===&lt;br /&gt;
In Automagic einen Triggervom Type General Broadcast für den Flow wählen welchen man fern ausführen möchte. In der Trigger Definition steht unter Aktion &#039;&#039;automagic.NameDesFlows&#039;&#039; und auf Wunsch unter Access Intent Extra&#039;s &#039;&#039;param1 = getString(&amp;quot;label1&amp;quot;); param2 = getString(&amp;quot;label2&amp;quot;);&#039;&#039;. &#039;&#039;NameDesFlows&#039;&#039; ist natürlich die Name des Flows, der kein Leerzeichen enthält. Mit ein FHEM Command &#039;set &#039;&#039;AMADDevice&#039;&#039; sendIntent &#039;&#039;automagic.namederflow label1 param1 label2 param2&#039;&#039;&#039; wird dann der Flow aus geführt.&lt;br /&gt;
&lt;br /&gt;
=== Lister aller Variablen für die AMADCommandBridge ===&lt;br /&gt;
fhemcmd Variable &lt;br /&gt;
* Wert &amp;quot;set&amp;quot; - Variable für den Schaltbefehl &#039;setcmd&#039;&lt;br /&gt;
* Wert &amp;quot;setreading&amp;quot; - Variable für die Readingswerte &#039;fhemdata&#039;&lt;br /&gt;
* &amp;quot;readingsval&amp;quot; - Variable für die Abfragewerte &#039;readingsvalcmd&#039;&lt;br /&gt;
* &amp;quot;fhemfunc&amp;quot; - Variable für den Funktionsnamen &#039;fhemsub&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele für Skriptinhalte:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Schalten einer Lampe&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
setcmd = &amp;quot;LichtWohnzimmerLampeRechts on&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;set&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Status eines Device abfragen&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
readingsvalcmd = &amp;quot;DEVICE READING DEFAULT&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;readingsval&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Rückgabevariable, die dann weiter verarbeitet werden kann, heißt &#039;&#039;&#039;respreadingsval&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Aufruf einer 99_myUtils Subroutine&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
fhemsub = &amp;quot;mySub()&amp;quot;; oder natürlich auch &amp;quot;mySub(&#039;was_auch_immer&#039;)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;fhemfunc&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Rückgabevariable, die dann weiter verarbeitet werden kann, heißt &#039;&#039;&#039;respfhemfunc&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Bekannte Meldungen/Hinweise/Probleme ==&lt;br /&gt;
&lt;br /&gt;
Wenn auf dem Android-Gerät die Fehlermeldung &#039;Accessibility service not running&#039; von Automagic kommt oder im FHEM das reading state  &#039;Flow Informations mit Fehler beendet&#039; steht, dann muss der Accessibility Service auf dem Android-Device aktiviert werden: Einstellungen --&amp;gt; Bedienungshilfen --&amp;gt; Automagic Premium. Hier muss der Schalter auf &#039;an&#039; stehen. Sollte dies der Fall sein, hilft u.U. ein kurzes Aus- und wieder Einschalten.&lt;br /&gt;
&lt;br /&gt;
Gerät wird oft als offline angezeigt und es können keine set Befehle abgesetzt werden.&lt;br /&gt;
Mit der AMAD Version 2.2 hielt eine neue Behandlung des deviceState Readings Einzug. Das Reading stellt nun den tatsächlichen Status des Gerätes gegenüber FHEM da. Bei vielen Android 6 Geräten kommt es aber auf Grund vom DeepSleep Modus zum Wegfall der WLAN Verbindung. Hier hilft die neue KeepAlive Funktion in AMAD. Dafür muß lediglich unter &lt;br /&gt;
* Einstellungen --&amp;gt; Akku --&amp;gt; oben auf die drei Punkte - Akku Leistungsoptimierung --&amp;gt; alle Apps und dann Automagic auswählen und &amp;quot;Nicht optimieren&amp;quot;&lt;br /&gt;
ausgewählt werden und in FHEM für das Device das Attribut setAPSSID gesetzt werden. Alles andere macht das Modul selbst.&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=AMAD&amp;diff=27646</id>
		<title>AMAD</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=AMAD&amp;diff=27646"/>
		<updated>2018-08-10T09:49:13Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: /* Ein AMADDevice Gerät von Hand anlegen. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuern von Androidgeräten und Anzeige von bestimmten Informationen dieser Geräte&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Sonstige Systeme&lt;br /&gt;
|ModTechName=73_AMADCommBridge.pm, 74_AMADDevice.pm&lt;br /&gt;
|ModOwner=CoolTux &amp;lt;br /&amp;gt;([http://forum.fhem.de/index.php?action=profile;u=13684 Forum] / [[Benutzer:CoolTux|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= AMAD 4.0 [AMADNG] =&lt;br /&gt;
== 73_AMADCommBridge / 74_AMADDevice ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Vorwort =&lt;br /&gt;
=== Warum AMADNG ===&lt;br /&gt;
Nach fast 6 Monaten Entwicklungszeit wurde die neuste AMAD Version am 24.07.2017 offiziell frei gegeben. Diesmal lagen mir mehrere Dinge am Herzen.&lt;br /&gt;
In erster Linie wollte ich eine softwareseitige Trennung der AMADCommBridge vom eigentlichen Android Device. Daher ist die neue Version ein zweistufiges Modul geworden.&lt;br /&gt;
Im Laufe der Entwicklung kamen auch andere Anforderungen hinzu, die ich dann fähig war umzusetzen. Eine dieser Anforderungen war eine einfachere und besser funktionierende Installation. Herausgekommen ist ein Android Installationsassistant.&lt;br /&gt;
Mit ihm wird auf einfache Art und Weise direkt per Sprachführung und Eingabedialogen Automagic für AMAD konfiguriert und das Device in FHEM automatisch erstellt. Es ist darauf zu achten, das Autocreate aktiv ist, da sonst kein Device mit Hilfe des Assistenten angelegt werden kann!&lt;br /&gt;
&lt;br /&gt;
= Vorstellung =&lt;br /&gt;
Dieses 2-stufige Modul liefert, &#039;&#039;&#039;in Verbindung mit der Android App Automagic&#039;&#039;&#039;, diverse Informationen von Android Geräten. &lt;br /&gt;
Die AndroidAPP Automagic (die nicht von mir stammt und 2.90 Euro kostet) funktioniert wie Tasker, ist aber bei weitem benutzungsfreundlicher.&lt;br /&gt;
&lt;br /&gt;
=== Features / Funktionen ===&lt;br /&gt;
Im Auslieferungszustand werden folgende Zustände dargestellt:&lt;br /&gt;
* installierte Android Version&lt;br /&gt;
* Zustand von Automagic auf dem Gerät&lt;br /&gt;
* Spracheingabe&lt;br /&gt;
* Bluetooth An/Aus&lt;br /&gt;
* Zustand einer definierten App (läuft aktiv im Vordergrund oder nicht?)&lt;br /&gt;
* verbundene Bluetoothgeräte, inklusive deren MAC Adresse&lt;br /&gt;
* aktuell abgespieltes Musikalbum des verwendeten Mediaplayers&lt;br /&gt;
* aktuell abgespielter Musikinterpret des verwendeten Mediaplayers&lt;br /&gt;
* aktuell abgespielter Musiktitel des verwendeten Mediaplayers&lt;br /&gt;
* Status des Androidgerätes - Online/Offline&lt;br /&gt;
* nächster Alarmtag&lt;br /&gt;
* nächste Alarmzeit&lt;br /&gt;
* Batteriestatus in %&lt;br /&gt;
* Ladestatus - Netztei angeschlossen / nicht angeschlossen&lt;br /&gt;
* Bildschirmstatus An/Aus&lt;br /&gt;
* Bildschirmhelligkeit&lt;br /&gt;
* Vollbildmodus An/Aus&lt;br /&gt;
* Bildschirmausrichtung Auto/Landscape/Portrait&lt;br /&gt;
* Standardlautstärke&lt;br /&gt;
* Media Lautstärke&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Mit etwas Einarbeitung können jegliche Informationen, die Automagic bereit stellt, in FHEM angezeigt werden. Hierzu bedarf es lediglich eines eigenen Flows, der seine Daten an die AMADCommBridge sendet. Das Modul gibt auch die Möglichkeit Androidgeräte zu steuern.&lt;br /&gt;
&lt;br /&gt;
= AMADCommBridge - Kommunikationsbrücke für alle AMAD Geräte =&lt;br /&gt;
Dieses Modul ist das Ausgangsmodul zur erfolgreichen Integration von Androidgeräten in FHEM. Es stellt ferner eine Verbindungsebene zwischen AMAD unterstützten Geräten und FHEM zur Verfügung. Alle Kommunikation zwischen AMAD Android und FHEM läuft über diese Schnittstelle.&lt;br /&gt;
Daher erfolgt die Ersteinrichtung eines AMAD Devices auch genau über diese Modulinstanz. &lt;br /&gt;
&lt;br /&gt;
Damit erfolgreich ein Androidgerät in FHEM eingerichtet werden kann, muss im ersten Schritt ein AMADCommBridge Device angelegt werden.&lt;br /&gt;
&lt;br /&gt;
=== Definition in FHEM ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; AMADCommBridge&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== Beispiel ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define AMADBridge AMADCommBridge&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Anweisung erstellt ein neues AMADCommBridge Device namens AMADBridge.&lt;br /&gt;
&lt;br /&gt;
Im folgenden muß lediglich das Flowset auf dem Android Gerät installiert werden und der Flow &#039;First Run Assistent&#039; ausgeführt werden. (einfach den Homebutton drücken)&lt;br /&gt;
Der Assistent geleitet dann durch die Einrichtung des AMAD Gerätes und sorgt dafür, dass am Ende des Installationsprozess das Androidgerät als AMAD Device in FHEM angelegt wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
* JSON_ERROR - JSON Fehlermeldung, die von Perl gemeldet wird&lt;br /&gt;
* JSON_ERROR_STRING - der String, der die JSON Fehlermeldung verursacht hat&lt;br /&gt;
* fhemServerIP - die Ip-Adresse des FHEM Servers; wird vom Modul auf Basis des JSON Strings vom Installationsassistenten gesetzt. Kann aber auch mittels set Befehles vom User gesetzt werden&lt;br /&gt;
* receiveFhemCommand - ist das Attribut fhemControlMode auf trigger gestellt, wird das Reading gesetzt sobald ein FHEM Befehl übersendet wird. Hierauf kann dann ein Notify triggern. Wird anstelle von trigger setControl als Wert für fhemControlMode eingestellt, wird das Reading nicht gesetzt sondern der set Befehl sofort ausgeführt.&lt;br /&gt;
* receiveVoiceCommand - wird die Sprachsteuerung von AMAD aktiviert (set DEVICE activateVoiceInput) so wird der letzte erkannten Sprachbefehle in dieses Reading geschrieben.&lt;br /&gt;
* receiveVoiceDevice - Name des Devices von wo aus der letzte erkannte Sprachbefehl gesendet wurde&lt;br /&gt;
* state - Status der Bridge, open, closed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
* allowFrom - Regexp der erlaubten IP-Adressen oder Hostnamen. Wenn dieses Attribut gesetzt wurde, werden ausschließlich Verbindungen von diesen Adressen akzeptiert. Achtung: falls allowfrom nicht gesetzt ist, und keine gütige allowed Instanz definiert ist, und die Gegenstelle eine nicht lokale Adresse hat, dann wird die Verbindung abgewiesen. Folgende Adressen werden als local betrachtet: IPV4: 127/8, 10/8, 192.168/16, 172.16/10, 169.254/16, IPV6: ::1, fe80/10&lt;br /&gt;
* debugJSON - wenn auf 1 gesetzt, werden JSON Fehlermeldungen in Readings geschrieben. Siehe hierzu JSON_ERROR* unter Readings&lt;br /&gt;
* fhemControlMode - steuert die zulässige Art der Steuerung von FHEM Devices. Es können über die Bridge auf 2 Arten FHEM-Devices angesteuert werden: per direktem FHEM-Befehl aus einem Flow heraus oder als Sprachbefehl mittels Sprachsteuerung (set DEVICE activateVoiceInput)&lt;br /&gt;
** trigger - ist der Wert trigger gesetzt, werden alle an die Bridge gesendeten FHEM set Befehle in das Reading receiveFhemCommand geschrieben und können so mittels notify ausgeführt werden. Sprachsteuerung ist möglich, es werden Readings receiveVoice* gesetzt. Auf dem Androidgerät können bei Sprachsteuerung mehrere Sprachbefehle mittels &amp;quot;und&amp;quot; verknüpft/aneinander gereiht werden. Bsp: schalte die Lichtszene Abends an und schalte den Fernseher an&lt;br /&gt;
** setControl - alle set Befehle, die mittels eines Flows über die Bridge gesendet werden, werden automatisch ausgeführt. Das Triggern eines Readings ist nicht nötig. Die Steuerung mittels Sprache verhält sich wie beim Wert trigger&lt;br /&gt;
** thirdPartControl - verhält sich wie trigger, bei der Sprachsteuerung ist jedoch ein Anreihen von Sprachbefehlen mittels &amp;quot;und&amp;quot; nicht möglich. Dient der Sprachsteuerung über Module anderer Modulautoren ((z.B. 39_TEERKO.pm)&lt;br /&gt;
&lt;br /&gt;
= AMADDevice - Automagic Android Device =&lt;br /&gt;
Dieses Modul liefert, in Verbindung mit der Android APP Automagic, diverse Informationen von Android Geräten. Die Android App Automagic (die nicht von mir stammt und 2.90 Euro kostet) funktioniert wie Tasker, ist aber bei weitem User freundlicher. &lt;br /&gt;
Mit etwas Einarbeitung können jegliche Informationen, die Automagic bereit stellt in FHEM angezeigt werden. Hierzu bedarf es lediglich eines eigenen Flows, der seine Daten an die AMADDeviceCommBridge sendet. Das Modul gibt auch die Möglichkeit Androidgeräte zu steuern. &lt;br /&gt;
Für all diese Aktionen und Informationen wird auf dem Androidgerät &amp;quot;Automagic&amp;quot; und ein so genannter Flow benötigt. Die App ist über den Google PlayStore zu beziehen. Das benötigte Flowset bekommt man aus dem FHEM Verzeichnis. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Wie genau verwendet man nun AMADDevice? ===&lt;br /&gt;
* sicherstellen, dass als allererstes die AMADCommBridge in FHEM definiert wurde&lt;br /&gt;
* installieren der App &amp;quot;Automagic Premium&amp;quot; aus dem PlayStore&lt;br /&gt;
* installieren des Flowset 74_AMADDeviceautomagicFlowset$VERSION.xml aus dem Ordner $INSTALLFHEM/FHEM/lib/ auf dem Androidgerät&lt;br /&gt;
* aktivieren des Installationsassistanten Flow in Automagic. Wenn man nun Automagic in den Hintergrund schickt, z.B. Hometaste drücken, startet der Assistant und legt automatisch ein Device für das Androidgerät an.&lt;br /&gt;
&lt;br /&gt;
=== Ein AMADDevice Gerät von Hand anlegen. ===&lt;br /&gt;
&lt;br /&gt;
Define&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; AMADDevice &amp;lt;IP-ADRESSE&amp;gt; &amp;lt;AMAD_ID&amp;gt; remoteServer&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Beispiel ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define WandTabletWohnzimmer AMADDevice 192.168.0.23 123456 Automagic&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Fall wird ein AMADDevice von Hand angelegt. Die AMAD_ID, hier 123456, muß auch exakt so als globale Variable in Automagic eingetragen sein.&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
* airplanemode - Status des Flugmodus&lt;br /&gt;
* androidVersion - aktuell installierte Androidversion&lt;br /&gt;
* automagicState - Statusmeldungen von der Automagic App &#039;&#039;&#039;(Voraussetzung Android &amp;gt;4.3). Ist Android größer 4.3 vorhanden und im Reading steht &amp;quot;wird nicht unterstützt&amp;quot;, muss in den Androideinstellungen unter Ton und Benachrichtigungen -&amp;gt; Benachrichtigungszugriff ein Haken für Automagic gesetzt werden&#039;&#039;&#039;&lt;br /&gt;
* batteryHealth - Zustand der Battery (1=unbekannt, 2=gut, 3=überhitzt, 4=tot, 5=Überspannung, 6=unbekannter Fehler, 7=kalt)&lt;br /&gt;
* batterytemperature - Temperatur der Batterie&lt;br /&gt;
* bluetooth - on/off, Bluetooth Status an oder aus&lt;br /&gt;
* checkActiveTask - Zustand einer zuvor definierten App. 0=nicht aktiv oder nicht aktiv im Vordergrund, 1=aktiv im Vordergrund, &#039;&#039;&#039;siehe Hinweis unten&#039;&#039;&#039;&lt;br /&gt;
* connectedBTdevices - eine Liste der verbundenen Gerät&lt;br /&gt;
* connectedBTdevicesMAC - eine Liste der MAC Adressen aller verbundender BT Geräte&lt;br /&gt;
* currentMusicAlbum - aktuell abgespieltes Musikalbum des verwendeten Mediaplayers&lt;br /&gt;
* currentMusicApp - aktuell verwendeter Mediaplayer (Amazon Music, Google Play Music, Google Play Video, Spotify, YouTube, TuneIn Player, Aldi Life Music)&lt;br /&gt;
* currentMusicArtist - aktuell abgespielter Musikinterpret des verwendeten Mediaplayers&lt;br /&gt;
* currentMusicIcon - Cover vom aktuell abgespielten Album &#039;&#039;&#039;Noch nicht fertig implementiert&#039;&#039;&#039;&lt;br /&gt;
* currentMusicState - Status des aktuellen/zuletzt verwendeten Mediaplayers&lt;br /&gt;
* currentMusicTrack - aktuell abgespielter Musiktitel des verwendeten Mediaplayers&lt;br /&gt;
* daydream - on/off, Daydream gestartet oder nicht&lt;br /&gt;
* deviceState - Status des Androidgerätes. unknown, online, offline.&lt;br /&gt;
* doNotDisturb - aktueller Status des Nicht-Stören-Modus&lt;br /&gt;
* dockingState - undocked/docked Status, ob sich das Gerät in einer Dockingstation befindet.&lt;br /&gt;
* flow_SetCommands - active/inactive, Status des SetCommands Flow&lt;br /&gt;
* flow_informations - active/inactive, Status des Informations Flow&lt;br /&gt;
* flowsetVersionAtDevice - aktuell installierte Flowsetversion auf dem Device&lt;br /&gt;
* incomingCallerName - Anrufername des eingehenden Anrufes&lt;br /&gt;
* incomingCallerNumber - Anrufernummer des eingehenden Anrufes&lt;br /&gt;
* incommingWhatsAppMessageFrom - letzte WhatsApp Nachricht&lt;br /&gt;
* incommingWhatsTelegramMessageFrom - letzte Telegram Nachricht&lt;br /&gt;
* intentRadioName - zuletzt gestreamter Intent Radio Name&lt;br /&gt;
* intentRadioState - Status des IntentRadio Players&lt;br /&gt;
* keyguardSet - 0/1 Displaysperre gesetzt 0=nein 1=ja, bedeutet nicht, dass sie gerade aktiv ist&lt;br /&gt;
* lastSetCommandError - letzte Fehlermeldung vom set Befehl&lt;br /&gt;
* lastSetCommandState - letzter Status vom set Befehl, Befehl erfolgreich/nicht erfolgreich gesendet&lt;br /&gt;
* lastStatusRequestError - letzte Fehlermeldung vom statusRequest Befehl&lt;br /&gt;
* lastStatusRequestState - letzter Status vom statusRequest Befehl, Befehl erfolgreich/nicht erfolgreich gesendet&lt;br /&gt;
* nextAlarmDay - aktiver Alarmtag&lt;br /&gt;
* nextAlarmState - aktueller Status des &amp;quot;Androidinternen&amp;quot; Weckers&lt;br /&gt;
* nextAlarmTime - aktive Alarmzeit&lt;br /&gt;
* powerLevel - Status der Batterie in %&lt;br /&gt;
* powerPlugged - Netzteil angeschlossen? 1=AC Adapter, 2=USB, 4=Kabellos 0=nicht eingesteckt&lt;br /&gt;
* screen - on locked/unlocked, off locked/unlocked gibt an ob der Bildschirm an oder aus ist und gleichzeitig gesperrt oder nicht gesperrt&lt;br /&gt;
* screenBrightness - Bildschirmhelligkeit von 0-255&lt;br /&gt;
* screenFullscreen - on/off, Vollbildmodus (An,Aus)&lt;br /&gt;
* screenOrientation - Landscape,Portrait, Bildschirmausrichtung (Horizontal,Vertikal)&lt;br /&gt;
* screenOrientationMode - auto/manual, Modus für die Ausrichtung (Automatisch, Manuell)&lt;br /&gt;
* state - aktueller Status&lt;br /&gt;
* userFlowState - aktueller Status eines Flows, festgelegt unter dem setUserFlowState Attribut&lt;br /&gt;
* volume - Media Lautstärkewert&lt;br /&gt;
* volumeNotification - Benachrichtigungs-Lautstärke&lt;br /&gt;
&lt;br /&gt;
Beim Reading checkActivTask muß zuvor der Packagename der zu prüfenden App als Attribut checkActiveTask angegeben werden. Beispiel: attr Nexus10Wohnzimmer checkActiveTask com.android.chrome für den Chrome Browser.&lt;br /&gt;
&lt;br /&gt;
=== Set ===&lt;br /&gt;
* activateVoiceInput - aktiviert die Spracheingabe&lt;br /&gt;
* bluetooth - on/off, aktiviert/deaktiviert Bluetooth&lt;br /&gt;
* clearNotificationBar - All,Automagic, löscht alle Meldungen oder nur die Automagic Meldungen in der Statusleiste&lt;br /&gt;
* closeCall - beendet einen laufenden Anruf&lt;br /&gt;
* currentFlowsetUpdate - führt ein Flowsetupdate auf dem Device durch&lt;br /&gt;
* doNotDisturb - schaltet den Nicht-Stören-Modus: always immer stören, never niemals stören, alarmClockOnly nur Wecker darf stören, onlyImportant nur wichtige Störungen&lt;br /&gt;
* installFlowSource - installiert einen Flow auf dem Device, &amp;lt;u&amp;gt;das XML File muss unter /tmp/ liegen und die Endung xml haben. &amp;lt;b&amp;gt;Bsp:&amp;lt;/b&amp;gt; set TabletWohnzimmer installFlowSource WlanUebwerwachen.xml&amp;lt;/u&amp;gt;&lt;br /&gt;
* mediaAmazonMusic - play, stop, next, back ,steuert den Amazon Musik Mediaplayer&lt;br /&gt;
* mediaGoogleMusic - play, stop, next, back ,steuert den Google Play Musik Mediaplayer&lt;br /&gt;
* mediaSpotifyMusic - play, stop, next, back ,steuert den Spotify Mediaplayer&lt;br /&gt;
* mediaTuneinRadio - play, stop, next, back ,steuert den TuneIn Radio Mediaplayer&lt;br /&gt;
* mediaAldiMusic - play, stop, next, back ,steuert den Aldi Musik Mediaplayer&lt;br /&gt;
* mediaAudible - play, stop, next, back ,steuert den Audible Mediaplayer&lt;br /&gt;
* mediaYouTube - play, stop, next, back ,steuert den YouTube Mediaplayer&lt;br /&gt;
* mediaVlcPlayer - play, stop, next, back ,steuert den VLC Mediaplayer&lt;br /&gt;
* nextAlarmTime - setzt die Alarmzeit. gilt aber nur innerhalb der nächsten 24 h&lt;br /&gt;
* openCall - ruft eine Nummer an und legt optional nach X Sekunden auf / set DEVICE openCall 01736458 10 / ruft die Nummer an und beendet den Anruf nach 10s&lt;br /&gt;
* screen - on/off/lock/unlock schaltet den Bildschirm ein/aus oder sperrt/entsperrt ihn&lt;br /&gt;
* screenBrightness - setzt die Bildschirmhelligkeit, von 0-255.&lt;br /&gt;
* screenMsg - versendet eine Bildschirmnachricht&lt;br /&gt;
* sendintent - sendet einen Intentstring Bsp: set $AMADDeviceDEVICE sendIntent org.smblott.intentradio.PLAY url http://stream.klassikradio.de/live/mp3-192/stream.klassikradio.de/play.m3u name Klassikradio, der erste Befehl ist die Aktion und der zweite das Extra. Es können immer zwei Extras mitgegeben werden.&lt;br /&gt;
* sendSMS - sendet eine SMS an eine bestimmte Telefonnummer. Bsp.: sendSMS Dies ist ein Test|555487263&lt;br /&gt;
* startDaydream - startet den Daydream&lt;br /&gt;
* statusRequest - Fordert einen neuen Statusreport beim Device an. Es können nicht von allen Readings per statusRequest die Daten geholt werden. Einige wenige geben nur bei Statusänderung ihren Status wieder.&lt;br /&gt;
* timer - setzt einen Timer innerhalb der als Standard definierten Clock-App auf dem Device. Es können nur Sekunden angegeben werden.&lt;br /&gt;
* ttsMsg - versendet eine Nachricht, die als Sprachnachricht ausgegeben wird&lt;br /&gt;
* userFlowState - aktiviert oder deaktiviert einen oder mehrere Flows,&#039;&#039;&#039;set Nexus7Wohnzimmer Badezimmer vorheizen:inactive oder set Nexus7Wohnzimmer Badezimmer vorheizen,Nachtlicht Steven:inactive&#039;&#039;&#039;&lt;br /&gt;
* vibrate - lässt das Androidgerät vibrieren&lt;br /&gt;
* volume - setzt die Medialautstärke. Entweder die internen Lautsprecher oder sofern angeschlossen die Bluetoothlautsprecher und per Klinkenstecker angeschlossene Lautsprecher, + oder - vor dem Wert reduziert die aktuelle Lautstärke um den Wert. Der maximale Sliderwert kann über das Attribut setVolMax geregelt werden.&lt;br /&gt;
* volumeUp - erhöht die Lautstärke um den angegeben Wert im entsprechenden Attribut. Ist kein Attribut angegeben wird per default 2 genommen.&lt;br /&gt;
* volumeDown - reduziert die Lautstärke um den angegeben Wert im entsprechenden Attribut. Ist kein Attribut angegeben wird per default 2 genommen.&lt;br /&gt;
* volumeNotification - setzt die Benachrichtigungslautstärke.&lt;br /&gt;
&lt;br /&gt;
==== Set abhängig von gesetzten Attributen ====&lt;br /&gt;
* changetoBtDevice - wechselt zu einem anderen Bluetooth Gerät. Attribut setBluetoothDevice muß gesetzt sein. Siehe Hinweis unten!&lt;br /&gt;
* notifySndFile - spielt die angegebene Mediadatei auf dem Androidgerät ab. Die aufzurufende Mediadatei sollte sich im Ordner /storage/emulated/0/Notifications/ befinden. Ist dies nicht der Fall kann man über das Attribut setNotifySndFilePath einen Pfad vorgeben.&lt;br /&gt;
* openApp - öffnet eine ausgewählte App. Attribut setOpenApp&lt;br /&gt;
* openURL - öffnet eine URL im Standardbrowser, sofern kein anderer Browser über das Attribut setOpenUrlBrowser ausgewählt wurde. Bsp: attr Tablet setOpenUrlBrowser de.ozerov.fully|de.ozerov.fully.MainActivity, das erste ist der Package Name und das zweite der Class Name&lt;br /&gt;
* setAPSSID - setzt die AccessPoint SSID um ein WLAN sleep zu verhindern&lt;br /&gt;
* setScreenOnForTimer ändert die Zeitdauer, die das Display an bleiben soll!&lt;br /&gt;
* screenFullscreen - on/off, (aktiviert/deaktiviert) den Vollbildmodus. Attribut setFullscreen&lt;br /&gt;
* screenLock - Sperrt den Bildschirm mit Pinabfrage. Attribut setScreenlockPIN - hier die Pin dafür eingeben. Erlaubt sind nur Zahlen. Es müßen mindestens 4, bis max 16 Zeichen verwendet werden.&lt;br /&gt;
* screenOrientation - Auto,Landscape,Portait, aktiviert die Bildschirmausrichtung (Automatisch,Horizontal,Vertikal). Attribut setScreenOrientation&lt;br /&gt;
* system - setzt Systembefehle ab (nur bei gerootetet Geräten). reboot,shutdown,airplanemodeON (kann nur aktiviert werden) Attribut root, in den Automagic Einstellungen muss &amp;quot;Root Funktion&amp;quot; gesetzt werden&lt;br /&gt;
* setNotifySndFilePath - setzt den korrekten Systempfad zur Notifydatei (default ist /storage/emulated/0/Notifications/&lt;br /&gt;
* setTtsMsgSpeed - setzt die Sprachgeschwindigkeit bei der Sprachausgabe(Werte zwischen 0.5 bis 4.0 in 0.5er Schritten) default ist 1.0&lt;br /&gt;
* setTtsMsgSpeed - setzt die Sprache bei der Sprachausgabe, de oder en (default ist de)&lt;br /&gt;
* setVolUpDownStep - setzt den Step für volumeUp und volumeDown&lt;br /&gt;
* setVolMax - setzt die maximale Volume Größe für den Slider&lt;br /&gt;
* setNotifyVolMax - setzt den maximalen Lautstärkewert für Benachrichtigungslautstärke für den Slider&lt;br /&gt;
* setRingSoundVolMax - setzt den maximalen Lautstärkewert für Klingellautstärke für den Slider&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Um openApp verwenden zu können, muss als Attribut der Package Name der App angegeben werden. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Um zwischen Bluetoothgeräten wechseln zu können, muss das Attribut setBluetoothDevice mit folgender Syntax gesetzt werden. attr &amp;lt;DEVICE&amp;gt; BTdeviceName1|MAC,BTDeviceName2|MAC Es muss zwingend darauf geachtet werden, dass beim BTdeviceName kein Leerzeichen vorhanden ist. Am besten zusammen oder mit Unterstrich. Bei der MAC ist darauf zu achten, dass wirklich nach jeder zweiten Zahl ein : steht&lt;br /&gt;
&lt;br /&gt;
** &#039;&#039;&#039;Beispiel: attr Nexus10Wohnzimmer setBluetoothDevice Logitech_BT_Adapter|AB:12:CD:34:EF:32,Anker_A3565|GH:56:IJ:78:KL:76&lt;br /&gt;
&lt;br /&gt;
=== state ===&lt;br /&gt;
* initialized - Ist der Status kurz nach einem define.&lt;br /&gt;
* active - die Geräteinstanz ist im aktiven Status.&lt;br /&gt;
* disabled - die Geräteinstanz wurde über das Attribut disable deaktiviert&lt;br /&gt;
&lt;br /&gt;
==Anwendungsbeispiele==&lt;br /&gt;
=== Lademanagement ===&lt;br /&gt;
Ich habe die Ladegeräte für meine Androidgeräte an Funkschaltsteckdosen. Ein DOIF schaltet bei unter 30% die Steckdose ein und bei über 90% wieder aus.&lt;br /&gt;
&lt;br /&gt;
Hier mal ein einfaches DOIF Beispiel für ein Lademanagment&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
... DOIF ([Nexus5Handy:powerLevel] &amp;lt; 30) (set LadenetzteilNexus5Handy:FILTER=STATE=off on) DOELSEIF ([Nexus5Handy:powerLevel] &amp;gt; 90) (set LadenetzteilNexus5Handy:FILTER=STATE=on off) DOELSE&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Wecker ===&lt;br /&gt;
Morgens lasse ich mich über mein Tablet im Schlafzimmer mit Musik wecken. Verwendet wird hierzu der wakeuptimer des RESIDENTS Modules. Das Abspielen stoppe ich dann von Hand. Danach erfolgt noch eine Ansage wie das Wetter gerade ist und wird.&lt;br /&gt;
&lt;br /&gt;
=== Mediacenter ===&lt;br /&gt;
Mein 10&amp;quot; Tablet im Wohnzimmer ist Mediaplayer für das Wohnzimmer mit Bluetoothlautsprechern. Die Lautstärke wird automatisch heruntergesetzt, wenn die Fritzbox einen Anruf auf das Wohnzimmer Handgerät signalisiert.&lt;br /&gt;
&lt;br /&gt;
=== Sprachbefehl - Abfragen von Zuständen diverser Sensoren ===&lt;br /&gt;
Wenn ich die Spracheingabe aktiviere und nach der Temperatur im Wohnzimmer frage, bekomme ich diese angesagt.&lt;br /&gt;
&lt;br /&gt;
Der Teil im Feld Daten ist ein klassisches ReadingsVal, halt nur ohne Komma und ohne Anführungszeichen&lt;br /&gt;
&lt;br /&gt;
WIRD GERADE ÜBERARBEITET&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Schaltbefehle vom Androidgerät an FHEM senden ===&lt;br /&gt;
Hierfür ist ein eigener Flow einzurichten. Wie das genau geht, verrät die Hilfe.&lt;br /&gt;
Um einen Schaltbefehl für FHEM zu erstellen, folgt nach dem Trigger eine Aktion als Script (Aktion Type: Script). Hier ist folgendes einzutragen:&lt;br /&gt;
&lt;br /&gt;
setcmd = &amp;quot;LichtWohnzimmerLampeRechts on&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;set&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In der ersten Zeile wird also der Schaltbefehl in der Variablem setcmd eingetragen und in der zweiten Zeile der FHEM Befehl in der Variablen fhemcmd.&lt;br /&gt;
&lt;br /&gt;
Danach müsst Ihr nur noch in einer weiteren Aktion den Flow &amp;quot;Send Data to AMADCommBridge&amp;quot; ausführen (Aktion Type: Flows ausführen). Die Aktion sollte bereits in Eurer Liste Vorhanden sein.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Screenshot_20160717-134948.png|200px]]&lt;br /&gt;
[[Datei:Screenshot 17.07.2016 1-50-27.png|200px]]&lt;br /&gt;
&lt;br /&gt;
Nun sollte Lampe1 angeschalten werden, wenn der Flow ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
=== Mit FHEM ein Flow ausführen ===&lt;br /&gt;
In Automagic einen Triggervom Type General Broadcast für den Flow wählen welchen man fern ausführen möchte. In der Trigger Definition steht unter Aktion &#039;&#039;automagic.NameDesFlows&#039;&#039; und auf Wunsch unter Access Intent Extra&#039;s &#039;&#039;param1 = getString(&amp;quot;label1&amp;quot;); param2 = getString(&amp;quot;label2&amp;quot;);&#039;&#039;. &#039;&#039;NameDesFlows&#039;&#039; ist natürlich die Name des Flows, der kein Leerzeichen enthält. Mit ein FHEM Command &#039;set &#039;&#039;AMADDevice&#039;&#039; sendIntent &#039;&#039;automagic.namederflow label1 param1 label2 param2&#039;&#039;&#039; wird dann der Flow aus geführt.&lt;br /&gt;
&lt;br /&gt;
=== Lister aller Variablen für die AMADCommandBridge ===&lt;br /&gt;
fhemcmd Variable &lt;br /&gt;
* Wert &amp;quot;set&amp;quot; - Variable für den Schaltbefehl &#039;setcmd&#039;&lt;br /&gt;
* Wert &amp;quot;setreading&amp;quot; - Variable für die Readingswerte &#039;fhemdata&#039;&lt;br /&gt;
* &amp;quot;readingsval&amp;quot; - Variable für die Abfragewerte &#039;readingsvalcmd&#039;&lt;br /&gt;
* &amp;quot;fhemfunc&amp;quot; - Variable für den Funktionsnamen &#039;fhemsub&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele für Skriptinhalte:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Schalten einer Lampe&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
setcmd = &amp;quot;LichtWohnzimmerLampeRechts on&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;set&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Status eines Device abfragen&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
readingsvalcmd = &amp;quot;DEVICE READING DEFAULT&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;readingsval&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Rückgabevariable, die dann weiter verarbeitet werden kann, heißt &#039;&#039;&#039;respreadingsval&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Aufruf einer 99_myUtils Subroutine&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
fhemsub = &amp;quot;mySub()&amp;quot;; oder natürlich auch &amp;quot;mySub(&#039;was_auch_immer&#039;)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;fhemfunc&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Rückgabevariable, die dann weiter verarbeitet werden kann, heißt &#039;&#039;&#039;respfhemfunc&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Bekannte Meldungen/Hinweise/Probleme ==&lt;br /&gt;
&lt;br /&gt;
Wenn auf dem Android-Gerät die Fehlermeldung &#039;Accessibility service not running&#039; von Automagic kommt oder im FHEM das reading state  &#039;Flow Informations mit Fehler beendet&#039; steht, dann muss der Accessibility Service auf dem Android-Device aktiviert werden: Einstellungen --&amp;gt; Bedienungshilfen --&amp;gt; Automagic Premium. Hier muss der Schalter auf &#039;an&#039; stehen. Sollte dies der Fall sein, hilft u.U. ein kurzes Aus- und wieder Einschalten.&lt;br /&gt;
&lt;br /&gt;
Gerät wird oft als offline angezeigt und es können keine set Befehle abgesetzt werden.&lt;br /&gt;
Mit der AMAD Version 2.2 hielt eine neue Behandlung des deviceState Readings Einzug. Das Reading stellt nun den tatsächlichen Status des Gerätes gegenüber FHEM da. Bei vielen Android 6 Geräten kommt es aber auf Grund vom DeepSleep Modus zum Wegfall der WLAN Verbindung. Hier hilft die neue KeepAlive Funktion in AMAD. Dafür muß lediglich unter &lt;br /&gt;
* Einstellungen --&amp;gt; Akku --&amp;gt; oben auf die drei Punkte - Akku Leistungsoptimierung --&amp;gt; alle Apps und dann Automagic auswählen und &amp;quot;Nicht optimieren&amp;quot;&lt;br /&gt;
ausgewählt werden und in FHEM für das Device das Attribut setAPSSID gesetzt werden. Alles andere macht das Modul selbst.&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FHEM_mit_HTTPS_SSL-Zertifikat_und_eine_eigene_Zertifizierungsstelle&amp;diff=27277</id>
		<title>FHEM mit HTTPS SSL-Zertifikat und eine eigene Zertifizierungsstelle</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FHEM_mit_HTTPS_SSL-Zertifikat_und_eine_eigene_Zertifizierungsstelle&amp;diff=27277"/>
		<updated>2018-06-26T21:49:08Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: /* Einbinden der root CA in die Zertifizierungsstelle des Browsers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Vorwort ==&lt;br /&gt;
=== Dein Anliegen ===&lt;br /&gt;
Du möchtest FHEM mit HTTPS betreiben, hasst es aber, ständig von Deinem Browser darauf aufmerksam gemacht zu werden, dass dies &amp;quot;keine sichere Verbindung&amp;quot; ist. &lt;br /&gt;
Oder Du möchtest einen weiteren Serverdienst aufsetzen, welcher verschlüsselte SSL oder TLS-Verbindungen anbietet (z.B. HTTPS, POP3S, IMAPS, LDAPS, SMTP mit TLS).&lt;br /&gt;
&lt;br /&gt;
=== Die Schwierigkeit dabei ===&lt;br /&gt;
Um eine mit SSL/TLS abgesicherte Verbindung anzubieten, benötigst Du ein Serverzertifikat. Dieses muss von einer Zertifizierungsstelle (Certification Authority oder kurz CA) signiert sein.&lt;br /&gt;
Ein offizielles Serverzertifikat, welches von einer offiziellen Stelle signiert ist, ist leider nicht kostenlos. Meist werden jährliche Gebühren in Höhe von mehreren hundert Euro fällig.&lt;br /&gt;
&lt;br /&gt;
=== Eine mögliche Lösung ===&lt;br /&gt;
Unter Linux kann man mit Bordmitteln eine eigene CA aufsetzen und selbst ein Zertifikate erstellen und signieren. Das ist ein Vorgang von wenigen Minuten. Alle Einzelheiten beschreibt dieser Artikel.&lt;br /&gt;
Der einzige Unterschied zu einem von einer anerkannten Stelle signierten Zertifikat ist, dass der Client (Emailprogramm, Browser, etc.) einmalig das root CA importieren muß.&lt;br /&gt;
&lt;br /&gt;
== Genaues Vorgehen ==&lt;br /&gt;
=== OpenSSL installieren ===&lt;br /&gt;
Für die Verwaltung der Zertifikate und im übrigen auch für die Verschlüsselung der Verbindungen mit SSL und TLS kommt unter Linux fast immer OpenSSL zum Einsatz. Wahrscheinlich ist das auf Deinem Sytem deshalb bereits installiert, wenn nicht, musst Du das Paket openssl nachinstallieren. Du benötigst aus diesem Paket den Kommandozeilenbefehl openssl.&lt;br /&gt;
&lt;br /&gt;
=== Erstellen der CA ===&lt;br /&gt;
Lege zunächst ein Verzeichnis an, in dem Du das Zertifikat ablegen willst. Wir nehmen in unserem Beispiel /root/ca:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@linux# mkdir /root/ca&lt;br /&gt;
root@linux# cd /root/ca&amp;lt;/source&amp;gt;&lt;br /&gt;
Die Gültigkeit setzen wir mit 10 Jahren bewusst sehr hoch an. Läuft die CA aus, so werden nämlich auch alle damit signierten Serverzertifikate ungültig. Die CA enthält einen geheimen Schlüssel, welcher automatisch erzeugt und in der Datei cakey.pem abgelegt wird. Das CA-Zertifikat wird nach cacert.pem geschrieben. Der folgende Befehl erzeugt das einen Schlüssel für das Zertifikat mit einer Länge von 2048 Bit:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@linux# openssl req -new -x509 -newkey rsa:2048 -keyout cakey.pem -out cacert.pem -days 3650&lt;br /&gt;
Generating a 2048 bit RSA private key&lt;br /&gt;
..............................................................&lt;br /&gt;
..............................................................&lt;br /&gt;
.........................................+++&lt;br /&gt;
......................................+++&lt;br /&gt;
writing new private key to &#039;cakey.pem&#039;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer den geheimen Schlüssel der CA kennt, kann damit beliebige Serverzertifikate signieren. Deshalb wird diese Schlüsseldatei nicht im Klartext auf der Festplatte abgelegt, sondern mit einer Passphrase verschlüsselt. Diese Passphrase benötigst Du immer dann, wenn Du mit der CA neue Zertifikate ausstellen willst:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Enter PEM pass phrase: sehrlangesgeheimespasswort&lt;br /&gt;
Verifying - Enter PEM pass phrase: sehrlangesgeheimespasswort&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Nun werden wir gebeten, Daten einzugeben, welche die CA identifizieren. Diese werden dem Client angezeigt, wenn er aufgefordert wird, das Zertifikat zu akzeptieren oder abzulehnen. Der Code für Deutschland ist DE. Wenn Du ein Feld leer lassen möchtest, so gib einen Punkt ein. Ansonsten wird der in eckigen Klammern stehende Defaultwert eingetragen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
-----&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter &#039;.&#039;, the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]: DE&lt;br /&gt;
State or Province Name (full name) [Some-State]:Brandenburg&lt;br /&gt;
Locality Name (eg, city) []:Potsdam&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Familie AG&lt;br /&gt;
Organizational Unit Name (eg, section) []:EDV&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Das Feld Common Name (CN) ist hier der offizielle Name der Zertifizierungsstelle. Für Dein eigenes CA kannst Du einfach Deinen eigenen Namen eintragen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Common Name (eg, YOUR name) []: Cool Tux&lt;br /&gt;
Email Address []: cooltux@gmail.tada&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Fertig. Folgende zwei Dateien sind entstanden:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
root@linux# ll&lt;br /&gt;
insgesamt 9&lt;br /&gt;
drwxr-xr-x   2 root root  112 2006-04-30 12:08 .&lt;br /&gt;
drwx------  12 root root  600 2006-04-30 11:54 ..&lt;br /&gt;
-rw-r--r--   1 root root 1212 2006-04-30 12:08 cacert.pem&lt;br /&gt;
-rw-r--r--   1 root root  963 2006-04-30 12:08 cakey.pem&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Vorsichtshalber solltest Du die Rechte so setzen, dass die Schlüsseldatei nur für root lesbar ist:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
root@linux# chmod 600 cakey.pem&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Du kannst nun ausprobieren, ob Du den Schlüssel mit der Passphrase wieder öffnen kannst:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
root@linux# openssl rsa -in cakey.pem -noout -text&lt;br /&gt;
Enter pass phrase for cakey.pem: wrzlprmpft&lt;br /&gt;
Private-Key: (1024 bit)&lt;br /&gt;
modulus:&lt;br /&gt;
    00:d5:a5:37:51:e9:d9:fa:e3:97:e7:46:b2:88:1a:&lt;br /&gt;
    b5:46:80:47:76:14:ae:2b:8b:3e:35:5c:ab:15:84:&lt;br /&gt;
    53:d9:63:2e:7f:08:4b:ec:77:db:02:45:f8:c7:46:&lt;br /&gt;
    58:cd:2d:f9:29:4d:96:3d:d8:6c:5d:9f:79:8a:04:&lt;br /&gt;
    cf:b7:3a:89:da:a9:63:9f:44:b3:83:cf:0d:70:7d:&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
usw...&lt;br /&gt;
&lt;br /&gt;
=== Schlüssel für das Serverzertifikat erzeugen ===&lt;br /&gt;
Nachdem wir nun eine eigene CA haben, kann diese nun endlich für unseren Server ein Zertifikat herausgeben. Dazu erzeugen wir zunächst einen 2048 Bit langen RSA Schlüssel, der mit AES 128 verschlüsselt auf der Platte abgelegt wird (ja wirklich, auch hier wieder ein verschlüsselter Schlüssel). Die Passphrase muss diesmal nicht sonderlich geheim sein, da wir sie ohnehin im Anschluss wieder entfernen werden. OpenSSL lässt allerdings keine leere Phrase zu:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@linux# openssl genrsa -out serverkey.pem -aes128 2048 -days 3650&lt;br /&gt;
Generating RSA private key, 2048 bit long modulus&lt;br /&gt;
....+++&lt;br /&gt;
.......................................+++&lt;br /&gt;
e is 65537 (0x10001)&lt;br /&gt;
Enter pass phrase for serverkey.pem: test&lt;br /&gt;
Verifying - Enter pass phrase for serverkey.pem: test&amp;lt;/source&amp;gt;&lt;br /&gt;
So. Nun entfernen wir die Passphrase wieder. Warum? Der Serverdienst (Apache, Cyrus, etc.) muss schließlich in der Lage sein, den Schlüssel ohne Dein Zutun zu lesen. Oder möchtest Du bei jedem Booten des Servers ein Passwort eingeben müssen?&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@linux# openssl rsa -in serverkey.pem -out serverkey.pem&lt;br /&gt;
Enter pass phrase for serverkey.pem: jaja&lt;br /&gt;
writing RSA key&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Certificate Signing Request erzeugen ===&lt;br /&gt;
Der nächste Schritt zum eigenen Zertifikat ist ein CSR. Dies muss dann nur noch von der CA signiert werden. Hier sind wieder Angaben analog zum Erstellen der CA nötig, was oft Verwirrung stiftet. Die allgemeinen Daten kann man ggfl. gleich wie oben eingeben:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@linux#  openssl req -new -key serverkey.pem -out req.pem -nodes&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter &#039;.&#039;, the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]: DE&lt;br /&gt;
State or Province Name (full name) [Some-State]:Brandenburg&lt;br /&gt;
Locality Name (eg, city) []:Potsdam&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Familie AG&lt;br /&gt;
Organizational Unit Name (eg, section) []:EDV&amp;lt;/source&amp;gt;&lt;br /&gt;
ACHTUNG, jetzt kommt das Wichtige: Beim Serverzertifikat ist der Common Name von entscheidender Bedeutung. Hier muss der DNS-Name stehen, unter dem der Client den Server anspricht! Wird das Zertifikat für eine HTTPS-Verbindung zu fhem.local verwendet, so muss der Common Name eben genau fhem.local heißen. Anderfalls wird der Browser das Zertifikat nicht akzeptieren, da er davon ausgehen muss, auf dem falschen Server gelandet zu sein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Common Name (eg, YOUR name) []: fhem.local&lt;br /&gt;
Email Address []: admin.fhem.local&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Weitere Optionen kann man einfach leer lassen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Mittlerweile tummeln sich schon vier Dateien in unserem Verzeichnis:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@linux# ll&lt;br /&gt;
insgesamt 17&lt;br /&gt;
drwxr-xr-x   2 root root  168 2006-04-30 12:29 .&lt;br /&gt;
drwx------  12 root root  600 2006-04-30 11:54 ..&lt;br /&gt;
-rw-r--r--   1 root root 1212 2006-04-30 12:08 cacert.pem&lt;br /&gt;
-rw-------   1 root root  963 2006-04-30 12:08 cakey.pem&lt;br /&gt;
-rw-r--r--   1 root root 1017 2006-04-30 12:29 req.pem&lt;br /&gt;
-rw-r--r--   1 root root 1679 2006-04-30 12:21 serverkey.pem&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OpenSSL-Konfiguration anpassen ===&lt;br /&gt;
Leider kann man bei OpenSSL nicht alle Daten als Kommandozeilenargumente übergeben. Einige Einstellungen muss man lästigerweise in der Datei /etc/ssl/openssl.cnf ändern, bevor man signieren kann. Öffne diese Datei und passe folgende Zeilen in der Sektion [ CA_default ] an:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/ssl/openssl.cnf:&lt;br /&gt;
dir             = .              # Where everything is kept&lt;br /&gt;
new_certs_dir   = $dir           # default place for new certs&lt;br /&gt;
private_key     = $dir/cakey.pem # The private key&lt;br /&gt;
RANDFILE        = $dir/.rand     # private random number file&lt;br /&gt;
default_days    = 3650           # how long to certify for&amp;lt;/source&amp;gt;&lt;br /&gt;
Das Feld default_days ist auf 365 Tage voreingestellt und gibt die Gültigkeit des Zertifikates an. Abgelaufene Zertifikate sind im Übrigen ein sehr häufiges Problem. Wenn es soweit ist, kennt sich damit nämlich schon lange keiner mehr aus. Deswegen kannst Du wie im Beispiel angegeben die Lebensdauer z.B. auf 10 Jahre heraufsetzen.&lt;br /&gt;
&lt;br /&gt;
Nun muss man noch einige Dateien anlegen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@linux# echo 01 &amp;gt; serial&lt;br /&gt;
root@linux# touch index.txt&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Serverzertifikat signieren ===&lt;br /&gt;
Kommen wir zum feierlichen Abschluss: Unsere CA signiert nun das Zertifikat:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@linux# openssl ca -in req.pem -notext -out servercert.pem&lt;br /&gt;
Enter pass phrase for ./cakey.pem: langesgeheimespasswort&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Certificate is to be certified until Apr 27 10:45:36 2016 GMT (3650 days)&lt;br /&gt;
Sign the certificate? [y/n]: y&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1 out of 1 certificate requests certified, commit? [y/n] y&lt;br /&gt;
Write out database with 1 new entries&lt;br /&gt;
Data Base Updated&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Zertifikate installieren ===&lt;br /&gt;
Wie Du das Zertifikat in FHEM installierst, findest Du [[Raspberry_Pi_%26_HTTPS|hier]] und wenn Du ein Server Zertifikat für NGINX installieren möchtest, findest Du Infos dazu [[HTTPS-Absicherung_%26_Authentifizierung_via_nginx_Webserver|hier]]&lt;br /&gt;
&lt;br /&gt;
== Nachwort ==&lt;br /&gt;
=== Einbinden der root CA in die Zertifizierungsstelle des Browsers ===&lt;br /&gt;
Beim Firefox importieren wir unsere cacert.pem unter Einstellungen -&amp;gt; Erweitert -&amp;gt; Zertifikate -&amp;gt; Zertifikate anzeigen -&amp;gt; Zertifizierungsstellen ein.&lt;br /&gt;
Unter Chrome/Chromium finden wir die Zertifikatsverwaltung unter Einstellungen -&amp;gt; Erweitert -&amp;gt; Zertifikate verwalten HTTPS/SSL-Zertifikate und -Einstellungen verwalten -&amp;gt; Zertifizierungsstellen&lt;br /&gt;
&lt;br /&gt;
=== Bekannte Probleme ===&lt;br /&gt;
Für den Chrome/Chromium müssen wir zusätzlich &amp;quot;Subject Alternative Names (SAN)&amp;quot; in unser Zertifikat eintragen. Dies geschieht beim Serverzertifikat signieren. Dazu müssen wir uns eine weitere Datei anlegen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@linux# vim oats.extensions.cnf&lt;br /&gt;
&lt;br /&gt;
basicConstraints=CA:FALSE&lt;br /&gt;
subjectAltName=@my_subject_alt_names&lt;br /&gt;
subjectKeyIdentifier = hash&lt;br /&gt;
&lt;br /&gt;
[ my_subject_alt_names ]&lt;br /&gt;
DNS.1 = fhem01.tuxnet.local&lt;br /&gt;
DNS.2 = fhem02.tuxnet.local&lt;br /&gt;
DNS.3 = fhem01-vpn.tuxnet.local&amp;lt;/source&amp;gt;&lt;br /&gt;
Die Signierung unseres Serverzertifikates erfolgt dann mit folgendem Befehl:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
openssl ca -in req.pem -notext -extfile oats.extensions.cnf -out servercert.pem&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Prüfen von Zertifikaten ===&lt;br /&gt;
Zertifikate kann man im übrigen auf dieser [https://www.networking4all.com/en/ssl+certificates/csr+check/| Seite] prüfen lassen.&lt;br /&gt;
Dazu kopiert man den Inhalt der servercert.pem in das Eingabefeld der Seite und klickt dann auf Check CSR.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=GardenaSmartBridge&amp;diff=26393</id>
		<title>GardenaSmartBridge</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=GardenaSmartBridge&amp;diff=26393"/>
		<updated>2018-04-09T06:55:18Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=GardenaSmartBridge&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=&lt;br /&gt;
|ModFTopic=75098&lt;br /&gt;
|ModTechName=73_GardenaSmartBridge.pm&lt;br /&gt;
|ModOwner={{Link2FU|13684|CoolTux}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Modul GardenaSmartBridge stellt zusammen mit dem Device [[GardenaSmartDevice]] die Kommunikation zwischen der &#039;&#039;&#039;Gardena Cloud&#039;&#039;&#039; und FHEM her.&lt;br /&gt;
Es können damit Rasenmäher, Bewässerungscomputer und Sensoren überwacht und gesteuert werden, die Steuerung erfolgt durch das Modul [[GardenaSmartDevice]]. &lt;br /&gt;
&#039;&#039;Informationen zum [[GardenaSmartSystem]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
* Perl-Modul &amp;quot;SSL Packet&amp;quot;&lt;br /&gt;
* Internetanbinung&lt;br /&gt;
* Netzwerk mit W-Lan oder LAN (RJ45)&lt;br /&gt;
* Smart Gateway von Gardena &lt;br /&gt;
* Account bei [https://sg-api.dss.husqvarnagroup.net/ Gardena]&lt;br /&gt;
* Smart Produkte von Gardena [[GardenaSmartSystem]]&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
=== Define ===&lt;br /&gt;
&amp;lt;code&amp;gt; define &amp;lt;NAME&amp;gt; GardenaSmartBridge &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Beispiel ====&lt;br /&gt;
&amp;lt;code&amp;gt; define myGardenaBridge GardenaSmartBridge &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Anweisung erstellt ein neues GardenaSmartBridge Device Namens myGardenaBridge.&lt;br /&gt;
Im folgendem wird automatisch ein neuer Raum &#039;&#039;GardenaSmart&#039;&#039; erstellt und nach setzen des Attributes gardenaAccountEmail und einem &amp;lt;code&amp;gt;set myGardenaBridge gardenaAccountPassword&amp;lt;/code&amp;gt; alle dem [https://sg-api.dss.husqvarnagroup.net/ Gardena] Account bekannten Geräte&lt;br /&gt;
angelegt.&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
* debugJSON -&lt;br /&gt;
* disable - aktivieren &amp;amp; deaktivieren der Bridge (0= aktiviert, 1= deaktiviert) &lt;br /&gt;
* interval - Abfrageinterval in Minuten (5= default)&lt;br /&gt;
* gardenaAccountEmail - Email Adresse, die auch in der GardenaApp verwendet wurde&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
&lt;br /&gt;
* address - bei Gardena verwendete Adresse&lt;br /&gt;
* city -  bei Gardena hinterlegte Stadt&lt;br /&gt;
* devices - Anzahl der angelernten/verwendeten Geräte incl. des Gateways&lt;br /&gt;
* latitude - Längengrad&lt;br /&gt;
* longitude - Breitengrad &lt;br /&gt;
* name - Name des Gartens &#039;&#039;(Standard &amp;quot;MY GARDEN&amp;quot;)&#039;&#039;&lt;br /&gt;
* state - Status der Bridge (connect to cloud= Verbunden mit der Cloud) &lt;br /&gt;
* token - SessionID&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
* keine&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=75098|LinkText=Forenthread zu diesem Modul}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Gerätemodul]]&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=XiaomiBTLESens&amp;diff=26308</id>
		<title>XiaomiBTLESens</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=XiaomiBTLESens&amp;diff=26308"/>
		<updated>2018-03-30T07:44:20Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: /* Attribute */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Auslesen unterstützter Xiaomi BTLE Sensoren&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Sonstige Systeme&lt;br /&gt;
|ModTechName=74_XiaomiBTLESens.pm&lt;br /&gt;
|ModOwner=CoolTux &amp;lt;br/&amp;gt;({{Link2FU|13684|Forum}} / [[Benutzer:CoolTux|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Beschreibung==&lt;br /&gt;
Mit diesem Modul ist es möglich, diverse BTLE Sensoren der Firma Xiaomi auszulesen und die entsprechenden Daten als Readings darzustellen, z. B. den XiaomiFlowerMonitor (XiaomiFlowerSens).&lt;br /&gt;
{{Hinweis|Das Modul ist der Nachfolger und eine Verallgemeinerung des &#039;&#039;&#039;&#039;&#039;bisherigen Moduls XiaomiFlowerSens&#039;&#039;&#039;&#039;&#039; (74_XiaomiFlowerSens). Letzteres ist weiter erreichbar, wird aber nicht mehr weiterentwickelt oder fehlerbereinigt.}}&lt;br /&gt;
&lt;br /&gt;
== Voraussetzung zur Verwendung des Modules ==&lt;br /&gt;
Auf dem Rechner wird &lt;br /&gt;
* libjson-perl&lt;br /&gt;
* bluez (gatttool und hcitool)&lt;br /&gt;
vorausgesetzt.&lt;br /&gt;
&lt;br /&gt;
Für die Konfiguration wird die Bluetooth-Adresse (BT-MAC) des jeweiligen Sensors benötigt, die mit Hilfe von &lt;br /&gt;
&amp;lt;code&amp;gt;hcitool lescan&amp;lt;/code&amp;gt; &lt;br /&gt;
aus der Liste der vom Rechner erkannten aktiven Bluetooth Low Energy Geräten der Umgebung herausgefunden werden kann. Die Identifikation eines konkreten Sensors kann durch Vergleich der Liste mit und ohne aktivem Sensor (Batterie entfernen!) geschehen.&lt;br /&gt;
{{Hinweis|Auf einem Debian Wheezy scheint es Probleme mit dem Bluetooth Stack zu geben. Selbst wenn man ein aktuelles BT 5.x selbst kompiliert und installiert gibt spätestens das gatttool keine Daten mehr aus. Es sollte daher unbedingt auf Debian Jessie gewechselt werden (empfohlen wird eine Neuinstallation).}}&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; XiaomiBTLESens &amp;lt;BT-MAC&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
:&amp;lt;code&amp;gt;define Weihnachtskaktus XiaomiBTLESens C4:7C:8D:62:42:6F&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Anweisung erstellt ein XiaomiBTLESens Device mit dem Namen Weihnachtskaktus und der BT-MAC C4:7C:8D:62:42:6F.&lt;br /&gt;
Als nächstes sollte auf jeden Fall das Attribut model gesetzt werden, um das korrekte Gerät anzusprechen.&lt;br /&gt;
&lt;br /&gt;
==Readings==&lt;br /&gt;
* state - aktueller Status des Device.&lt;br /&gt;
* battery - Status der Batterie in Abhängigkeit des batteryLevel Readings.&lt;br /&gt;
* batteryLevel - Füllstand der Batterie in Prozent.&lt;br /&gt;
* fertility - Nährstoffgehalt des Pflanzenbodens (Dünger) - Bodenleitfähigkeit&lt;br /&gt;
* firmware - aktuelle Firmware auf dem Device&lt;br /&gt;
* lux - aktuelle Lichtintensität&lt;br /&gt;
* moisture - Wassergehalt (Feuchtigkeit) des Pflanzenbodens&lt;br /&gt;
* temperature - Umgebungstemperatur&lt;br /&gt;
&lt;br /&gt;
==Set==&lt;br /&gt;
* devicename - setzt einen Devicenamen&lt;br /&gt;
&lt;br /&gt;
==Get==&lt;br /&gt;
* sensorData - aktive Abfrage der Sensors Werte&lt;br /&gt;
* devicename - liest den Devicenamen aus&lt;br /&gt;
* firmware - liest die Firmeware aus&lt;br /&gt;
&lt;br /&gt;
==Attribute==&lt;br /&gt;
* interval - Intervallzeit in Sekunden, nach der der nächste automatische Datenabruf erfolgen soll&lt;br /&gt;
* model - Auswahl eines unterstützten Gerätes&lt;br /&gt;
* disable - deaktiviert die Kommunikation mit dem Gerät, den Abruf von Daten&lt;br /&gt;
* disabledForIntervals - deaktiviert das Gerät für den angegebenen Zeitintervall (13:00-18:30 or 13:00-18:30 22:00-23:00)&lt;br /&gt;
* minFertility - min. Fruchtbarkeits-Grenzwert für ein Ereignis minFertility low &lt;br /&gt;
* maxFertility - max. Fruchtbarkeits-Grenzwert für ein Ereignis maxFertility high &lt;br /&gt;
* minMoisture - min. Feuchtigkeits-Grenzwert für ein Ereignis minMoisture low &lt;br /&gt;
* maxMoisture - max. Feuchtigkeits-Grenzwert für ein Ereignis maxMoisture high &lt;br /&gt;
* minTemp - min. Temperatur-Grenzwert für ein Ereignis minTemp low &lt;br /&gt;
* maxTemp - max. Temperatur-Grenzwert für ein Ereignis maxTemp high &lt;br /&gt;
* minlux - min. Helligkeits-Grenzwert für ein Ereignis minlux low &lt;br /&gt;
* maxlux - max. Helligkeits-Grenzwert für ein Ereignis maxlux high &lt;br /&gt;
*:Beispiele für min/max-Ereignisse:&lt;br /&gt;
*::2017-03-16 11:08:05 XiaomiFlowerSens Dracaena minMoisture low&lt;br /&gt;
*::2017-03-16 11:08:06 XiaomiFlowerSens Dracaena maxTemp high&lt;br /&gt;
* sshHost - FQDN oder IP-Adresse eines entfernten SSH-Systems. Das SSH-System ist auf Keyfile basierte Authentifizierung zu konfigurieren. Am elegantesten geschieht das mit einer .ssh/config Datei auf dem SSH-Client.&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=AMAD&amp;diff=24768</id>
		<title>AMAD</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=AMAD&amp;diff=24768"/>
		<updated>2018-01-27T11:04:47Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: /* Readings */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuern von Androidgeräten und Anzeige von bestimmten Informationen dieser Geräte&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Sonstige Systeme&lt;br /&gt;
|ModTechName=73_AMADCommBridge.pm, 74_AMADDevice.pm&lt;br /&gt;
|ModOwner=CoolTux &amp;lt;br /&amp;gt;([http://forum.fhem.de/index.php?action=profile;u=13684 Forum] / [[Benutzer:CoolTux|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= AMAD 4.0 [AMADNG] =&lt;br /&gt;
== 73_AMADCommBridge / 74_AMADDevice ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Vorwort =&lt;br /&gt;
=== Warum AMADNG ===&lt;br /&gt;
Nach fast 6 Monaten Entwicklungszeit wurde die neuste AMAD Version am 24.07.2017 offiziell frei gegeben. Diesmal lagen mir mehrere Dinge am Herzen.&lt;br /&gt;
In erster Linie wollte ich eine softwareseitige Trennung der AMADCommBridge vom eigentlichen Android Device. Daher ist die neue Version ein zweistufiges Modul geworden.&lt;br /&gt;
Im Laufe der Entwicklung kamen auch andere Anforderungen hinzu, die ich dann fähig war umzusetzen. Eine dieser Anforderungen war eine einfachere und besser funktionierende Installation. Herausgekommen ist ein Android Installationsassistant.&lt;br /&gt;
Mit ihm wird auf einfache Art und Weise direkt per Sprachführung und Eingabedialogen Automagic für AMAD konfiguriert und das Device in FHEM automatisch erstellt. Es ist darauf zu achten, das Autocreate aktiv ist, da sonst kein Device mit Hilfe des Assistenten angelegt werden kann!&lt;br /&gt;
&lt;br /&gt;
= Vorstellung =&lt;br /&gt;
Dieses 2-stufige Modul liefert, &#039;&#039;&#039;in Verbindung mit der Android App Automagic&#039;&#039;&#039;, diverse Informationen von Android Geräten. &lt;br /&gt;
Die AndroidAPP Automagic (die nicht von mir stammt und 2.90 Euro kostet) funktioniert wie Tasker, ist aber bei weitem benutzungsfreundlicher.&lt;br /&gt;
&lt;br /&gt;
=== Features / Funktionen ===&lt;br /&gt;
Im Auslieferungszustand werden folgende Zustände dargestellt:&lt;br /&gt;
* installierte Android Version&lt;br /&gt;
* Zustand von Automagic auf dem Gerät&lt;br /&gt;
* Spracheingabe&lt;br /&gt;
* Bluetooth An/Aus&lt;br /&gt;
* Zustand einer definierten App (läuft aktiv im Vordergrund oder nicht?)&lt;br /&gt;
* verbundene Bluetoothgeräte, inklusive deren MAC Adresse&lt;br /&gt;
* aktuell abgespieltes Musikalbum des verwendeten Mediaplayers&lt;br /&gt;
* aktuell abgespielter Musikinterpret des verwendeten Mediaplayers&lt;br /&gt;
* aktuell abgespielter Musiktitel des verwendeten Mediaplayers&lt;br /&gt;
* Status des Androidgerätes - Online/Offline&lt;br /&gt;
* nächster Alarmtag&lt;br /&gt;
* nächste Alarmzeit&lt;br /&gt;
* Batteriestatus in %&lt;br /&gt;
* Ladestatus - Netztei angeschlossen / nicht angeschlossen&lt;br /&gt;
* Bildschirmstatus An/Aus&lt;br /&gt;
* Bildschirmhelligkeit&lt;br /&gt;
* Vollbildmodus An/Aus&lt;br /&gt;
* Bildschirmausrichtung Auto/Landscape/Portrait&lt;br /&gt;
* Standardlautstärke&lt;br /&gt;
* Media Lautstärke&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Mit etwas Einarbeitung können jegliche Informationen, die Automagic bereit stellt, in FHEM angezeigt werden. Hierzu bedarf es lediglich eines eigenen Flows, der seine Daten an die AMADCommBridge sendet. Das Modul gibt auch die Möglichkeit Androidgeräte zu steuern.&lt;br /&gt;
&lt;br /&gt;
= AMADCommBridge - Kommunikationsbrücke für alle AMAD Geräte =&lt;br /&gt;
Dieses Modul ist das Ausgangsmodul zur erfolgreichen Integration von Androidgeräten in FHEM. Es stellt ferner eine Verbindungsebene zwischen AMAD unterstützten Geräten und FHEM zur Verfügung. Alle Kommunikation zwischen AMAD Android und FHEM läuft über diese Schnittstelle.&lt;br /&gt;
Daher erfolgt die Ersteinrichtung eines AMAD Devices auch genau über diese Modulinstanz. &lt;br /&gt;
&lt;br /&gt;
Damit erfolgreich ein Androidgerät in FHEM eingerichtet werden kann, muss im ersten Schritt ein AMADCommBridge Device angelegt werden.&lt;br /&gt;
&lt;br /&gt;
=== Definition in FHEM ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; AMADCommBridge&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== Beispiel ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define AMADBridge AMADCommBridge&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Anweisung erstellt ein neues AMADCommBridge Device namens AMADBridge.&lt;br /&gt;
&lt;br /&gt;
Im folgenden muß lediglich das Flowset auf dem Android Gerät installiert werden und der Flow &#039;First Run Assistent&#039; ausgeführt werden. (einfach den Homebutton drücken)&lt;br /&gt;
Der Assistent geleitet dann durch die Einrichtung des AMAD Gerätes und sorgt dafür, dass am Ende des Installationsprozess das Androidgerät als AMAD Device in FHEM angelegt wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
* JSON_ERROR - JSON Fehlermeldung, die von Perl gemeldet wird&lt;br /&gt;
* JSON_ERROR_STRING - der String, der die JSON Fehlermeldung verursacht hat&lt;br /&gt;
* fhemServerIP - die Ip-Adresse des FHEM Servers; wird vom Modul auf Basis des JSON Strings vom Installationsassistenten gesetzt. Kann aber auch mittels set Befehles vom User gesetzt werden&lt;br /&gt;
* receiveFhemCommand - ist das Attribut fhemControlMode auf trigger gestellt, wird das Reading gesetzt sobald ein FHEM Befehl übersendet wird. Hierauf kann dann ein Notify triggern. Wird anstelle von trigger setControl als Wert für fhemControlMode eingestellt, wird das Reading nicht gesetzt sondern der set Befehl sofort ausgeführt.&lt;br /&gt;
* receiveVoiceCommand - wird die Sprachsteuerung von AMAD aktiviert (set DEVICE activateVoiceInput) so wird der letzte erkannten Sprachbefehle in dieses Reading geschrieben.&lt;br /&gt;
* receiveVoiceDevice - Name des Devices von wo aus der letzte erkannte Sprachbefehl gesendet wurde&lt;br /&gt;
* state - Status der Bridge, open, closed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
* allowFrom - Regexp der erlaubten IP-Adressen oder Hostnamen. Wenn dieses Attribut gesetzt wurde, werden ausschließlich Verbindungen von diesen Adressen akzeptiert. Achtung: falls allowfrom nicht gesetzt ist, und keine gütige allowed Instanz definiert ist, und die Gegenstelle eine nicht lokale Adresse hat, dann wird die Verbindung abgewiesen. Folgende Adressen werden als local betrachtet: IPV4: 127/8, 10/8, 192.168/16, 172.16/10, 169.254/16, IPV6: ::1, fe80/10&lt;br /&gt;
* debugJSON - wenn auf 1 gesetzt, werden JSON Fehlermeldungen in Readings geschrieben. Siehe hierzu JSON_ERROR* unter Readings&lt;br /&gt;
* fhemControlMode - steuert die zulässige Art der Steuerung von FHEM Devices. Es können über die Bridge auf 2 Arten FHEM-Devices angesteuert werden: per direktem FHEM-Befehl aus einem Flow heraus oder als Sprachbefehl mittels Sprachsteuerung (set DEVICE activateVoiceInput)&lt;br /&gt;
** trigger - ist der Wert trigger gesetzt, werden alle an die Bridge gesendeten FHEM set Befehle in das Reading receiveFhemCommand geschrieben und können so mittels notify ausgeführt werden. Sprachsteuerung ist möglich, es werden Readings receiveVoice* gesetzt. Auf dem Androidgerät können bei Sprachsteuerung mehrere Sprachbefehle mittels &amp;quot;und&amp;quot; verknüpft/aneinander gereiht werden. Bsp: schalte die Lichtszene Abends an und schalte den Fernseher an&lt;br /&gt;
** setControl - alle set Befehle, die mittels eines Flows über die Bridge gesendet werden, werden automatisch ausgeführt. Das Triggern eines Readings ist nicht nötig. Die Steuerung mittels Sprache verhält sich wie beim Wert trigger&lt;br /&gt;
** thirdPartControl - verhält sich wie trigger, bei der Sprachsteuerung ist jedoch ein Anreihen von Sprachbefehlen mittels &amp;quot;und&amp;quot; nicht möglich. Dient der Sprachsteuerung über Module anderer Modulautoren ((z.B. 39_TEERKO.pm)&lt;br /&gt;
&lt;br /&gt;
= AMADDevice - Automagic Android Device =&lt;br /&gt;
Dieses Modul liefert, in Verbindung mit der Android APP Automagic, diverse Informationen von Android Geräten. Die Android App Automagic (die nicht von mir stammt und 2.90 Euro kostet) funktioniert wie Tasker, ist aber bei weitem User freundlicher. &lt;br /&gt;
Mit etwas Einarbeitung können jegliche Informationen, die Automagic bereit stellt in FHEM angezeigt werden. Hierzu bedarf es lediglich eines eigenen Flows, der seine Daten an die AMADDeviceCommBridge sendet. Das Modul gibt auch die Möglichkeit Androidgeräte zu steuern. &lt;br /&gt;
Für all diese Aktionen und Informationen wird auf dem Androidgerät &amp;quot;Automagic&amp;quot; und ein so genannter Flow benötigt. Die App ist über den Google PlayStore zu beziehen. Das benötigte Flowset bekommt man aus dem FHEM Verzeichnis. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Wie genau verwendet man nun AMADDevice? ===&lt;br /&gt;
* sicherstellen, dass als allererstes die AMADCommBridge in FHEM definiert wurde&lt;br /&gt;
* installieren der App &amp;quot;Automagic Premium&amp;quot; aus dem PlayStore&lt;br /&gt;
* installieren des Flowset 74_AMADDeviceautomagicFlowset$VERSION.xml aus dem Ordner $INSTALLFHEM/FHEM/lib/ auf dem Androidgerät&lt;br /&gt;
* aktivieren des Installationsassistanten Flow in Automagic. Wenn man nun Automagic in den Hintergrund schickt, z.B. Hometaste drücken, startet der Assistant und legt automatisch ein Device für das Androidgerät an.&lt;br /&gt;
&lt;br /&gt;
=== Ein AMADDevice Gerät von Hand anlegen. ===&lt;br /&gt;
&lt;br /&gt;
Define&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; AMADDevice &amp;lt;IP-ADRESSE&amp;gt; &amp;lt;AMAD_ID&amp;gt; IODev=&amp;lt;IODEVICE&amp;gt; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Beispiel ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define WandTabletWohnzimmer AMADDevice 192.168.0.23 123456 IODev=NAME_des_AMADCommBridge_Devices&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Fall wird ein AMADDevice von Hand angelegt. Die AMAD_ID, hier 123456, muß auch exakt so als globale Variable in Automagic eingetragen sein.&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
* airplanemode - Status des Flugmodus&lt;br /&gt;
* androidVersion - aktuell installierte Androidversion&lt;br /&gt;
* automagicState - Statusmeldungen von der Automagic App &#039;&#039;&#039;(Voraussetzung Android &amp;gt;4.3). Ist Android größer 4.3 vorhanden und im Reading steht &amp;quot;wird nicht unterstützt&amp;quot;, muss in den Androideinstellungen unter Ton und Benachrichtigungen -&amp;gt; Benachrichtigungszugriff ein Haken für Automagic gesetzt werden&#039;&#039;&#039;&lt;br /&gt;
* batteryHealth - Zustand der Battery (1=unbekannt, 2=gut, 3=überhitzt, 4=tot, 5=Überspannung, 6=unbekannter Fehler, 7=kalt)&lt;br /&gt;
* batterytemperature - Temperatur der Batterie&lt;br /&gt;
* bluetooth - on/off, Bluetooth Status an oder aus&lt;br /&gt;
* checkActiveTask - Zustand einer zuvor definierten App. 0=nicht aktiv oder nicht aktiv im Vordergrund, 1=aktiv im Vordergrund, &#039;&#039;&#039;siehe Hinweis unten&#039;&#039;&#039;&lt;br /&gt;
* connectedBTdevices - eine Liste der verbundenen Gerät&lt;br /&gt;
* connectedBTdevicesMAC - eine Liste der MAC Adressen aller verbundender BT Geräte&lt;br /&gt;
* currentMusicAlbum - aktuell abgespieltes Musikalbum des verwendeten Mediaplayers&lt;br /&gt;
* currentMusicApp - aktuell verwendeter Mediaplayer (Amazon Music, Google Play Music, Google Play Video, Spotify, YouTube, TuneIn Player, Aldi Life Music)&lt;br /&gt;
* currentMusicArtist - aktuell abgespielter Musikinterpret des verwendeten Mediaplayers&lt;br /&gt;
* currentMusicIcon - Cover vom aktuell abgespielten Album &#039;&#039;&#039;Noch nicht fertig implementiert&#039;&#039;&#039;&lt;br /&gt;
* currentMusicState - Status des aktuellen/zuletzt verwendeten Mediaplayers&lt;br /&gt;
* currentMusicTrack - aktuell abgespielter Musiktitel des verwendeten Mediaplayers&lt;br /&gt;
* daydream - on/off, Daydream gestartet oder nicht&lt;br /&gt;
* deviceState - Status des Androidgerätes. unknown, online, offline.&lt;br /&gt;
* doNotDisturb - aktueller Status des Nicht-Stören-Modus&lt;br /&gt;
* dockingState - undocked/docked Status, ob sich das Gerät in einer Dockingstation befindet.&lt;br /&gt;
* flow_SetCommands - active/inactive, Status des SetCommands Flow&lt;br /&gt;
* flow_informations - active/inactive, Status des Informations Flow&lt;br /&gt;
* flowsetVersionAtDevice - aktuell installierte Flowsetversion auf dem Device&lt;br /&gt;
* incomingCallerName - Anrufername des eingehenden Anrufes&lt;br /&gt;
* incomingCallerNumber - Anrufernummer des eingehenden Anrufes&lt;br /&gt;
* incommingWhatsAppMessageFrom - letzte WhatsApp Nachricht&lt;br /&gt;
* incommingWhatsTelegramMessageFrom - letzte Telegram Nachricht&lt;br /&gt;
* intentRadioName - zuletzt gestreamter Intent Radio Name&lt;br /&gt;
* intentRadioState - Status des IntentRadio Players&lt;br /&gt;
* keyguardSet - 0/1 Displaysperre gesetzt 0=nein 1=ja, bedeutet nicht, dass sie gerade aktiv ist&lt;br /&gt;
* lastSetCommandError - letzte Fehlermeldung vom set Befehl&lt;br /&gt;
* lastSetCommandState - letzter Status vom set Befehl, Befehl erfolgreich/nicht erfolgreich gesendet&lt;br /&gt;
* lastStatusRequestError - letzte Fehlermeldung vom statusRequest Befehl&lt;br /&gt;
* lastStatusRequestState - letzter Status vom statusRequest Befehl, Befehl erfolgreich/nicht erfolgreich gesendet&lt;br /&gt;
* nextAlarmDay - aktiver Alarmtag&lt;br /&gt;
* nextAlarmState - aktueller Status des &amp;quot;Androidinternen&amp;quot; Weckers&lt;br /&gt;
* nextAlarmTime - aktive Alarmzeit&lt;br /&gt;
* powerLevel - Status der Batterie in %&lt;br /&gt;
* powerPlugged - Netzteil angeschlossen? 1=AC Adapter, 2=USB, 4=Kabellos 0=nicht eingesteckt&lt;br /&gt;
* screen - on locked/unlocked, off locked/unlocked gibt an ob der Bildschirm an oder aus ist und gleichzeitig gesperrt oder nicht gesperrt&lt;br /&gt;
* screenBrightness - Bildschirmhelligkeit von 0-255&lt;br /&gt;
* screenFullscreen - on/off, Vollbildmodus (An,Aus)&lt;br /&gt;
* screenOrientation - Landscape,Portrait, Bildschirmausrichtung (Horizontal,Vertikal)&lt;br /&gt;
* screenOrientationMode - auto/manual, Modus für die Ausrichtung (Automatisch, Manuell)&lt;br /&gt;
* state - aktueller Status&lt;br /&gt;
* userFlowState - aktueller Status eines Flows, festgelegt unter dem setUserFlowState Attribut&lt;br /&gt;
* volume - Media Lautstärkewert&lt;br /&gt;
* volumeNotification - Benachrichtigungs-Lautstärke&lt;br /&gt;
&lt;br /&gt;
Beim Reading checkActivTask muß zuvor der Packagename der zu prüfenden App als Attribut checkActiveTask angegeben werden. Beispiel: attr Nexus10Wohnzimmer checkActiveTask com.android.chrome für den Chrome Browser.&lt;br /&gt;
&lt;br /&gt;
=== Set ===&lt;br /&gt;
* activateVoiceInput - aktiviert die Spracheingabe&lt;br /&gt;
* bluetooth - on/off, aktiviert/deaktiviert Bluetooth&lt;br /&gt;
* clearNotificationBar - All,Automagic, löscht alle Meldungen oder nur die Automagic Meldungen in der Statusleiste&lt;br /&gt;
* closeCall - beendet einen laufenden Anruf&lt;br /&gt;
* currentFlowsetUpdate - führt ein Flowsetupdate auf dem Device durch&lt;br /&gt;
* doNotDisturb - schaltet den Nicht-Stören-Modus: always immer stören, never niemals stören, alarmClockOnly nur Wecker darf stören, onlyImportant nur wichtige Störungen&lt;br /&gt;
* installFlowSource - installiert einen Flow auf dem Device, &amp;lt;u&amp;gt;das XML File muss unter /tmp/ liegen und die Endung xml haben. &amp;lt;b&amp;gt;Bsp:&amp;lt;/b&amp;gt; set TabletWohnzimmer installFlowSource WlanUebwerwachen.xml&amp;lt;/u&amp;gt;&lt;br /&gt;
* mediaAmazonMusic - play, stop, next, back ,steuert den Amazon Musik Mediaplayer&lt;br /&gt;
* mediaGoogleMusic - play, stop, next, back ,steuert den Google Play Musik Mediaplayer&lt;br /&gt;
* mediaSpotifyMusic - play, stop, next, back ,steuert den Spotify Mediaplayer&lt;br /&gt;
* mediaTuneinRadio - play, stop, next, back ,steuert den TuneIn Radio Mediaplayer&lt;br /&gt;
* mediaAldiMusic - play, stop, next, back ,steuert den Aldi Musik Mediaplayer&lt;br /&gt;
* mediaAudible - play, stop, next, back ,steuert den Audible Mediaplayer&lt;br /&gt;
* mediaYouTube - play, stop, next, back ,steuert den YouTube Mediaplayer&lt;br /&gt;
* mediaVlcPlayer - play, stop, next, back ,steuert den VLC Mediaplayer&lt;br /&gt;
* nextAlarmTime - setzt die Alarmzeit. gilt aber nur innerhalb der nächsten 24 h&lt;br /&gt;
* openCall - ruft eine Nummer an und legt optional nach X Sekunden auf / set DEVICE openCall 01736458 10 / ruft die Nummer an und beendet den Anruf nach 10s&lt;br /&gt;
* screen - on/off/lock/unlock schaltet den Bildschirm ein/aus oder sperrt/entsperrt ihn&lt;br /&gt;
* screenBrightness - setzt die Bildschirmhelligkeit, von 0-255.&lt;br /&gt;
* screenMsg - versendet eine Bildschirmnachricht&lt;br /&gt;
* sendintent - sendet einen Intentstring Bsp: set $AMADDeviceDEVICE sendIntent org.smblott.intentradio.PLAY url http://stream.klassikradio.de/live/mp3-192/stream.klassikradio.de/play.m3u name Klassikradio, der erste Befehl ist die Aktion und der zweite das Extra. Es können immer zwei Extras mitgegeben werden.&lt;br /&gt;
* sendSMS - sendet eine SMS an eine bestimmte Telefonnummer. Bsp.: sendSMS Dies ist ein Test|555487263&lt;br /&gt;
* startDaydream - startet den Daydream&lt;br /&gt;
* statusRequest - Fordert einen neuen Statusreport beim Device an. Es können nicht von allen Readings per statusRequest die Daten geholt werden. Einige wenige geben nur bei Statusänderung ihren Status wieder.&lt;br /&gt;
* timer - setzt einen Timer innerhalb der als Standard definierten Clock-App auf dem Device. Es können nur Sekunden angegeben werden.&lt;br /&gt;
* ttsMsg - versendet eine Nachricht, die als Sprachnachricht ausgegeben wird&lt;br /&gt;
* userFlowState - aktiviert oder deaktiviert einen oder mehrere Flows,&#039;&#039;&#039;set Nexus7Wohnzimmer Badezimmer vorheizen:inactive oder set Nexus7Wohnzimmer Badezimmer vorheizen,Nachtlicht Steven:inactive&#039;&#039;&#039;&lt;br /&gt;
* vibrate - lässt das Androidgerät vibrieren&lt;br /&gt;
* volume - setzt die Medialautstärke. Entweder die internen Lautsprecher oder sofern angeschlossen die Bluetoothlautsprecher und per Klinkenstecker angeschlossene Lautsprecher, + oder - vor dem Wert reduziert die aktuelle Lautstärke um den Wert. Der maximale Sliderwert kann über das Attribut setVolMax geregelt werden.&lt;br /&gt;
* volumeUp - erhöht die Lautstärke um den angegeben Wert im entsprechenden Attribut. Ist kein Attribut angegeben wird per default 2 genommen.&lt;br /&gt;
* volumeDown - reduziert die Lautstärke um den angegeben Wert im entsprechenden Attribut. Ist kein Attribut angegeben wird per default 2 genommen.&lt;br /&gt;
* volumeNotification - setzt die Benachrichtigungslautstärke.&lt;br /&gt;
&lt;br /&gt;
==== Set abhängig von gesetzten Attributen ====&lt;br /&gt;
* changetoBtDevice - wechselt zu einem anderen Bluetooth Gerät. Attribut setBluetoothDevice muß gesetzt sein. Siehe Hinweis unten!&lt;br /&gt;
* notifySndFile - spielt die angegebene Mediadatei auf dem Androidgerät ab. Die aufzurufende Mediadatei sollte sich im Ordner /storage/emulated/0/Notifications/ befinden. Ist dies nicht der Fall kann man über das Attribut setNotifySndFilePath einen Pfad vorgeben.&lt;br /&gt;
* openApp - öffnet eine ausgewählte App. Attribut setOpenApp&lt;br /&gt;
* openURL - öffnet eine URL im Standardbrowser, sofern kein anderer Browser über das Attribut setOpenUrlBrowser ausgewählt wurde. Bsp: attr Tablet setOpenUrlBrowser de.ozerov.fully|de.ozerov.fully.MainActivity, das erste ist der Package Name und das zweite der Class Name&lt;br /&gt;
* setAPSSID - setzt die AccessPoint SSID um ein WLAN sleep zu verhindern&lt;br /&gt;
* setScreenOnForTimer ändert die Zeitdauer, die das Display an bleiben soll!&lt;br /&gt;
* screenFullscreen - on/off, (aktiviert/deaktiviert) den Vollbildmodus. Attribut setFullscreen&lt;br /&gt;
* screenLock - Sperrt den Bildschirm mit Pinabfrage. Attribut setScreenlockPIN - hier die Pin dafür eingeben. Erlaubt sind nur Zahlen. Es müßen mindestens 4, bis max 16 Zeichen verwendet werden.&lt;br /&gt;
* screenOrientation - Auto,Landscape,Portait, aktiviert die Bildschirmausrichtung (Automatisch,Horizontal,Vertikal). Attribut setScreenOrientation&lt;br /&gt;
* system - setzt Systembefehle ab (nur bei gerootetet Geräten). reboot,shutdown,airplanemodeON (kann nur aktiviert werden) Attribut root, in den Automagic Einstellungen muss &amp;quot;Root Funktion&amp;quot; gesetzt werden&lt;br /&gt;
* setNotifySndFilePath - setzt den korrekten Systempfad zur Notifydatei (default ist /storage/emulated/0/Notifications/&lt;br /&gt;
* setTtsMsgSpeed - setzt die Sprachgeschwindigkeit bei der Sprachausgabe(Werte zwischen 0.5 bis 4.0 in 0.5er Schritten) default ist 1.0&lt;br /&gt;
* setTtsMsgSpeed - setzt die Sprache bei der Sprachausgabe, de oder en (default ist de)&lt;br /&gt;
* setVolUpDownStep - setzt den Step für volumeUp und volumeDown&lt;br /&gt;
* setVolMax - setzt die maximale Volume Größe für den Slider&lt;br /&gt;
* setNotifyVolMax - setzt den maximalen Lautstärkewert für Benachrichtigungslautstärke für den Slider&lt;br /&gt;
* setRingSoundVolMax - setzt den maximalen Lautstärkewert für Klingellautstärke für den Slider&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Um openApp verwenden zu können, muss als Attribut der Package Name der App angegeben werden. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Um zwischen Bluetoothgeräten wechseln zu können, muss das Attribut setBluetoothDevice mit folgender Syntax gesetzt werden. attr &amp;lt;DEVICE&amp;gt; BTdeviceName1|MAC,BTDeviceName2|MAC Es muss zwingend darauf geachtet werden, dass beim BTdeviceName kein Leerzeichen vorhanden ist. Am besten zusammen oder mit Unterstrich. Bei der MAC ist darauf zu achten, dass wirklich nach jeder zweiten Zahl ein : steht&lt;br /&gt;
&lt;br /&gt;
** &#039;&#039;&#039;Beispiel: attr Nexus10Wohnzimmer setBluetoothDevice Logitech_BT_Adapter|AB:12:CD:34:EF:32,Anker_A3565|GH:56:IJ:78:KL:76&lt;br /&gt;
&lt;br /&gt;
=== state ===&lt;br /&gt;
* initialized - Ist der Status kurz nach einem define.&lt;br /&gt;
* active - die Geräteinstanz ist im aktiven Status.&lt;br /&gt;
* disabled - die Geräteinstanz wurde über das Attribut disable deaktiviert&lt;br /&gt;
&lt;br /&gt;
==Anwendungsbeispiele==&lt;br /&gt;
=== Lademanagement ===&lt;br /&gt;
Ich habe die Ladegeräte für meine Androidgeräte an Funkschaltsteckdosen. Ein DOIF schaltet bei unter 30% die Steckdose ein und bei über 90% wieder aus.&lt;br /&gt;
&lt;br /&gt;
Hier mal ein einfaches DOIF Beispiel für ein Lademanagment&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
... DOIF ([Nexus5Handy:powerLevel] &amp;lt; 30) (set LadenetzteilNexus5Handy:FILTER=STATE=off on) DOELSEIF ([Nexus5Handy:powerLevel] &amp;gt; 90) (set LadenetzteilNexus5Handy:FILTER=STATE=on off) DOELSE&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Wecker ===&lt;br /&gt;
Morgens lasse ich mich über mein Tablet im Schlafzimmer mit Musik wecken. Verwendet wird hierzu der wakeuptimer des RESIDENTS Modules. Das Abspielen stoppe ich dann von Hand. Danach erfolgt noch eine Ansage wie das Wetter gerade ist und wird.&lt;br /&gt;
&lt;br /&gt;
=== Mediacenter ===&lt;br /&gt;
Mein 10&amp;quot; Tablet im Wohnzimmer ist Mediaplayer für das Wohnzimmer mit Bluetoothlautsprechern. Die Lautstärke wird automatisch heruntergesetzt, wenn die Fritzbox einen Anruf auf das Wohnzimmer Handgerät signalisiert.&lt;br /&gt;
&lt;br /&gt;
=== Sprachbefehl - Abfragen von Zuständen diverser Sensoren ===&lt;br /&gt;
Wenn ich die Spracheingabe aktiviere und nach der Temperatur im Wohnzimmer frage, bekomme ich diese angesagt.&lt;br /&gt;
&lt;br /&gt;
Der Teil im Feld Daten ist ein klassisches ReadingsVal, halt nur ohne Komma und ohne Anführungszeichen&lt;br /&gt;
&lt;br /&gt;
WIRD GERADE ÜBERARBEITET&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Schaltbefehle vom Androidgerät an FHEM senden ===&lt;br /&gt;
Hierfür ist ein eigener Flow einzurichten. Wie das genau geht, verrät die Hilfe.&lt;br /&gt;
Um einen Schaltbefehl für FHEM zu erstellen, folgt nach dem Trigger eine Aktion als Script (Aktion Type: Script). Hier ist folgendes einzutragen:&lt;br /&gt;
&lt;br /&gt;
setcmd = &amp;quot;LichtWohnzimmerLampeRechts on&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;set&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In der ersten Zeile wird also der Schaltbefehl in der Variablem setcmd eingetragen und in der zweiten Zeile der FHEM Befehl in der Variablen fhemcmd.&lt;br /&gt;
&lt;br /&gt;
Danach müsst Ihr nur noch in einer weiteren Aktion den Flow &amp;quot;Send Data to AMADCommBridge&amp;quot; ausführen (Aktion Type: Flows ausführen). Die Aktion sollte bereits in Eurer Liste Vorhanden sein.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Screenshot_20160717-134948.png|200px]]&lt;br /&gt;
[[Datei:Screenshot 17.07.2016 1-50-27.png|200px]]&lt;br /&gt;
&lt;br /&gt;
Nun sollte Lampe1 angeschalten werden, wenn der Flow ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
=== Mit FHEM ein Flow ausführen ===&lt;br /&gt;
In Automagic einen Triggervom Type General Broadcast für den Flow wählen welchen man fern ausführen möchte. In der Trigger Definition steht unter Aktion &#039;&#039;automagic.NameDesFlows&#039;&#039; und auf Wunsch unter Access Intent Extra&#039;s &#039;&#039;param1 = getString(&amp;quot;label1&amp;quot;); param2 = getString(&amp;quot;label2&amp;quot;);&#039;&#039;. &#039;&#039;NameDesFlows&#039;&#039; ist natürlich die Name des Flows, der kein Leerzeichen enthält. Mit ein FHEM Command &#039;set &#039;&#039;AMADDevice&#039;&#039; sendIntent &#039;&#039;automagic.namederflow label1 param1 label2 param2&#039;&#039;&#039; wird dann der Flow aus geführt.&lt;br /&gt;
&lt;br /&gt;
=== Lister aller Variablen für die AMADCommandBridge ===&lt;br /&gt;
fhemcmd Variable &lt;br /&gt;
* Wert &amp;quot;set&amp;quot; - Variable für den Schaltbefehl &#039;setcmd&#039;&lt;br /&gt;
* Wert &amp;quot;setreading&amp;quot; - Variable für die Readingswerte &#039;fhemdata&#039;&lt;br /&gt;
* &amp;quot;readingsval&amp;quot; - Variable für die Abfragewerte &#039;readingsvalcmd&#039;&lt;br /&gt;
* &amp;quot;fhemfunc&amp;quot; - Variable für den Funktionsnamen &#039;fhemsub&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele für Skriptinhalte:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Schalten einer Lampe&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
setcmd = &amp;quot;LichtWohnzimmerLampeRechts on&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;set&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Status eines Device abfragen&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
readingsvalcmd = &amp;quot;DEVICE READING DEFAULT&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;readingsval&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Rückgabevariable, die dann weiter verarbeitet werden kann, heißt &#039;&#039;&#039;respreadingsval&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Aufruf einer 99_myUtils Subroutine&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
fhemsub = &amp;quot;mySub()&amp;quot;; oder natürlich auch &amp;quot;mySub(&#039;was_auch_immer&#039;)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;fhemfunc&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Rückgabevariable, die dann weiter verarbeitet werden kann, heißt &#039;&#039;&#039;respfhemfunc&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Bekannte Meldungen/Hinweise/Probleme ==&lt;br /&gt;
&lt;br /&gt;
Wenn auf dem Android-Gerät die Fehlermeldung &#039;Accessibility service not running&#039; von Automagic kommt oder im FHEM das reading state  &#039;Flow Informations mit Fehler beendet&#039; steht, dann muss der Accessibility Service auf dem Android-Device aktiviert werden: Einstellungen --&amp;gt; Bedienungshilfen --&amp;gt; Automagic Premium. Hier muss der Schalter auf &#039;an&#039; stehen. Sollte dies der Fall sein, hilft u.U. ein kurzes Aus- und wieder Einschalten.&lt;br /&gt;
&lt;br /&gt;
Gerät wird oft als offline angezeigt und es können keine set Befehle abgesetzt werden.&lt;br /&gt;
Mit der AMAD Version 2.2 hielt eine neue Behandlung des deviceState Readings Einzug. Das Reading stellt nun den tatsächlichen Status des Gerätes gegenüber FHEM da. Bei vielen Android 6 Geräten kommt es aber auf Grund vom DeepSleep Modus zum Wegfall der WLAN Verbindung. Hier hilft die neue KeepAlive Funktion in AMAD. Dafür muß lediglich unter &lt;br /&gt;
* Einstellungen --&amp;gt; Akku --&amp;gt; oben auf die drei Punkte - Akku Leistungsoptimierung --&amp;gt; alle Apps und dann Automagic auswählen und &amp;quot;Nicht optimieren&amp;quot;&lt;br /&gt;
ausgewählt werden und in FHEM für das Device das Attribut setAPSSID gesetzt werden. Alles andere macht das Modul selbst.&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=AMAD&amp;diff=24767</id>
		<title>AMAD</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=AMAD&amp;diff=24767"/>
		<updated>2018-01-27T11:03:06Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: /* Mit FHEM ein Flow ausführen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuern von Androidgeräten und Anzeige von bestimmten Informationen dieser Geräte&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Sonstige Systeme&lt;br /&gt;
|ModTechName=73_AMADCommBridge.pm, 74_AMADDevice.pm&lt;br /&gt;
|ModOwner=CoolTux &amp;lt;br /&amp;gt;([http://forum.fhem.de/index.php?action=profile;u=13684 Forum] / [[Benutzer:CoolTux|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= AMAD 4.0 [AMADNG] =&lt;br /&gt;
== 73_AMADCommBridge / 74_AMADDevice ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Vorwort =&lt;br /&gt;
=== Warum AMADNG ===&lt;br /&gt;
Nach fast 6 Monaten Entwicklungszeit wurde die neuste AMAD Version am 24.07.2017 offiziell frei gegeben. Diesmal lagen mir mehrere Dinge am Herzen.&lt;br /&gt;
In erster Linie wollte ich eine softwareseitige Trennung der AMADCommBridge vom eigentlichen Android Device. Daher ist die neue Version ein zweistufiges Modul geworden.&lt;br /&gt;
Im Laufe der Entwicklung kamen auch andere Anforderungen hinzu, die ich dann fähig war umzusetzen. Eine dieser Anforderungen war eine einfachere und besser funktionierende Installation. Herausgekommen ist ein Android Installationsassistant.&lt;br /&gt;
Mit ihm wird auf einfache Art und Weise direkt per Sprachführung und Eingabedialogen Automagic für AMAD konfiguriert und das Device in FHEM automatisch erstellt. Es ist darauf zu achten, das Autocreate aktiv ist, da sonst kein Device mit Hilfe des Assistenten angelegt werden kann!&lt;br /&gt;
&lt;br /&gt;
= Vorstellung =&lt;br /&gt;
Dieses 2-stufige Modul liefert, &#039;&#039;&#039;in Verbindung mit der Android App Automagic&#039;&#039;&#039;, diverse Informationen von Android Geräten. &lt;br /&gt;
Die AndroidAPP Automagic (die nicht von mir stammt und 2.90 Euro kostet) funktioniert wie Tasker, ist aber bei weitem benutzungsfreundlicher.&lt;br /&gt;
&lt;br /&gt;
=== Features / Funktionen ===&lt;br /&gt;
Im Auslieferungszustand werden folgende Zustände dargestellt:&lt;br /&gt;
* installierte Android Version&lt;br /&gt;
* Zustand von Automagic auf dem Gerät&lt;br /&gt;
* Spracheingabe&lt;br /&gt;
* Bluetooth An/Aus&lt;br /&gt;
* Zustand einer definierten App (läuft aktiv im Vordergrund oder nicht?)&lt;br /&gt;
* verbundene Bluetoothgeräte, inklusive deren MAC Adresse&lt;br /&gt;
* aktuell abgespieltes Musikalbum des verwendeten Mediaplayers&lt;br /&gt;
* aktuell abgespielter Musikinterpret des verwendeten Mediaplayers&lt;br /&gt;
* aktuell abgespielter Musiktitel des verwendeten Mediaplayers&lt;br /&gt;
* Status des Androidgerätes - Online/Offline&lt;br /&gt;
* nächster Alarmtag&lt;br /&gt;
* nächste Alarmzeit&lt;br /&gt;
* Batteriestatus in %&lt;br /&gt;
* Ladestatus - Netztei angeschlossen / nicht angeschlossen&lt;br /&gt;
* Bildschirmstatus An/Aus&lt;br /&gt;
* Bildschirmhelligkeit&lt;br /&gt;
* Vollbildmodus An/Aus&lt;br /&gt;
* Bildschirmausrichtung Auto/Landscape/Portrait&lt;br /&gt;
* Standardlautstärke&lt;br /&gt;
* Media Lautstärke&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Mit etwas Einarbeitung können jegliche Informationen, die Automagic bereit stellt, in FHEM angezeigt werden. Hierzu bedarf es lediglich eines eigenen Flows, der seine Daten an die AMADCommBridge sendet. Das Modul gibt auch die Möglichkeit Androidgeräte zu steuern.&lt;br /&gt;
&lt;br /&gt;
= AMADCommBridge - Kommunikationsbrücke für alle AMAD Geräte =&lt;br /&gt;
Dieses Modul ist das Ausgangsmodul zur erfolgreichen Integration von Androidgeräten in FHEM. Es stellt ferner eine Verbindungsebene zwischen AMAD unterstützten Geräten und FHEM zur Verfügung. Alle Kommunikation zwischen AMAD Android und FHEM läuft über diese Schnittstelle.&lt;br /&gt;
Daher erfolgt die Ersteinrichtung eines AMAD Devices auch genau über diese Modulinstanz. &lt;br /&gt;
&lt;br /&gt;
Damit erfolgreich ein Androidgerät in FHEM eingerichtet werden kann, muss im ersten Schritt ein AMADCommBridge Device angelegt werden.&lt;br /&gt;
&lt;br /&gt;
=== Definition in FHEM ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; AMADCommBridge&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== Beispiel ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define AMADBridge AMADCommBridge&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Anweisung erstellt ein neues AMADCommBridge Device namens AMADBridge.&lt;br /&gt;
&lt;br /&gt;
Im folgenden muß lediglich das Flowset auf dem Android Gerät installiert werden und der Flow &#039;First Run Assistent&#039; ausgeführt werden. (einfach den Homebutton drücken)&lt;br /&gt;
Der Assistent geleitet dann durch die Einrichtung des AMAD Gerätes und sorgt dafür, dass am Ende des Installationsprozess das Androidgerät als AMAD Device in FHEM angelegt wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
* JSON_ERROR - JSON Fehlermeldung, die von Perl gemeldet wird&lt;br /&gt;
* JSON_ERROR_STRING - der String, der die JSON Fehlermeldung verursacht hat&lt;br /&gt;
* fhemServerIP - die Ip-Adresse des FHEM Servers; wird vom Modul auf Basis des JSON Strings vom Installationsassistenten gesetzt. Kann aber auch mittels set Befehles vom User gesetzt werden&lt;br /&gt;
* receiveFhemCommand - ist das Attribut fhemControlMode auf trigger gestellt, wird das Reading gesetzt sobald ein FHEM Befehl übersendet wird. Hierauf kann dann ein Notify triggern. Wird anstelle von trigger setControl als Wert für fhemControlMode eingestellt, wird das Reading nicht gesetzt sondern der set Befehl sofort ausgeführt.&lt;br /&gt;
* receiveVoiceCommand - wird die Sprachsteuerung von AMAD aktiviert (set DEVICE activateVoiceInput) so wird der letzte erkannten Sprachbefehle in dieses Reading geschrieben.&lt;br /&gt;
* receiveVoiceDevice - Name des Devices von wo aus der letzte erkannte Sprachbefehl gesendet wurde&lt;br /&gt;
* state - Status der Bridge, open, closed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
* allowFrom - Regexp der erlaubten IP-Adressen oder Hostnamen. Wenn dieses Attribut gesetzt wurde, werden ausschließlich Verbindungen von diesen Adressen akzeptiert. Achtung: falls allowfrom nicht gesetzt ist, und keine gütige allowed Instanz definiert ist, und die Gegenstelle eine nicht lokale Adresse hat, dann wird die Verbindung abgewiesen. Folgende Adressen werden als local betrachtet: IPV4: 127/8, 10/8, 192.168/16, 172.16/10, 169.254/16, IPV6: ::1, fe80/10&lt;br /&gt;
* debugJSON - wenn auf 1 gesetzt, werden JSON Fehlermeldungen in Readings geschrieben. Siehe hierzu JSON_ERROR* unter Readings&lt;br /&gt;
* fhemControlMode - steuert die zulässige Art der Steuerung von FHEM Devices. Es können über die Bridge auf 2 Arten FHEM-Devices angesteuert werden: per direktem FHEM-Befehl aus einem Flow heraus oder als Sprachbefehl mittels Sprachsteuerung (set DEVICE activateVoiceInput)&lt;br /&gt;
** trigger - ist der Wert trigger gesetzt, werden alle an die Bridge gesendeten FHEM set Befehle in das Reading receiveFhemCommand geschrieben und können so mittels notify ausgeführt werden. Sprachsteuerung ist möglich, es werden Readings receiveVoice* gesetzt. Auf dem Androidgerät können bei Sprachsteuerung mehrere Sprachbefehle mittels &amp;quot;und&amp;quot; verknüpft/aneinander gereiht werden. Bsp: schalte die Lichtszene Abends an und schalte den Fernseher an&lt;br /&gt;
** setControl - alle set Befehle, die mittels eines Flows über die Bridge gesendet werden, werden automatisch ausgeführt. Das Triggern eines Readings ist nicht nötig. Die Steuerung mittels Sprache verhält sich wie beim Wert trigger&lt;br /&gt;
** thirdPartControl - verhält sich wie trigger, bei der Sprachsteuerung ist jedoch ein Anreihen von Sprachbefehlen mittels &amp;quot;und&amp;quot; nicht möglich. Dient der Sprachsteuerung über Module anderer Modulautoren ((z.B. 39_TEERKO.pm)&lt;br /&gt;
&lt;br /&gt;
= AMADDevice - Automagic Android Device =&lt;br /&gt;
Dieses Modul liefert, in Verbindung mit der Android APP Automagic, diverse Informationen von Android Geräten. Die Android App Automagic (die nicht von mir stammt und 2.90 Euro kostet) funktioniert wie Tasker, ist aber bei weitem User freundlicher. &lt;br /&gt;
Mit etwas Einarbeitung können jegliche Informationen, die Automagic bereit stellt in FHEM angezeigt werden. Hierzu bedarf es lediglich eines eigenen Flows, der seine Daten an die AMADDeviceCommBridge sendet. Das Modul gibt auch die Möglichkeit Androidgeräte zu steuern. &lt;br /&gt;
Für all diese Aktionen und Informationen wird auf dem Androidgerät &amp;quot;Automagic&amp;quot; und ein so genannter Flow benötigt. Die App ist über den Google PlayStore zu beziehen. Das benötigte Flowset bekommt man aus dem FHEM Verzeichnis. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Wie genau verwendet man nun AMADDevice? ===&lt;br /&gt;
* sicherstellen, dass als allererstes die AMADCommBridge in FHEM definiert wurde&lt;br /&gt;
* installieren der App &amp;quot;Automagic Premium&amp;quot; aus dem PlayStore&lt;br /&gt;
* installieren des Flowset 74_AMADDeviceautomagicFlowset$VERSION.xml aus dem Ordner $INSTALLFHEM/FHEM/lib/ auf dem Androidgerät&lt;br /&gt;
* aktivieren des Installationsassistanten Flow in Automagic. Wenn man nun Automagic in den Hintergrund schickt, z.B. Hometaste drücken, startet der Assistant und legt automatisch ein Device für das Androidgerät an.&lt;br /&gt;
&lt;br /&gt;
=== Ein AMADDevice Gerät von Hand anlegen. ===&lt;br /&gt;
&lt;br /&gt;
Define&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; AMADDevice &amp;lt;IP-ADRESSE&amp;gt; &amp;lt;AMAD_ID&amp;gt; IODev=&amp;lt;IODEVICE&amp;gt; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Beispiel ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define WandTabletWohnzimmer AMADDevice 192.168.0.23 123456 IODev=NAME_des_AMADCommBridge_Devices&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Fall wird ein AMADDevice von Hand angelegt. Die AMAD_ID, hier 123456, muß auch exakt so als globale Variable in Automagic eingetragen sein.&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
* airplanemode - Status des Flugmodus&lt;br /&gt;
* androidVersion - aktuell installierte Androidversion&lt;br /&gt;
* automagicState - Statusmeldungen von der Automagic App &#039;&#039;&#039;(Voraussetzung Android &amp;gt;4.3). Ist Android größer 4.3 vorhanden und im Reading steht &amp;quot;wird nicht unterstützt&amp;quot;, muss in den Androideinstellungen unter Ton und Benachrichtigungen -&amp;gt; Benachrichtigungszugriff ein Haken für Automagic gesetzt werden&#039;&#039;&#039;&lt;br /&gt;
* batteryHealth - Zustand der Battery (1=unbekannt, 2=gut, 3=überhitzt, 4=tot, 5=Überspannung, 6=unbekannter Fehler, 7=kalt)&lt;br /&gt;
* batterytemperature - Temperatur der Batterie&lt;br /&gt;
* bluetooth - on/off, Bluetooth Status an oder aus&lt;br /&gt;
* checkActiveTask - Zustand einer zuvor definierten App. 0=nicht aktiv oder nicht aktiv im Vordergrund, 1=aktiv im Vordergrund, &#039;&#039;&#039;siehe Hinweis unten&#039;&#039;&#039;&lt;br /&gt;
* connectedBTdevices - eine Liste der verbundenen Gerät&lt;br /&gt;
* connectedBTdevicesMAC - eine Liste der MAC Adressen aller verbundender BT Geräte&lt;br /&gt;
* currentMusicAlbum - aktuell abgespieltes Musikalbum des verwendeten Mediaplayers&lt;br /&gt;
* currentMusicApp - aktuell verwendeter Mediaplayer (Amazon Music, Google Play Music, Google Play Video, Spotify, YouTube, TuneIn Player, Aldi Life Music)&lt;br /&gt;
* currentMusicArtist - aktuell abgespielter Musikinterpret des verwendeten Mediaplayers&lt;br /&gt;
* currentMusicIcon - Cover vom aktuell abgespielten Album &#039;&#039;&#039;Noch nicht fertig implementiert&#039;&#039;&#039;&lt;br /&gt;
* currentMusicState - Status des aktuellen/zuletzt verwendeten Mediaplayers&lt;br /&gt;
* currentMusicTrack - aktuell abgespielter Musiktitel des verwendeten Mediaplayers&lt;br /&gt;
* daydream - on/off, Daydream gestartet oder nicht&lt;br /&gt;
* deviceState - Status des Androidgerätes. unknown, online, offline.&lt;br /&gt;
* doNotDisturb - aktueller Status des Nicht-Stören-Modus&lt;br /&gt;
* dockingState - undocked/docked Status, ob sich das Gerät in einer Dockingstation befindet.&lt;br /&gt;
* flow_SetCommands - active/inactive, Status des SetCommands Flow&lt;br /&gt;
* flow_informations - active/inactive, Status des Informations Flow&lt;br /&gt;
* flowsetVersionAtDevice - aktuell installierte Flowsetversion auf dem Device&lt;br /&gt;
* incomingCallerName - Anrufername des eingehenden Anrufes&lt;br /&gt;
* incomingCallerNumber - Anrufernummer des eingehenden Anrufes&lt;br /&gt;
* incommingWhatsAppMessageFrom - letzte WhatsApp Nachricht&lt;br /&gt;
* incommingWhatsTelegramMessageFrom - letzte Telegram Nachricht&lt;br /&gt;
* intentRadioName - zuletzt gestreamter Intent Radio Name&lt;br /&gt;
* intentRadioState - Status des IntentRadio Players&lt;br /&gt;
* keyguardSet - 0/1 Displaysperre gesetzt 0=nein 1=ja, bedeutet nicht, dass sie gerade aktiv ist&lt;br /&gt;
* lastSetCommandError - letzte Fehlermeldung vom set Befehl&lt;br /&gt;
* lastSetCommandState - letzter Status vom set Befehl, Befehl erfolgreich/nicht erfolgreich gesendet&lt;br /&gt;
* lastStatusRequestError - letzte Fehlermeldung vom statusRequest Befehl&lt;br /&gt;
* lastStatusRequestState - letzter Status vom statusRequest Befehl, Befehl erfolgreich/nicht erfolgreich gesendet&lt;br /&gt;
* nextAlarmDay - aktiver Alarmtag&lt;br /&gt;
* nextAlarmState - aktueller Status des &amp;quot;Androidinternen&amp;quot; Weckers&lt;br /&gt;
* nextAlarmTime - aktive Alarmzeit&lt;br /&gt;
* powerLevel - Status der Batterie in %&lt;br /&gt;
* powerPlugged - Netzteil angeschlossen? 0=NEIN, 1|2=JA&lt;br /&gt;
* screen - on locked/unlocked, off locked/unlocked gibt an ob der Bildschirm an oder aus ist und gleichzeitig gesperrt oder nicht gesperrt&lt;br /&gt;
* screenBrightness - Bildschirmhelligkeit von 0-255&lt;br /&gt;
* screenFullscreen - on/off, Vollbildmodus (An,Aus)&lt;br /&gt;
* screenOrientation - Landscape,Portrait, Bildschirmausrichtung (Horizontal,Vertikal)&lt;br /&gt;
* screenOrientationMode - auto/manual, Modus für die Ausrichtung (Automatisch, Manuell)&lt;br /&gt;
* state - aktueller Status&lt;br /&gt;
* userFlowState - aktueller Status eines Flows, festgelegt unter dem setUserFlowState Attribut&lt;br /&gt;
* volume - Media Lautstärkewert&lt;br /&gt;
* volumeNotification - Benachrichtigungs-Lautstärke&lt;br /&gt;
&lt;br /&gt;
Beim Reading checkActivTask muß zuvor der Packagename der zu prüfenden App als Attribut checkActiveTask angegeben werden. Beispiel: attr Nexus10Wohnzimmer checkActiveTask com.android.chrome für den Chrome Browser.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Set ===&lt;br /&gt;
* activateVoiceInput - aktiviert die Spracheingabe&lt;br /&gt;
* bluetooth - on/off, aktiviert/deaktiviert Bluetooth&lt;br /&gt;
* clearNotificationBar - All,Automagic, löscht alle Meldungen oder nur die Automagic Meldungen in der Statusleiste&lt;br /&gt;
* closeCall - beendet einen laufenden Anruf&lt;br /&gt;
* currentFlowsetUpdate - führt ein Flowsetupdate auf dem Device durch&lt;br /&gt;
* doNotDisturb - schaltet den Nicht-Stören-Modus: always immer stören, never niemals stören, alarmClockOnly nur Wecker darf stören, onlyImportant nur wichtige Störungen&lt;br /&gt;
* installFlowSource - installiert einen Flow auf dem Device, &amp;lt;u&amp;gt;das XML File muss unter /tmp/ liegen und die Endung xml haben. &amp;lt;b&amp;gt;Bsp:&amp;lt;/b&amp;gt; set TabletWohnzimmer installFlowSource WlanUebwerwachen.xml&amp;lt;/u&amp;gt;&lt;br /&gt;
* mediaAmazonMusic - play, stop, next, back ,steuert den Amazon Musik Mediaplayer&lt;br /&gt;
* mediaGoogleMusic - play, stop, next, back ,steuert den Google Play Musik Mediaplayer&lt;br /&gt;
* mediaSpotifyMusic - play, stop, next, back ,steuert den Spotify Mediaplayer&lt;br /&gt;
* mediaTuneinRadio - play, stop, next, back ,steuert den TuneIn Radio Mediaplayer&lt;br /&gt;
* mediaAldiMusic - play, stop, next, back ,steuert den Aldi Musik Mediaplayer&lt;br /&gt;
* mediaAudible - play, stop, next, back ,steuert den Audible Mediaplayer&lt;br /&gt;
* mediaYouTube - play, stop, next, back ,steuert den YouTube Mediaplayer&lt;br /&gt;
* mediaVlcPlayer - play, stop, next, back ,steuert den VLC Mediaplayer&lt;br /&gt;
* nextAlarmTime - setzt die Alarmzeit. gilt aber nur innerhalb der nächsten 24 h&lt;br /&gt;
* openCall - ruft eine Nummer an und legt optional nach X Sekunden auf / set DEVICE openCall 01736458 10 / ruft die Nummer an und beendet den Anruf nach 10s&lt;br /&gt;
* screen - on/off/lock/unlock schaltet den Bildschirm ein/aus oder sperrt/entsperrt ihn&lt;br /&gt;
* screenBrightness - setzt die Bildschirmhelligkeit, von 0-255.&lt;br /&gt;
* screenMsg - versendet eine Bildschirmnachricht&lt;br /&gt;
* sendintent - sendet einen Intentstring Bsp: set $AMADDeviceDEVICE sendIntent org.smblott.intentradio.PLAY url http://stream.klassikradio.de/live/mp3-192/stream.klassikradio.de/play.m3u name Klassikradio, der erste Befehl ist die Aktion und der zweite das Extra. Es können immer zwei Extras mitgegeben werden.&lt;br /&gt;
* sendSMS - sendet eine SMS an eine bestimmte Telefonnummer. Bsp.: sendSMS Dies ist ein Test|555487263&lt;br /&gt;
* startDaydream - startet den Daydream&lt;br /&gt;
* statusRequest - Fordert einen neuen Statusreport beim Device an. Es können nicht von allen Readings per statusRequest die Daten geholt werden. Einige wenige geben nur bei Statusänderung ihren Status wieder.&lt;br /&gt;
* timer - setzt einen Timer innerhalb der als Standard definierten Clock-App auf dem Device. Es können nur Sekunden angegeben werden.&lt;br /&gt;
* ttsMsg - versendet eine Nachricht, die als Sprachnachricht ausgegeben wird&lt;br /&gt;
* userFlowState - aktiviert oder deaktiviert einen oder mehrere Flows,&#039;&#039;&#039;set Nexus7Wohnzimmer Badezimmer vorheizen:inactive oder set Nexus7Wohnzimmer Badezimmer vorheizen,Nachtlicht Steven:inactive&#039;&#039;&#039;&lt;br /&gt;
* vibrate - lässt das Androidgerät vibrieren&lt;br /&gt;
* volume - setzt die Medialautstärke. Entweder die internen Lautsprecher oder sofern angeschlossen die Bluetoothlautsprecher und per Klinkenstecker angeschlossene Lautsprecher, + oder - vor dem Wert reduziert die aktuelle Lautstärke um den Wert. Der maximale Sliderwert kann über das Attribut setVolMax geregelt werden.&lt;br /&gt;
* volumeUp - erhöht die Lautstärke um den angegeben Wert im entsprechenden Attribut. Ist kein Attribut angegeben wird per default 2 genommen.&lt;br /&gt;
* volumeDown - reduziert die Lautstärke um den angegeben Wert im entsprechenden Attribut. Ist kein Attribut angegeben wird per default 2 genommen.&lt;br /&gt;
* volumeNotification - setzt die Benachrichtigungslautstärke.&lt;br /&gt;
&lt;br /&gt;
==== Set abhängig von gesetzten Attributen ====&lt;br /&gt;
* changetoBtDevice - wechselt zu einem anderen Bluetooth Gerät. Attribut setBluetoothDevice muß gesetzt sein. Siehe Hinweis unten!&lt;br /&gt;
* notifySndFile - spielt die angegebene Mediadatei auf dem Androidgerät ab. Die aufzurufende Mediadatei sollte sich im Ordner /storage/emulated/0/Notifications/ befinden. Ist dies nicht der Fall kann man über das Attribut setNotifySndFilePath einen Pfad vorgeben.&lt;br /&gt;
* openApp - öffnet eine ausgewählte App. Attribut setOpenApp&lt;br /&gt;
* openURL - öffnet eine URL im Standardbrowser, sofern kein anderer Browser über das Attribut setOpenUrlBrowser ausgewählt wurde. Bsp: attr Tablet setOpenUrlBrowser de.ozerov.fully|de.ozerov.fully.MainActivity, das erste ist der Package Name und das zweite der Class Name&lt;br /&gt;
* setAPSSID - setzt die AccessPoint SSID um ein WLAN sleep zu verhindern&lt;br /&gt;
* setScreenOnForTimer ändert die Zeitdauer, die das Display an bleiben soll!&lt;br /&gt;
* screenFullscreen - on/off, (aktiviert/deaktiviert) den Vollbildmodus. Attribut setFullscreen&lt;br /&gt;
* screenLock - Sperrt den Bildschirm mit Pinabfrage. Attribut setScreenlockPIN - hier die Pin dafür eingeben. Erlaubt sind nur Zahlen. Es müßen mindestens 4, bis max 16 Zeichen verwendet werden.&lt;br /&gt;
* screenOrientation - Auto,Landscape,Portait, aktiviert die Bildschirmausrichtung (Automatisch,Horizontal,Vertikal). Attribut setScreenOrientation&lt;br /&gt;
* system - setzt Systembefehle ab (nur bei gerootetet Geräten). reboot,shutdown,airplanemodeON (kann nur aktiviert werden) Attribut root, in den Automagic Einstellungen muss &amp;quot;Root Funktion&amp;quot; gesetzt werden&lt;br /&gt;
* setNotifySndFilePath - setzt den korrekten Systempfad zur Notifydatei (default ist /storage/emulated/0/Notifications/&lt;br /&gt;
* setTtsMsgSpeed - setzt die Sprachgeschwindigkeit bei der Sprachausgabe(Werte zwischen 0.5 bis 4.0 in 0.5er Schritten) default ist 1.0&lt;br /&gt;
* setTtsMsgSpeed - setzt die Sprache bei der Sprachausgabe, de oder en (default ist de)&lt;br /&gt;
* setVolUpDownStep - setzt den Step für volumeUp und volumeDown&lt;br /&gt;
* setVolMax - setzt die maximale Volume Größe für den Slider&lt;br /&gt;
* setNotifyVolMax - setzt den maximalen Lautstärkewert für Benachrichtigungslautstärke für den Slider&lt;br /&gt;
* setRingSoundVolMax - setzt den maximalen Lautstärkewert für Klingellautstärke für den Slider&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Um openApp verwenden zu können, muss als Attribut der Package Name der App angegeben werden. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Um zwischen Bluetoothgeräten wechseln zu können, muss das Attribut setBluetoothDevice mit folgender Syntax gesetzt werden. attr &amp;lt;DEVICE&amp;gt; BTdeviceName1|MAC,BTDeviceName2|MAC Es muss zwingend darauf geachtet werden, dass beim BTdeviceName kein Leerzeichen vorhanden ist. Am besten zusammen oder mit Unterstrich. Bei der MAC ist darauf zu achten, dass wirklich nach jeder zweiten Zahl ein : steht&lt;br /&gt;
&lt;br /&gt;
** &#039;&#039;&#039;Beispiel: attr Nexus10Wohnzimmer setBluetoothDevice Logitech_BT_Adapter|AB:12:CD:34:EF:32,Anker_A3565|GH:56:IJ:78:KL:76&lt;br /&gt;
&lt;br /&gt;
=== state ===&lt;br /&gt;
* initialized - Ist der Status kurz nach einem define.&lt;br /&gt;
* active - die Geräteinstanz ist im aktiven Status.&lt;br /&gt;
* disabled - die Geräteinstanz wurde über das Attribut disable deaktiviert&lt;br /&gt;
&lt;br /&gt;
==Anwendungsbeispiele==&lt;br /&gt;
=== Lademanagement ===&lt;br /&gt;
Ich habe die Ladegeräte für meine Androidgeräte an Funkschaltsteckdosen. Ein DOIF schaltet bei unter 30% die Steckdose ein und bei über 90% wieder aus.&lt;br /&gt;
&lt;br /&gt;
Hier mal ein einfaches DOIF Beispiel für ein Lademanagment&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
... DOIF ([Nexus5Handy:powerLevel] &amp;lt; 30) (set LadenetzteilNexus5Handy:FILTER=STATE=off on) DOELSEIF ([Nexus5Handy:powerLevel] &amp;gt; 90) (set LadenetzteilNexus5Handy:FILTER=STATE=on off) DOELSE&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Wecker ===&lt;br /&gt;
Morgens lasse ich mich über mein Tablet im Schlafzimmer mit Musik wecken. Verwendet wird hierzu der wakeuptimer des RESIDENTS Modules. Das Abspielen stoppe ich dann von Hand. Danach erfolgt noch eine Ansage wie das Wetter gerade ist und wird.&lt;br /&gt;
&lt;br /&gt;
=== Mediacenter ===&lt;br /&gt;
Mein 10&amp;quot; Tablet im Wohnzimmer ist Mediaplayer für das Wohnzimmer mit Bluetoothlautsprechern. Die Lautstärke wird automatisch heruntergesetzt, wenn die Fritzbox einen Anruf auf das Wohnzimmer Handgerät signalisiert.&lt;br /&gt;
&lt;br /&gt;
=== Sprachbefehl - Abfragen von Zuständen diverser Sensoren ===&lt;br /&gt;
Wenn ich die Spracheingabe aktiviere und nach der Temperatur im Wohnzimmer frage, bekomme ich diese angesagt.&lt;br /&gt;
&lt;br /&gt;
Der Teil im Feld Daten ist ein klassisches ReadingsVal, halt nur ohne Komma und ohne Anführungszeichen&lt;br /&gt;
&lt;br /&gt;
WIRD GERADE ÜBERARBEITET&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Schaltbefehle vom Androidgerät an FHEM senden ===&lt;br /&gt;
Hierfür ist ein eigener Flow einzurichten. Wie das genau geht, verrät die Hilfe.&lt;br /&gt;
Um einen Schaltbefehl für FHEM zu erstellen, folgt nach dem Trigger eine Aktion als Script (Aktion Type: Script). Hier ist folgendes einzutragen:&lt;br /&gt;
&lt;br /&gt;
setcmd = &amp;quot;LichtWohnzimmerLampeRechts on&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;set&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In der ersten Zeile wird also der Schaltbefehl in der Variablem setcmd eingetragen und in der zweiten Zeile der FHEM Befehl in der Variablen fhemcmd.&lt;br /&gt;
&lt;br /&gt;
Danach müsst Ihr nur noch in einer weiteren Aktion den Flow &amp;quot;Send Data to AMADCommBridge&amp;quot; ausführen (Aktion Type: Flows ausführen). Die Aktion sollte bereits in Eurer Liste Vorhanden sein.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Screenshot_20160717-134948.png|200px]]&lt;br /&gt;
[[Datei:Screenshot 17.07.2016 1-50-27.png|200px]]&lt;br /&gt;
&lt;br /&gt;
Nun sollte Lampe1 angeschalten werden, wenn der Flow ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
=== Mit FHEM ein Flow ausführen ===&lt;br /&gt;
In Automagic einen Triggervom Type General Broadcast für den Flow wählen welchen man fern ausführen möchte. In der Trigger Definition steht unter Aktion &#039;&#039;automagic.NameDesFlows&#039;&#039; und auf Wunsch unter Access Intent Extra&#039;s &#039;&#039;param1 = getString(&amp;quot;label1&amp;quot;); param2 = getString(&amp;quot;label2&amp;quot;);&#039;&#039;. &#039;&#039;NameDesFlows&#039;&#039; ist natürlich die Name des Flows, der kein Leerzeichen enthält. Mit ein FHEM Command &#039;set &#039;&#039;AMADDevice&#039;&#039; sendIntent &#039;&#039;automagic.namederflow label1 param1 label2 param2&#039;&#039;&#039; wird dann der Flow aus geführt.&lt;br /&gt;
&lt;br /&gt;
=== Lister aller Variablen für die AMADCommandBridge ===&lt;br /&gt;
fhemcmd Variable &lt;br /&gt;
* Wert &amp;quot;set&amp;quot; - Variable für den Schaltbefehl &#039;setcmd&#039;&lt;br /&gt;
* Wert &amp;quot;setreading&amp;quot; - Variable für die Readingswerte &#039;fhemdata&#039;&lt;br /&gt;
* &amp;quot;readingsval&amp;quot; - Variable für die Abfragewerte &#039;readingsvalcmd&#039;&lt;br /&gt;
* &amp;quot;fhemfunc&amp;quot; - Variable für den Funktionsnamen &#039;fhemsub&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele für Skriptinhalte:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Schalten einer Lampe&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
setcmd = &amp;quot;LichtWohnzimmerLampeRechts on&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;set&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Status eines Device abfragen&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
readingsvalcmd = &amp;quot;DEVICE READING DEFAULT&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;readingsval&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Rückgabevariable, die dann weiter verarbeitet werden kann, heißt &#039;&#039;&#039;respreadingsval&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Aufruf einer 99_myUtils Subroutine&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
fhemsub = &amp;quot;mySub()&amp;quot;; oder natürlich auch &amp;quot;mySub(&#039;was_auch_immer&#039;)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;fhemfunc&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Rückgabevariable, die dann weiter verarbeitet werden kann, heißt &#039;&#039;&#039;respfhemfunc&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Bekannte Meldungen/Hinweise/Probleme ==&lt;br /&gt;
&lt;br /&gt;
Wenn auf dem Android-Gerät die Fehlermeldung &#039;Accessibility service not running&#039; von Automagic kommt oder im FHEM das reading state  &#039;Flow Informations mit Fehler beendet&#039; steht, dann muss der Accessibility Service auf dem Android-Device aktiviert werden: Einstellungen --&amp;gt; Bedienungshilfen --&amp;gt; Automagic Premium. Hier muss der Schalter auf &#039;an&#039; stehen. Sollte dies der Fall sein, hilft u.U. ein kurzes Aus- und wieder Einschalten.&lt;br /&gt;
&lt;br /&gt;
Gerät wird oft als offline angezeigt und es können keine set Befehle abgesetzt werden.&lt;br /&gt;
Mit der AMAD Version 2.2 hielt eine neue Behandlung des deviceState Readings Einzug. Das Reading stellt nun den tatsächlichen Status des Gerätes gegenüber FHEM da. Bei vielen Android 6 Geräten kommt es aber auf Grund vom DeepSleep Modus zum Wegfall der WLAN Verbindung. Hier hilft die neue KeepAlive Funktion in AMAD. Dafür muß lediglich unter &lt;br /&gt;
* Einstellungen --&amp;gt; Akku --&amp;gt; oben auf die drei Punkte - Akku Leistungsoptimierung --&amp;gt; alle Apps und dann Automagic auswählen und &amp;quot;Nicht optimieren&amp;quot;&lt;br /&gt;
ausgewählt werden und in FHEM für das Device das Attribut setAPSSID gesetzt werden. Alles andere macht das Modul selbst.&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=XiaomiBTLESens&amp;diff=24559</id>
		<title>XiaomiBTLESens</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=XiaomiBTLESens&amp;diff=24559"/>
		<updated>2018-01-16T14:33:15Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Auslesen unterstützter Xiaomi BTLE Sensoren&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Sonstige Systeme&lt;br /&gt;
|ModTechName=74_XiaomiBTLESens.pm&lt;br /&gt;
|ModOwner=CoolTux &amp;lt;br/&amp;gt;({{Link2FU|13684|Forum}} / [[Benutzer:CoolTux|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Beschreibung==&lt;br /&gt;
Mit diesem Modul ist es möglich diverse BTLE Sensoren der Firma Xiaomi aus zu lesen auszulesen und die entsprechenden Daten als Readings darzustellen. Zum Beispiel den XiaomiFlowerMonitor.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung zur Verwendung des Modules ist:&lt;br /&gt;
* libjson-perl&lt;br /&gt;
* bluez (gatttool und hcitool)&lt;br /&gt;
&lt;br /&gt;
Mittels &amp;lt;code&amp;gt;hcitool lescan&amp;lt;/code&amp;gt; bekommt man die BT-MAC, die benötigte Bluetooth MAC Adresse.&lt;br /&gt;
&lt;br /&gt;
Achtung: auf einem Debian Wheezy scheint es Probleme mit dem Bluetooth Stack zu geben. Selbst wenn man ein aktuelles BT 5.x selbst kompiliert und installiert gibt spätestens das gatttool keine Daten mehr aus. Es muss zwingend auf Debian Jessie geupgraded werden.&lt;br /&gt;
&lt;br /&gt;
===Definition===&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; XiaomiBTLESens &amp;lt;BT-MAC&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define Weihnachtskaktus XiaomiBTLESens C4:7C:8D:62:42:6F&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Anweisung erstellt ein XiaomiBTLESens Device mit dem Namen Weihnachtskaktus und der BT MAC C4:7C:8D:62:42:6F.&lt;br /&gt;
Als nächstes sollte auf jeden Fall das Attribut model gesetzt werden, um das korrekte Gerät an zu sprechen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Readings===&lt;br /&gt;
* state - aktueller Status des Device.&lt;br /&gt;
* battery - Status der Batterie in Abhängigkeit des batteryLevel Readings.&lt;br /&gt;
* batteryLevel - Füllstand der Batterie in Prozent.&lt;br /&gt;
* fertility - Nährstoffgehalt des Pflanzenbodens (Dünger) - Bodenleitfähigkeit&lt;br /&gt;
* firmware - aktuelle Firmware auf dem Device&lt;br /&gt;
* lux - aktuelle Lichtintensität&lt;br /&gt;
* moisture - Wassergehalt (Feuchtigkeit) des Pflanzenbodens&lt;br /&gt;
* temperature - Umgebungstemperatur&lt;br /&gt;
&lt;br /&gt;
===Set===&lt;br /&gt;
* devicename - setzt einen Devicenamen&lt;br /&gt;
&lt;br /&gt;
===Get===&lt;br /&gt;
* sensorData - aktive Abfrage der Sensors Werte&lt;br /&gt;
* devicename - liest den Devicenamen aus&lt;br /&gt;
* firmware - liest die Firmeware aus&lt;br /&gt;
&lt;br /&gt;
===Attribute===&lt;br /&gt;
* interval - Intervallzeit in Sekunden, nach der der nächste automatische Datenabruf erfolgen soll&lt;br /&gt;
* model - Auswahl eines unterstützten Gerätes&lt;br /&gt;
* disable - deaktiviert die den Abruf&lt;br /&gt;
* disabledForIntervals - deaktiviert das Gerät für den angegebenen Zeitinterval (13:00-18:30 or 13:00-18:30 22:00-23:00)&lt;br /&gt;
* minFertility - min Fruchtbarkeits-Grenzwert für ein Ereignis minFertility low &lt;br /&gt;
* maxFertility - max Fruchtbarkeits-Grenzwert für ein Ereignis maxFertility high &lt;br /&gt;
* minMoisture - min Feuchtigkeits-Grenzwert für ein Ereignis minMoisture low &lt;br /&gt;
* maxMoisture - max Feuchtigkeits-Grenzwert für ein Ereignis maxMoisture high &lt;br /&gt;
* minTemp - min Temperatur-Grenzwert für ein Ereignis minTemp low &lt;br /&gt;
* maxTemp - max Temperatur-Grenzwert für ein Ereignis maxTemp high &lt;br /&gt;
* minlux - min Helligkeits-Grenzwert für ein Ereignis minlux low &lt;br /&gt;
* maxlux - max Helligkeits-Grenzwert für ein Ereignis maxlux high &lt;br /&gt;
*:Beispiele für min/max-Ereignisse:&lt;br /&gt;
*::2017-03-16 11:08:05 XiaomiFlowerSens Dracaena minMoisture low&lt;br /&gt;
*::2017-03-16 11:08:06 XiaomiFlowerSens Dracaena maxTemp high&lt;br /&gt;
* sshHost - FQDN oder IP-Adresse eines entfernten SSH-Systems. Das SSH-System ist auf eine Zertifikat basierte Authentifizierung zu konfigurieren. Am elegantesten geschieht das mit einer .ssh/config Datei auf dem SSH-Client.&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Diskussion:XiaomiBTLESens&amp;diff=24558</id>
		<title>Diskussion:XiaomiBTLESens</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Diskussion:XiaomiBTLESens&amp;diff=24558"/>
		<updated>2018-01-16T14:32:10Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: Die Seite wurde neu angelegt: „Kann bitte ein Moderator den Seitentitel ändern in XiaomiBTLESens.   Danke“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Kann bitte ein Moderator den Seitentitel ändern in XiaomiBTLESens.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Danke&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=XiaomiBTLESens&amp;diff=24557</id>
		<title>XiaomiBTLESens</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=XiaomiBTLESens&amp;diff=24557"/>
		<updated>2018-01-16T14:31:11Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Auslesen eines Xiaomi Flower Sensors&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Sonstige Systeme&lt;br /&gt;
|ModTechName=74_XiaomiBTLESens.pm&lt;br /&gt;
|ModOwner=CoolTux &amp;lt;br/&amp;gt;({{Link2FU|13684|Forum}} / [[Benutzer:CoolTux|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Beschreibung==&lt;br /&gt;
Mit diesem Modul ist es möglich diverse BTLE Sensoren der Firma Xiaomi aus zu lesen auszulesen und die entsprechenden Daten als Readings darzustellen. Zum Beispiel den XiaomiFlowerMonitor.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung zur Verwendung des Modules ist:&lt;br /&gt;
* libjson-perl&lt;br /&gt;
* bluez (gatttool und hcitool)&lt;br /&gt;
&lt;br /&gt;
Mittels &amp;lt;code&amp;gt;hcitool lescan&amp;lt;/code&amp;gt; bekommt man die BT-MAC, die benötigte Bluetooth MAC Adresse.&lt;br /&gt;
&lt;br /&gt;
Achtung: auf einem Debian Wheezy scheint es Probleme mit dem Bluetooth Stack zu geben. Selbst wenn man ein aktuelles BT 5.x selbst kompiliert und installiert gibt spätestens das gatttool keine Daten mehr aus. Es muss zwingend auf Debian Jessie geupgraded werden.&lt;br /&gt;
&lt;br /&gt;
===Definition===&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; XiaomiBTLESens &amp;lt;BT-MAC&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define Weihnachtskaktus XiaomiBTLESens C4:7C:8D:62:42:6F&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Anweisung erstellt ein XiaomiBTLESens Device mit dem Namen Weihnachtskaktus und der BT MAC C4:7C:8D:62:42:6F.&lt;br /&gt;
Als nächstes sollte auf jeden Fall das Attribut model gesetzt werden, um das korrekte Gerät an zu sprechen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Readings===&lt;br /&gt;
* state - aktueller Status des Device.&lt;br /&gt;
* battery - Status der Batterie in Abhängigkeit des batteryLevel Readings.&lt;br /&gt;
* batteryLevel - Füllstand der Batterie in Prozent.&lt;br /&gt;
* fertility - Nährstoffgehalt des Pflanzenbodens (Dünger) - Bodenleitfähigkeit&lt;br /&gt;
* firmware - aktuelle Firmware auf dem Device&lt;br /&gt;
* lux - aktuelle Lichtintensität&lt;br /&gt;
* moisture - Wassergehalt (Feuchtigkeit) des Pflanzenbodens&lt;br /&gt;
* temperature - Umgebungstemperatur&lt;br /&gt;
&lt;br /&gt;
===Set===&lt;br /&gt;
* devicename - setzt einen Devicenamen&lt;br /&gt;
&lt;br /&gt;
===Get===&lt;br /&gt;
* sensorData - aktive Abfrage der Sensors Werte&lt;br /&gt;
* devicename - liest den Devicenamen aus&lt;br /&gt;
* firmware - liest die Firmeware aus&lt;br /&gt;
&lt;br /&gt;
===Attribute===&lt;br /&gt;
* interval - Intervallzeit in Sekunden, nach der der nächste automatische Datenabruf erfolgen soll&lt;br /&gt;
* model - Auswahl eines unterstützten Gerätes&lt;br /&gt;
* disable - deaktiviert die den Abruf&lt;br /&gt;
* disabledForIntervals - deaktiviert das Gerät für den angegebenen Zeitinterval (13:00-18:30 or 13:00-18:30 22:00-23:00)&lt;br /&gt;
* minFertility - min Fruchtbarkeits-Grenzwert für ein Ereignis minFertility low &lt;br /&gt;
* maxFertility - max Fruchtbarkeits-Grenzwert für ein Ereignis maxFertility high &lt;br /&gt;
* minMoisture - min Feuchtigkeits-Grenzwert für ein Ereignis minMoisture low &lt;br /&gt;
* maxMoisture - max Feuchtigkeits-Grenzwert für ein Ereignis maxMoisture high &lt;br /&gt;
* minTemp - min Temperatur-Grenzwert für ein Ereignis minTemp low &lt;br /&gt;
* maxTemp - max Temperatur-Grenzwert für ein Ereignis maxTemp high &lt;br /&gt;
* minlux - min Helligkeits-Grenzwert für ein Ereignis minlux low &lt;br /&gt;
* maxlux - max Helligkeits-Grenzwert für ein Ereignis maxlux high &lt;br /&gt;
*:Beispiele für min/max-Ereignisse:&lt;br /&gt;
*::2017-03-16 11:08:05 XiaomiFlowerSens Dracaena minMoisture low&lt;br /&gt;
*::2017-03-16 11:08:06 XiaomiFlowerSens Dracaena maxTemp high&lt;br /&gt;
* sshHost - FQDN oder IP-Adresse eines entfernten SSH-Systems. Das SSH-System ist auf eine Zertifikat basierte Authentifizierung zu konfigurieren. Am elegantesten geschieht das mit einer .ssh/config Datei auf dem SSH-Client.&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FHEM_mit_HTTPS_SSL-Zertifikat_und_eine_eigene_Zertifizierungsstelle&amp;diff=23283</id>
		<title>FHEM mit HTTPS SSL-Zertifikat und eine eigene Zertifizierungsstelle</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FHEM_mit_HTTPS_SSL-Zertifikat_und_eine_eigene_Zertifizierungsstelle&amp;diff=23283"/>
		<updated>2017-11-14T14:10:03Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Vorwort =&lt;br /&gt;
=== Dein Anliegen ===&lt;br /&gt;
Du möchtest FHEM mit HTTPS betreiben, hasst es aber ständig von Deinem Browser darauf aufmerksam gemacht zu werden das dies &amp;quot;keine sichere Verbindung&amp;quot; ist. &lt;br /&gt;
Oder Du möchtest einen weiteren Serverdienst aufsetzen, welcher verschlüsselte SSL oder TLS-Verbindungen anbietet (z.B. HTTPS, POP3S, IMAPS, LDAPS, SMTP mit TLS).&lt;br /&gt;
&lt;br /&gt;
=== Die Schwierigkeit dabei ===&lt;br /&gt;
Um eine mit SSL/TLS abgesicherte Verbindung anzubieten, benötigst Du ein Serverzertifikat. Dieses muss von einer Zertifizierungsstelle (Certification Authority oder kurz CA) signiert sein.&lt;br /&gt;
Ein offizielles Serverzertifikat, welches von einer offiziellen Stelle signiert ist, ist leider nicht kostenlos. Meist werden jährliche Gebühren in Höhe von mehreren hundert Euro fällig.&lt;br /&gt;
&lt;br /&gt;
=== Eine mögliche Lösung ===&lt;br /&gt;
Unter Linux kann man mit Bordmitteln eine eigene CA aufsetzen und ein selbst Zertifikate erstellen und signieren. Das ist ein Vorgang von wenigen Minuten. Alle Einzelheiten beschreibt dieser Artikel.&lt;br /&gt;
Der einzige Unterschied zu einem von einer anerkannten Stelle signierten Zertifikat ist, dass der Client (Emailprogramm, Browser, etc.) einmalig das root CA importieren muß.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Genaues Vorgehen =&lt;br /&gt;
== 1. OpenSSL installieren ==&lt;br /&gt;
Für die Verwaltung der Zertifikate und im übrigen auch für die Verschlüsselung der Verbindungen mit SSL und TLS kommt unter Linux fast immer OpenSSL zum Einsatz. Wahrscheinlich ist das auf Deinem Sytem deshalb bereits installiert. Wenn nicht, musst Du das Paket openssl nachinstallieren. Du benötigst aus diesem Paket den Kommandozeilenbefehl openssl.&lt;br /&gt;
&lt;br /&gt;
== 2. Erstellen der CA ==&lt;br /&gt;
Lege zunächst ein Verzeichnis an, in dem Du das Zertifikat ablegen willst. Wir nehmen in unserem Beispiel /root/ca:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
root@linux# mkdir /root/ca&lt;br /&gt;
root@linux# cd /root/ca&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Die Gültigkeit setzen wir mit 10 Jahren bewusst sehr hoch an. Läuft die CA aus, so werden nämlich auch alle damit signierten Serverzertifikate ungültig. Die CA enthält einen geheimen Schlüssel, welcher automatisch erzeugt und in der Datei cakey.pem abgelegt wird. Das CA-Zertifikat wird nach cacert.pem geschrieben. Der folgende Befehl erzeugt das einen Schlüssel für das Zertifikat mit einer Länge von 2048 Bit:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
root@linux# openssl req -new -x509 -newkey rsa:2048 -keyout cakey.pem -out cacert.pem -days 3650&lt;br /&gt;
Generating a 2048 bit RSA private key&lt;br /&gt;
..............................................................&lt;br /&gt;
..............................................................&lt;br /&gt;
.........................................+++&lt;br /&gt;
......................................+++&lt;br /&gt;
writing new private key to &#039;cakey.pem&#039;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Wer den geheimen Schlüssel der CA kennt, kann damit beliebige Serverzertifikate signieren. Deshalb wird diese Schlüsseldatei nicht im Klartext auf der Festplatte abgelegt, sondern mit einer Passphrase verschlüsselt. Diese Passphrase benötigst Du immer dann, wenn Du mit der CA neue Zertifikate ausstellen willst:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Enter PEM pass phrase: sehrlangesgeheimespasswort&lt;br /&gt;
Verifying - Enter PEM pass phrase: sehrlangesgeheimespasswort&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Nun werden wir gebeten, Daten einzugeben, welche die CA identifizieren. Diese werden dem Client angezeigt, wenn er aufgefordert wird, das Zertifikat zu akzeptieren oder abzulehnen. Der Code für Deutschland ist DE. Wenn Du ein Feld leer lassen möchtest, so gib einen Punkt ein. Ansonsten wird der in eckigen Klammern stehende Defaultwert eingetragen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
-----&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter &#039;.&#039;, the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]: DE&lt;br /&gt;
State or Province Name (full name) [Some-State]:Brandenburg&lt;br /&gt;
Locality Name (eg, city) []:Potsdam&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Familie AG&lt;br /&gt;
Organizational Unit Name (eg, section) []:EDV&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Das Feld Common Name (CN) ist hier der offizielle Name der Zertifizierungsstelle. Für Dein eigenes CA kannst Du einfach Deinen eigenen Namen eintragen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Common Name (eg, YOUR name) []: Cool Tux&lt;br /&gt;
Email Address []: cooltux@gmail.tada&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Fertig. Folgende zwei Dateien sind entstanden:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
root@linux# ll&lt;br /&gt;
insgesamt 9&lt;br /&gt;
drwxr-xr-x   2 root root  112 2006-04-30 12:08 .&lt;br /&gt;
drwx------  12 root root  600 2006-04-30 11:54 ..&lt;br /&gt;
-rw-r--r--   1 root root 1212 2006-04-30 12:08 cacert.pem&lt;br /&gt;
-rw-r--r--   1 root root  963 2006-04-30 12:08 cakey.pem&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Vorsichtshalber solltest Du die Rechte so setzen, dass die Schlüsseldatei nur für root lesbar ist:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
root@linux# chmod 600 cakey.pem&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Du kannst nun ausprobieren, ob Du den Schlüssel mit der Passphrase wieder öffnen kannst:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
root@linux# openssl rsa -in cakey.pem -noout -text&lt;br /&gt;
Enter pass phrase for cakey.pem: wrzlprmpft&lt;br /&gt;
Private-Key: (1024 bit)&lt;br /&gt;
modulus:&lt;br /&gt;
    00:d5:a5:37:51:e9:d9:fa:e3:97:e7:46:b2:88:1a:&lt;br /&gt;
    b5:46:80:47:76:14:ae:2b:8b:3e:35:5c:ab:15:84:&lt;br /&gt;
    53:d9:63:2e:7f:08:4b:ec:77:db:02:45:f8:c7:46:&lt;br /&gt;
    58:cd:2d:f9:29:4d:96:3d:d8:6c:5d:9f:79:8a:04:&lt;br /&gt;
    cf:b7:3a:89:da:a9:63:9f:44:b3:83:cf:0d:70:7d:&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
usw...&lt;br /&gt;
&lt;br /&gt;
== 3. Schlüssel für das Serverzertifikat erzeugen ==&lt;br /&gt;
Nachdem wir nun eine eigene CA haben, kann diese nun endlich für unseren Server ein Zertifikat herausgeben. Dazu erzeugen wir zunächst einen 2048 Bit langen RSA Schlüssel, der mit AES 128 verschlüsselt auf der Platte abgelegt wird (ja wirklich, auch hier wieder ein verschlüsselter Schlüssel). Die Passphrase muss diesmal nicht sonderlich geheim sein, da wir sie ohnehin im Anschluss wieder entfernen werden. OpenSSL lässt allerdings keine leere Phrase zu:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
root@linux# openssl genrsa -out serverkey.pem -aes128 2048 -days 3650&lt;br /&gt;
Generating RSA private key, 2048 bit long modulus&lt;br /&gt;
....+++&lt;br /&gt;
.......................................+++&lt;br /&gt;
e is 65537 (0x10001)&lt;br /&gt;
Enter pass phrase for serverkey.pem: test&lt;br /&gt;
Verifying - Enter pass phrase for serverkey.pem: test&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
So. Nun entfernen wir die Passphrase wieder. Warum? Der Serverdienst (Apache, Cyrus, etc.) muss schließlich in der Lage sein, den Schlüssel ohne Dein Zutun zu lesen. Oder möchtest Du bei jedem Booten des Servers ein Passwort eingeben müssen?&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
root@linux# openssl rsa -in serverkey.pem -out serverkey.pem&lt;br /&gt;
Enter pass phrase for serverkey.pem: jaja&lt;br /&gt;
writing RSA key&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 4. Certificate Signing Request erzeugen ==&lt;br /&gt;
Der nächste Schritt zum eigenen Zertifikat ist ein CSR. Dies muss dann nur noch von der CA signiert werden. Hier sind wieder Angaben analog zum Erstellen der CA nötig, was oft Verwirrung stiftet. Die allgemeinen Daten kann man ggfl. gleich wie oben eingeben:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
root@linux#  openssl req -new -key serverkey.pem -out req.pem -nodes&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter &#039;.&#039;, the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]: DE&lt;br /&gt;
State or Province Name (full name) [Some-State]:Brandenburg&lt;br /&gt;
Locality Name (eg, city) []:Potsdam&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Familie AG&lt;br /&gt;
Organizational Unit Name (eg, section) []:EDV&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
ACHTUNG, jetzt kommt das Wichtige: Beim Serverzertifikat ist der Common Name von entscheidender Bedeutung. Hier muss der DNS-Name stehen, unter dem der Client den Server anspricht! Wird das Zertifikat für eine HTTPS-Verbindung zu fhem.local verwendet, so muss der Common Name eben genau fhem.local heißen. Anderfalls wird der Browser das Zertifikat nicht akzeptieren, da er davon ausgehen muss, auf dem falschen Server gelandet zu sein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Common Name (eg, YOUR name) []: fhem.local&lt;br /&gt;
Email Address []: admin.fhem.local&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Weitere Optionen kann man einfach leer lassen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
A challenge password []:&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
An optional company name []:&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Mittlerweile tummeln sich schon vier Dateien in unserem Verzeichnis:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
root@linux# ll&lt;br /&gt;
insgesamt 17&lt;br /&gt;
drwxr-xr-x   2 root root  168 2006-04-30 12:29 .&lt;br /&gt;
drwx------  12 root root  600 2006-04-30 11:54 ..&lt;br /&gt;
-rw-r--r--   1 root root 1212 2006-04-30 12:08 cacert.pem&lt;br /&gt;
-rw-------   1 root root  963 2006-04-30 12:08 cakey.pem&lt;br /&gt;
-rw-r--r--   1 root root 1017 2006-04-30 12:29 req.pem&lt;br /&gt;
-rw-r--r--   1 root root 1679 2006-04-30 12:21 serverkey.pem&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 5. OpenSSL-Konfiguration anpassen ==&lt;br /&gt;
Leider kann man bei OpenSSL nicht alle Daten als Kommandozeilenargumente übergeben. Einige Einstellungen muss man lästigerweise in der Datei /etc/ssl/openssl.cnf ändern, bevor man signieren kann. Öffne diese Datei und passe folgende Zeilen in der Sektion [ CA_default ] an:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
/etc/ssl/openssl.cnf:&lt;br /&gt;
dir             = .              # Where everything is kept&lt;br /&gt;
new_certs_dir   = $dir           # default place for new certs&lt;br /&gt;
private_key     = $dir/cakey.pem # The private key&lt;br /&gt;
RANDFILE        = $dir/.rand     # private random number file&lt;br /&gt;
default_days    = 3650           # how long to certify for&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Das Feld default_days ist auf 365 Tage voreingestellt und gibt die Gültigkeit des Zertifikates an. Abgelaufene Zertifikate sind im Übrigen ein sehr häufiges Problem. Wenn es soweit ist, kennt sich damit nämlich schon lange keiner mehr aus. Deswegen kannst Du wie im Beispiel angegeben die Lebensdauer z.B. auf 10 Jahre heraufsetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun muss man noch einige Dateien anlegen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
root@linux# echo 01 &amp;gt; serial&lt;br /&gt;
root@linux# touch index.txt&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. Serverzertifikat signieren ==&lt;br /&gt;
Kommen wir zum feierlichen Abschluss: Unsere CA signiert nun das Zertifikat:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
root@linux# openssl ca -in req.pem -notext -out servercert.pem&lt;br /&gt;
Enter pass phrase for ./cakey.pem: langesgeheimespasswort&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Certificate is to be certified until Apr 27 10:45:36 2016 GMT (3650 days)&lt;br /&gt;
Sign the certificate? [y/n]: y&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1 out of 1 certificate requests certified, commit? [y/n] y&lt;br /&gt;
Write out database with 1 new entries&lt;br /&gt;
Data Base Updated&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 7. Zertifikate installieren ==&lt;br /&gt;
Wie Du das Zertifikat in FHEM installierst findest Du [[Raspberry_Pi_%26_HTTPS|hier]] und wenn Du ein Server Zertifikat für NGINX installieren möchtest findest Du Infos dazu [[HTTPS-Absicherung_%26_Authentifizierung_via_nginx_Webserver|hier]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Nachwort =&lt;br /&gt;
== Einbinden der root CA in die Zertifizierungsstelle des Browsers ==&lt;br /&gt;
Beim Firefox importieren wir unsere servercert.pem unter Einstellungen -&amp;gt; Erweitert -&amp;gt; Zertifikate -&amp;gt; Zertifikate anzeigen -&amp;gt; Zertifizierungsstellen ein.&lt;br /&gt;
Unter Chrome/Chromium finden wir die Zertifikatsverwaltung unter Einstellungen -&amp;gt; Erweitert -&amp;gt; Zertifikate verwalten HTTPS/SSL-Zertifikate und -Einstellungen verwalten -&amp;gt; Zertifizierungsstellen&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
Für den Chrome/Chromium müssen wir zusätzlich &amp;quot;Subject Alternative Names (SAN)&amp;quot; in unser Zertifikat eintragen. Dies geschieht beim Serverzertifikat signieren. Dazu müssen wir uns eine weitere Datei anlegen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
root@linux# vim oats.extensions.cnf&lt;br /&gt;
&lt;br /&gt;
basicConstraints=CA:FALSE&lt;br /&gt;
subjectAltName=@my_subject_alt_names&lt;br /&gt;
subjectKeyIdentifier = hash&lt;br /&gt;
&lt;br /&gt;
[ my_subject_alt_names ]&lt;br /&gt;
DNS.1 = fhem01.tuxnet.local&lt;br /&gt;
DNS.2 = fhem02.tuxnet.local&lt;br /&gt;
DNS.3 = fhem01-vpn.tuxnet.local&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Die signierung unseres Serverzertifikates erfolgt dann mit folgendem Befehl:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
openssl ca -in req.pem -notext -extfile oats.extensions.cnf -out servercert.pem&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Prüfen von Zertifikaten ==&lt;br /&gt;
Zertifikate kann man im übrigen auf dieser [https://www.networking4all.com/en/ssl+certificates/csr+check/| Seite] prüfen lassen.&lt;br /&gt;
Dazu kopiert man den Inhalt der servercert.pem in das Eingabefeld der Seite und klickt dann auf Check CSR&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FHEM_mit_HTTPS_SSL-Zertifikat_und_eine_eigene_Zertifizierungsstelle&amp;diff=23282</id>
		<title>FHEM mit HTTPS SSL-Zertifikat und eine eigene Zertifizierungsstelle</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FHEM_mit_HTTPS_SSL-Zertifikat_und_eine_eigene_Zertifizierungsstelle&amp;diff=23282"/>
		<updated>2017-11-14T14:03:31Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: Die Seite wurde neu angelegt: „= Vorwort = === Dein Anliegen === Du möchtest FHEM mit HTTPS betreiben, hasst es aber ständig von Deinem Browser darauf aufmerksam gemacht zu werden das dies…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Vorwort =&lt;br /&gt;
=== Dein Anliegen ===&lt;br /&gt;
Du möchtest FHEM mit HTTPS betreiben, hasst es aber ständig von Deinem Browser darauf aufmerksam gemacht zu werden das dies &amp;quot;keine sichere Verbindung&amp;quot; ist. &lt;br /&gt;
Oder Du möchtest einen weiteren Serverdienst aufsetzen, welcher verschlüsselte SSL oder TLS-Verbindungen anbietet (z.B. HTTPS, POP3S, IMAPS, LDAPS, SMTP mit TLS).&lt;br /&gt;
&lt;br /&gt;
=== Die Schwierigkeit dabei ===&lt;br /&gt;
Um eine mit SSL/TLS abgesicherte Verbindung anzubieten, benötigst Du ein Serverzertifikat. Dieses muss von einer Zertifizierungsstelle (Certification Authority oder kurz CA) signiert sein.&lt;br /&gt;
Ein offizielles Serverzertifikat, welches von einer offiziellen Stelle signiert ist, ist leider nicht kostenlos. Meist werden jährliche Gebühren in Höhe von mehreren hundert Euro fällig.&lt;br /&gt;
&lt;br /&gt;
=== Eine mögliche Lösung ===&lt;br /&gt;
Unter Linux kann man mit Bordmitteln eine eigene CA aufsetzen und ein selbst Zertifikate erstellen und signieren. Das ist ein Vorgang von wenigen Minuten. Alle Einzelheiten beschreibt dieser Artikel.&lt;br /&gt;
Der einzige Unterschied zu einem von einer anerkannten Stelle signierten Zertifikat ist, dass der Client (Emailprogramm, Browser, etc.) einmalig das root CA importieren muß.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Genaues Vorgehen =&lt;br /&gt;
== 1. OpenSSL installieren ==&lt;br /&gt;
Für die Verwaltung der Zertifikate und im übrigen auch für die Verschlüsselung der Verbindungen mit SSL und TLS kommt unter Linux fast immer OpenSSL zum Einsatz. Wahrscheinlich ist das auf Deinem Sytem deshalb bereits installiert. Wenn nicht, musst Du das Paket openssl nachinstallieren. Du benötigst aus diesem Paket den Kommandozeilenbefehl openssl.&lt;br /&gt;
&lt;br /&gt;
== 2. Erstellen der CA ==&lt;br /&gt;
Lege zunächst ein Verzeichnis an, in dem Du das Zertifikat ablegen willst. Wir nehmen in unserem Beispiel /root/ca:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
root@linux# mkdir /root/ca&lt;br /&gt;
root@linux# cd /root/ca&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Die Gültigkeit setzen wir mit 10 Jahren bewusst sehr hoch an. Läuft die CA aus, so werden nämlich auch alle damit signierten Serverzertifikate ungültig. Die CA enthält einen geheimen Schlüssel, welcher automatisch erzeugt und in der Datei cakey.pem abgelegt wird. Das CA-Zertifikat wird nach cacert.pem geschrieben. Der folgende Befehl erzeugt das einen Schlüssel für das Zertifikat mit einer Länge von 2048 Bit:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
root@linux# openssl req -new -x509 -newkey rsa:2048 -keyout cakey.pem -out cacert.pem -days 3650&lt;br /&gt;
Generating a 2048 bit RSA private key&lt;br /&gt;
..............................................................&lt;br /&gt;
..............................................................&lt;br /&gt;
.........................................+++&lt;br /&gt;
......................................+++&lt;br /&gt;
writing new private key to &#039;cakey.pem&#039;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Wer den geheimen Schlüssel der CA kennt, kann damit beliebige Serverzertifikate signieren. Deshalb wird diese Schlüsseldatei nicht im Klartext auf der Festplatte abgelegt, sondern mit einer Passphrase verschlüsselt. Diese Passphrase benötigst Du immer dann, wenn Du mit der CA neue Zertifikate ausstellen willst:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Enter PEM pass phrase: sehrlangesgeheimespasswort&lt;br /&gt;
Verifying - Enter PEM pass phrase: sehrlangesgeheimespasswort&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Nun werden wir gebeten, Daten einzugeben, welche die CA identifizieren. Diese werden dem Client angezeigt, wenn er aufgefordert wird, das Zertifikat zu akzeptieren oder abzulehnen. Der Code für Deutschland ist DE. Wenn Du ein Feld leer lassen möchtest, so gib einen Punkt ein. Ansonsten wird der in eckigen Klammern stehende Defaultwert eingetragen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
-----&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter &#039;.&#039;, the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]: DE&lt;br /&gt;
State or Province Name (full name) [Some-State]:Brandenburg&lt;br /&gt;
Locality Name (eg, city) []:Potsdam&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Familie AG&lt;br /&gt;
Organizational Unit Name (eg, section) []:EDV&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Das Feld Common Name (CN) ist hier der offizielle Name der Zertifizierungsstelle. Für Dein eigenes CA kannst Du einfach Deinen eigenen Namen eintragen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Common Name (eg, YOUR name) []: Cool Tux&lt;br /&gt;
Email Address []: cooltux@gmail.tada&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Fertig. Folgende zwei Dateien sind entstanden:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
root@linux# ll&lt;br /&gt;
insgesamt 9&lt;br /&gt;
drwxr-xr-x   2 root root  112 2006-04-30 12:08 .&lt;br /&gt;
drwx------  12 root root  600 2006-04-30 11:54 ..&lt;br /&gt;
-rw-r--r--   1 root root 1212 2006-04-30 12:08 cacert.pem&lt;br /&gt;
-rw-r--r--   1 root root  963 2006-04-30 12:08 cakey.pem&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Vorsichtshalber solltest Du die Rechte so setzen, dass die Schlüsseldatei nur für root lesbar ist:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
root@linux# chmod 600 cakey.pem&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Du kannst nun ausprobieren, ob Du den Schlüssel mit der Passphrase wieder öffnen kannst:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
root@linux# openssl rsa -in cakey.pem -noout -text&lt;br /&gt;
Enter pass phrase for cakey.pem: wrzlprmpft&lt;br /&gt;
Private-Key: (1024 bit)&lt;br /&gt;
modulus:&lt;br /&gt;
    00:d5:a5:37:51:e9:d9:fa:e3:97:e7:46:b2:88:1a:&lt;br /&gt;
    b5:46:80:47:76:14:ae:2b:8b:3e:35:5c:ab:15:84:&lt;br /&gt;
    53:d9:63:2e:7f:08:4b:ec:77:db:02:45:f8:c7:46:&lt;br /&gt;
    58:cd:2d:f9:29:4d:96:3d:d8:6c:5d:9f:79:8a:04:&lt;br /&gt;
    cf:b7:3a:89:da:a9:63:9f:44:b3:83:cf:0d:70:7d:&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
usw...&lt;br /&gt;
&lt;br /&gt;
== 3. Schlüssel für das Serverzertifikat erzeugen ==&lt;br /&gt;
Nachdem wir nun eine eigene CA haben, kann diese nun endlich für unseren Server ein Zertifikat herausgeben. Dazu erzeugen wir zunächst einen 2048 Bit langen RSA Schlüssel, der mit AES 128 verschlüsselt auf der Platte abgelegt wird (ja wirklich, auch hier wieder ein verschlüsselter Schlüssel). Die Passphrase muss diesmal nicht sonderlich geheim sein, da wir sie ohnehin im Anschluss wieder entfernen werden. OpenSSL lässt allerdings keine leere Phrase zu:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
root@linux# openssl genrsa -out serverkey.pem -aes128 2048 -days 3650&lt;br /&gt;
Generating RSA private key, 2048 bit long modulus&lt;br /&gt;
....+++&lt;br /&gt;
.......................................+++&lt;br /&gt;
e is 65537 (0x10001)&lt;br /&gt;
Enter pass phrase for serverkey.pem: test&lt;br /&gt;
Verifying - Enter pass phrase for serverkey.pem: test&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
So. Nun entfernen wir die Passphrase wieder. Warum? Der Serverdienst (Apache, Cyrus, etc.) muss schließlich in der Lage sein, den Schlüssel ohne Dein Zutun zu lesen. Oder möchtest Du bei jedem Booten des Servers ein Passwort eingeben müssen?&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
root@linux# openssl rsa -in serverkey.pem -out serverkey.pem&lt;br /&gt;
Enter pass phrase for serverkey.pem: jaja&lt;br /&gt;
writing RSA key&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 4. Certificate Signing Request erzeugen ==&lt;br /&gt;
Der nächste Schritt zum eigenen Zertifikat ist ein CSR. Dies muss dann nur noch von der CA signiert werden. Hier sind wieder Angaben analog zum Erstellen der CA nötig, was oft Verwirrung stiftet. Die allgemeinen Daten kann man ggfl. gleich wie oben eingeben:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
root@linux#  openssl req -new -key serverkey.pem -out req.pem -nodes&lt;br /&gt;
You are about to be asked to enter information that will be incorporated&lt;br /&gt;
into your certificate request.&lt;br /&gt;
What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;
There are quite a few fields but you can leave some blank&lt;br /&gt;
For some fields there will be a default value,&lt;br /&gt;
If you enter &#039;.&#039;, the field will be left blank.&lt;br /&gt;
-----&lt;br /&gt;
Country Name (2 letter code) [AU]: DE&lt;br /&gt;
State or Province Name (full name) [Some-State]:Brandenburg&lt;br /&gt;
Locality Name (eg, city) []:Potsdam&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Familie AG&lt;br /&gt;
Organizational Unit Name (eg, section) []:EDV&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
ACHTUNG, jetzt kommt das Wichtige: Beim Serverzertifikat ist der Common Name von entscheidender Bedeutung. Hier muss der DNS-Name stehen, unter dem der Client den Server anspricht! Wird das Zertifikat für eine HTTPS-Verbindung zu fhem.local verwendet, so muss der Common Name eben genau fhem.local heißen. Anderfalls wird der Browser das Zertifikat nicht akzeptieren, da er davon ausgehen muss, auf dem falschen Server gelandet zu sein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Common Name (eg, YOUR name) []: fhem.local&lt;br /&gt;
Email Address []: admin.fhem.local&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Weitere Optionen kann man einfach leer lassen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
A challenge password []:&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
An optional company name []:&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Mittlerweile tummeln sich schon vier Dateien in unserem Verzeichnis:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
root@linux# ll&lt;br /&gt;
insgesamt 17&lt;br /&gt;
drwxr-xr-x   2 root root  168 2006-04-30 12:29 .&lt;br /&gt;
drwx------  12 root root  600 2006-04-30 11:54 ..&lt;br /&gt;
-rw-r--r--   1 root root 1212 2006-04-30 12:08 cacert.pem&lt;br /&gt;
-rw-------   1 root root  963 2006-04-30 12:08 cakey.pem&lt;br /&gt;
-rw-r--r--   1 root root 1017 2006-04-30 12:29 req.pem&lt;br /&gt;
-rw-r--r--   1 root root 1679 2006-04-30 12:21 serverkey.pem&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 5. OpenSSL-Konfiguration anpassen ==&lt;br /&gt;
Leider kann man bei OpenSSL nicht alle Daten als Kommandozeilenargumente übergeben. Einige Einstellungen muss man lästigerweise in der Datei /etc/ssl/openssl.cnf ändern, bevor man signieren kann. Öffne diese Datei und passe folgende Zeilen in der Sektion [ CA_default ] an:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
/etc/ssl/openssl.cnf:&lt;br /&gt;
dir             = .              # Where everything is kept&lt;br /&gt;
new_certs_dir   = $dir           # default place for new certs&lt;br /&gt;
private_key     = $dir/cakey.pem # The private key&lt;br /&gt;
RANDFILE        = $dir/.rand     # private random number file&lt;br /&gt;
default_days    = 3650           # how long to certify for&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Das Feld default_days ist auf 365 Tage voreingestellt und gibt die Gültigkeit des Zertifikates an. Abgelaufene Zertifikate sind im Übrigen ein sehr häufiges Problem. Wenn es soweit ist, kennt sich damit nämlich schon lange keiner mehr aus. Deswegen kannst Du wie im Beispiel angegeben die Lebensdauer z.B. auf 10 Jahre heraufsetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun muss man noch einige Dateien anlegen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
root@linux# echo 01 &amp;gt; serial&lt;br /&gt;
root@linux# touch index.txt&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. Serverzertifikat signieren ==&lt;br /&gt;
Kommen wir zum feierlichen Abschluss: Unsere CA signiert nun das Zertifikat:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
root@linux# openssl ca -in req.pem -notext -out servercert.pem&lt;br /&gt;
Enter pass phrase for ./cakey.pem: langesgeheimespasswort&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Certificate is to be certified until Apr 27 10:45:36 2016 GMT (3650 days)&lt;br /&gt;
Sign the certificate? [y/n]: y&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1 out of 1 certificate requests certified, commit? [y/n] y&lt;br /&gt;
Write out database with 1 new entries&lt;br /&gt;
Data Base Updated&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 7. Zertifikate installieren ==&lt;br /&gt;
Wie Du das Zertifikat in FHEM installierst findest Du [[Raspberry_Pi_%26_HTTPS|hier]] und wenn Du ein Server Zertifikat für NGINX installieren möchtest findest Du Infos dazu [[HTTPS-Absicherung_%26_Authentifizierung_via_nginx_Webserver|hier]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Nachwort =&lt;br /&gt;
== Einbinden der root CA in die Zertifizierungsstelle des Browsers ==&lt;br /&gt;
Beim Firefox importieren wir unsere servercert.pem unter Einstellungen -&amp;gt; Erweitert -&amp;gt; Zertifikate -&amp;gt; Zertifikate anzeigen -&amp;gt; Zertifizierungsstellen ein.&lt;br /&gt;
Unter Chrome/Chromium finden wir die Zertifikatsverwaltung unter Einstellungen -&amp;gt; Erweitert -&amp;gt; Zertifikate verwalten HTTPS/SSL-Zertifikate und -Einstellungen verwalten -&amp;gt; Zertifizierungsstellen&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
Für den Chrome/Chromium müssen wir zusätzlich &amp;quot;Subject Alternative Names (SAN)&amp;quot; in unser Zertifikat eintragen. Dies geschieht beim Serverzertifikat signieren. Dazu müssen wir uns eine weitere Datei anlegen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
root@linux# vim oats.extensions.cnf&lt;br /&gt;
&lt;br /&gt;
basicConstraints=CA:FALSE&lt;br /&gt;
subjectAltName=@my_subject_alt_names&lt;br /&gt;
subjectKeyIdentifier = hash&lt;br /&gt;
&lt;br /&gt;
[ my_subject_alt_names ]&lt;br /&gt;
DNS.1 = fhem01.tuxnet.local&lt;br /&gt;
DNS.2 = fhem02.tuxnet.local&lt;br /&gt;
DNS.3 = fhem01-vpn.tuxnet.local&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Die signierung unseres Serverzertifikates erfolgt dann mit folgendem Befehl:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
openssl ca -in req.pem -notext -extfile oats.extensions.cnf -out servercert.pem&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Gleitende_Mittelwerte_berechnen_und_loggen&amp;diff=22735</id>
		<title>Gleitende Mittelwerte berechnen und loggen</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Gleitende_Mittelwerte_berechnen_und_loggen&amp;diff=22735"/>
		<updated>2017-09-25T09:53:59Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: /* Subroutine movingAverage in 99_MyUtils anlegen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Für verschiedene Wettersensoren ist es oftmals wünschenswert, gleitende Mittelwerte (fälschlich auch als &amp;quot;relative&amp;quot; Mittelwerte bezeichnet) über ein bestimmtes Zeitfenster auszugeben oder in den Logs zu speichern und zu plotten. Beispiele:&lt;br /&gt;
* Die momentanen Winddaten eines KS300 sind oft stark schwankend. Hier wäre ein Mittelwert z.B. der letzten 2-3 Stunden interessant. &lt;br /&gt;
* Für die Außentemperatur ist anhand eines Mittelwertes der letzten 24 Stunden evtl. ein gewisser Trend der generellen Entwicklung der Temperatur ableitbar.&lt;br /&gt;
&lt;br /&gt;
Mit Modulen wie &#039;&#039;rain&#039;&#039; oder &#039;&#039;average&#039;&#039; ist konzeptbedingt nur ein Mittelwert von fixen Zeiträumen (aktueller Tag, Monat, etc.) möglich. &lt;br /&gt;
&lt;br /&gt;
Im Nachfolgenden werden deshalb zwei Programme vorgestellt, die solche gleitenden Mittelwerte bereitstellen. Beide Programme werden in die Datei [[99 myUtils anlegen|99_MyUtils.pm]] eingetragen und dann von FHEM aufgerufen. Das erste Programm macht dies für beliebige Readings beliebiger Devices, das zweite Programm greift auf beliebige [[FileLog|File-]] oder [[DbLog|DbLogs]] zurück.&lt;br /&gt;
&lt;br /&gt;
== Gleitender Mittelwert für beliebige Readings ==&lt;br /&gt;
=== Subroutine movingAverage in 99_MyUtils anlegen ===&lt;br /&gt;
Zuerst muss die Subroutine &#039;&#039;movingAverage&#039;&#039; in die 99_MyUtils übernommen werden. Wenn noch nicht vorhanden, sollte die Datei dann so aussehen:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;package main;&lt;br /&gt;
use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
use POSIX;&lt;br /&gt;
sub&lt;br /&gt;
MyUtils_Initialize($$)&lt;br /&gt;
{&lt;br /&gt;
 my ($hash) = @_;&lt;br /&gt;
}&lt;br /&gt;
###############################################################################&lt;br /&gt;
#&lt;br /&gt;
#  Moving average &lt;br /&gt;
#&lt;br /&gt;
#  Aufruf: movingAverage(devicename,readingname,zeitspanne in s)&lt;br /&gt;
#&lt;br /&gt;
###############################################################################&lt;br /&gt;
&lt;br /&gt;
sub movingAverage($$$){&lt;br /&gt;
   my ($name,$reading,$avtime) = @_;&lt;br /&gt;
   my $hash = $defs{$name};&lt;br /&gt;
   my @new = my ($val,$time) = (ReadingsVal($name,$reading,undef),ReadingsTimestamp($name,$reading,undef));&lt;br /&gt;
   my ($cyear, $cmonth, $cday, $chour, $cmin, $csec) = $time =~ /(\d{4})-(\d{2})-(\d{2})\s(\d{2}):(\d{2}):(\d{2})/;&lt;br /&gt;
   my $ctime = $csec+60*$cmin+3600*$chour;&lt;br /&gt;
   my $num;&lt;br /&gt;
   my $arr;&lt;br /&gt;
   #-- initialize if requested&lt;br /&gt;
   if( ($avtime eq &amp;quot;-1&amp;quot;) ){&lt;br /&gt;
     $hash-&amp;gt;{helper}{history}=undef;&lt;br /&gt;
   }&lt;br /&gt;
   #-- test for existence&lt;br /&gt;
   if( !$hash-&amp;gt;{helper}{history}){&lt;br /&gt;
      #Log 1,&amp;quot;ARRAY CREATED&amp;quot;;&lt;br /&gt;
      push(@{$hash-&amp;gt;{helper}{history}},\@new);&lt;br /&gt;
      $num = 1;&lt;br /&gt;
      $arr=\@{$hash-&amp;gt;{helper}{history}};&lt;br /&gt;
   } else {&lt;br /&gt;
      $num = int(@{$hash-&amp;gt;{helper}{history}});&lt;br /&gt;
      $arr=\@{$hash-&amp;gt;{helper}{history}};&lt;br /&gt;
      my $starttime = $arr-&amp;gt;[0][1];&lt;br /&gt;
      my ($syear, $smonth, $sday, $shour, $smin, $ssec) = $starttime =~ /(\d{4})-(\d{2})-(\d{2})\s(\d{2}):(\d{2}):(\d{2})/;&lt;br /&gt;
      my $stime = $ssec+60*$smin+3600*$shour;&lt;br /&gt;
      #-- correct for daybreak&lt;br /&gt;
      $stime-=86400 &lt;br /&gt;
        if( $stime &amp;gt; $ctime);&lt;br /&gt;
      if( ($num &amp;lt; 25)&amp;amp;&amp;amp;( ($ctime-$stime)&amp;lt;$avtime) ){&lt;br /&gt;
        #Log 1,&amp;quot;ARRAY has $num elements, adding another one&amp;quot;;&lt;br /&gt;
        push(@{$hash-&amp;gt;{helper}{history}},\@new);&lt;br /&gt;
      }else{&lt;br /&gt;
        shift(@{$hash-&amp;gt;{helper}{history}});&lt;br /&gt;
        push(@{$hash-&amp;gt;{helper}{history}},\@new);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    #-- output and average&lt;br /&gt;
    my $average = 0;&lt;br /&gt;
    for(my $i=0;$i&amp;lt;$num;$i++){&lt;br /&gt;
      $average+=$arr-&amp;gt;[$i][0];&lt;br /&gt;
      Log 4,&amp;quot;[$name moving average] Value = &amp;quot;.$arr-&amp;gt;[$i][0].&amp;quot; Time = &amp;quot;.$arr-&amp;gt;[$i][1]; &lt;br /&gt;
    }&lt;br /&gt;
    $average=sprintf( &amp;quot;%5.3f&amp;quot;, $average/$num);&lt;br /&gt;
    #--average&lt;br /&gt;
    Log 4,&amp;quot;[$name moving average] calculated over $num values is $average&amp;quot;;  &lt;br /&gt;
    return $average;&lt;br /&gt;
 }&lt;br /&gt;
1;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Funktion movingAverage() aufrufen und nutzen ===&lt;br /&gt;
Bei jedem Aufruf schiebt die obige Funktion den gegenwärtigen Wert sowie den Zeitpunkt eines Readings (zweiter Parameter) ans Ende eines Arrays (maximal 25 Einträge) und wirft dafür den ersten Eintrag heraus. Die Anzahl der Einträge im Array wird so gewählt, dass die Zeitpunkte der Readings größer oder gleich der gewünschten Zeitspanne für die Mittelung sind. Über diese Werte wird dann gemittelt und der Wert zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Zur Anwendung empfiehlt sich, dem gewünschten Device ein userReading zu geben:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr devicename userReading readingname.av {movingAverage(&amp;quot;devicename&amp;quot;,&amp;quot;readingname&amp;quot;,zeitspanne)}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dieses wird dann automatisch bei jedem neuen Wert des Readings mit dem neuen gleitenden Mittelwert über die vergangene Zeitspanne gefüllt.&lt;br /&gt;
&lt;br /&gt;
Beispiel: Das Reading &amp;quot;pressure&amp;quot; des Devices &amp;quot;A.OWB&amp;quot; wird alle 5 Minuten aktualisiert. Das Device bekommt nun ein userReading:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr A.OWB userReading pressure.av {movingAverage(&amp;quot;A.OWB&amp;quot;,&amp;quot;pressure&amp;quot;,1800)}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dieses schreibt bei jeder Aktualisierung von &amp;quot;pressure&amp;quot; einen neuen Eintrag in sein Array - allerdings maximal sechs Werte, dann wird immer der älteste Eintrag gelöscht. Damit ist sichergestellt, dass diese mindestens 1800 Sekunden abdecken - also sechs Einträge.&lt;br /&gt;
&lt;br /&gt;
== Gleitender Mittelwert aus Log-Dateien ==&lt;br /&gt;
=== Subroutine myAverage() in 99_MyUtils anlegen ===&lt;br /&gt;
Zuerst muss die Subroutine myAverage in die 99_MyUtils übernommen werden. Wenn noch nicht vorhanden, sollte die Datei dann so aussehen:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;package main;&lt;br /&gt;
use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
use POSIX;&lt;br /&gt;
sub&lt;br /&gt;
MyUtils_Initialize($$)&lt;br /&gt;
{&lt;br /&gt;
 my ($hash) = @_;&lt;br /&gt;
}&lt;br /&gt;
##########################################################&lt;br /&gt;
# myAverage&lt;br /&gt;
# berechnet den Mittelwert aus LogFiles über einen beliebigen Zeitraum&lt;br /&gt;
sub&lt;br /&gt;
myAverage($$$)&lt;br /&gt;
{&lt;br /&gt;
 my ($offset,$logfile,$cspec) = @_;&lt;br /&gt;
 my $period_s = strftime &amp;amp;quot;%Y-%m-%d\x5f%H:%M:%S&amp;amp;quot;, localtime(time-$offset);&lt;br /&gt;
 my $period_e = strftime &amp;amp;quot;%Y-%m-%d\x5f%H:%M:%S&amp;amp;quot;, localtime;&lt;br /&gt;
 my $oll = $attr{global}{verbose};&lt;br /&gt;
 $attr{global}{verbose} = 0; &lt;br /&gt;
 my @logdata = split(&amp;amp;quot;\n&amp;amp;quot;, fhem(&amp;amp;quot;get $logfile - - $period_s $period_e $cspec&amp;amp;quot;));&lt;br /&gt;
 $attr{global}{verbose} = $oll; &lt;br /&gt;
 my ($cnt, $cum, $avg) = (0)x3;&lt;br /&gt;
 foreach (@logdata){&lt;br /&gt;
  my @line = split(&amp;amp;quot; &amp;amp;quot;, $_);&lt;br /&gt;
  if(defined $line[1] &amp;amp;amp;&amp;amp;amp; &amp;amp;quot;$line[1]&amp;amp;quot; ne &amp;amp;quot;&amp;amp;quot;){&lt;br /&gt;
   $cnt += 1;&lt;br /&gt;
   $cum += $line[1];&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
 if(&amp;amp;quot;$cnt&amp;amp;quot; &amp;amp;gt; 0){$avg = sprintf(&amp;amp;quot;%0.1f&amp;amp;quot;, $cum/$cnt)};&lt;br /&gt;
 Log 4, (&amp;amp;quot;myAverage: File: $logfile, Field: $cspec, Period: $period_s bis $period_e, Count: $cnt, Cum: $cum, Average: $avg&amp;amp;quot;);&lt;br /&gt;
 return $avg;&lt;br /&gt;
}&lt;br /&gt;
##########################################################&lt;br /&gt;
1;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Funktion myAverage() aufrufen und nutzen ===&lt;br /&gt;
Jetzt kann die Funktion &amp;lt;code&amp;gt;myAverage(&amp;amp;lt;offset&amp;amp;gt;, &amp;amp;lt;logfile&amp;amp;gt;, &amp;amp;lt;column-spec&amp;amp;gt;)&amp;lt;/code&amp;gt; ganz normal auf der FHEM-Konsole (telnet localhost 7072) genutzt werden. Hier z.B. die Ausgabe des Mittelwertes des Windsensors, eines KS300, über die letzten drei Stunden (Angabe in 3*3600s) oder der Temperaturmittelwert der letzten 24 Stunden.&lt;br /&gt;
&lt;br /&gt;
Mit FileLog:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;fhem&amp;amp;gt; {myAverage(&amp;amp;quot;10800&amp;amp;quot;, &amp;amp;quot;FileLog_KS300&amp;amp;quot;, &amp;amp;quot;8:::&amp;amp;quot;)}&lt;br /&gt;
6.3&lt;br /&gt;
fhem&amp;amp;gt; {myAverage(&amp;amp;quot;86400&amp;amp;quot;, &amp;amp;quot;FileLog_KS300&amp;amp;quot;, &amp;amp;quot;4:::&amp;amp;quot;)}&lt;br /&gt;
-2.7&lt;br /&gt;
fhem&amp;amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit DbLog:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;fhem&amp;amp;gt; {myAverage(&amp;amp;quot;10800&amp;amp;quot;, &amp;amp;quot;myDbLog&amp;amp;quot;, &amp;amp;quot;KS300:wind::&amp;amp;quot;)}&lt;br /&gt;
5.9&lt;br /&gt;
fhem&amp;amp;gt; {myAverage(&amp;amp;quot;86400&amp;amp;quot;, &amp;amp;quot;myDbLog&amp;amp;quot;, &amp;amp;quot;KS300:temperature::&amp;amp;quot;)}&lt;br /&gt;
-2.7&lt;br /&gt;
fhem&amp;amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ähnlich ist die Verwendung in perl-Code in der [[Konfiguration|fhem.cfg]]:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;my $avg = myAverage(&amp;amp;quot;10800&amp;amp;quot;, &amp;amp;quot;FileLog_KS300&amp;amp;quot;, &amp;amp;quot;8:::&amp;amp;quot;);;\&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Ein [[notify]], welches bei jedem neuen Sensorwert die Mitteltemperatur der letzten 24 Stunden als Event &amp;quot;average-temp xy&amp;quot; ins Logfile schreibt, sieht dann wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define KS300_T_notify notify KS300:temperature.* {\&lt;br /&gt;
 fhem(&#039;trigger KS300 average-temp: &#039;.myAverage(&amp;amp;quot;86400&amp;amp;quot;, &amp;amp;quot;FileLog_KS300&amp;amp;quot;, &amp;amp;quot;4:::&amp;amp;quot;));;\&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;!-- korrigiert lt. http://forum.fhem.de/index.php/topic,11622.msg170331.html#msg170331 --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analog dazu wäre mit den Winddaten zu verfahren.&lt;br /&gt;
&lt;br /&gt;
=== Eigenes Filelog und Plot ===&lt;br /&gt;
==== Definitionen ====&lt;br /&gt;
Ich schreibe ein komplett eigenes Logfile und lasse über eine spezielle gplot-Definition die Temperatur- und Winddaten loggen und plotten.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define KS300_W dummy&lt;br /&gt;
define KS300_W_notify notify KS300:wind.* {\&lt;br /&gt;
 my $avg = myAverage(&amp;amp;quot;10800&amp;amp;quot;, &amp;amp;quot;FileLog_KS300&amp;amp;quot;, &amp;amp;quot;8:::&amp;amp;quot;);;\&lt;br /&gt;
 my $event = sprintf(&amp;amp;quot;Wc:&amp;amp;#160;%0.1f Wd:&amp;amp;#160;%0.1f Wm:&amp;amp;#160;%0.1f Wlh:&amp;amp;#160;%0.1f&amp;amp;quot;, ReadingsVal(&amp;amp;quot;KS300&amp;amp;quot;,&amp;amp;quot;wind&amp;amp;quot;,&amp;amp;quot;0&amp;amp;quot;), ReadingsVal(&amp;amp;quot;KS300&amp;amp;quot;,&amp;amp;quot;W_avg_day&amp;amp;quot;,&amp;amp;quot;0&amp;amp;quot;), ReadingsVal(&amp;amp;quot;KS300&amp;amp;quot;,&amp;amp;quot;W_avg_month&amp;amp;quot;,&amp;amp;quot;0&amp;amp;quot;), $avg);;\&lt;br /&gt;
 Log 2, (&amp;amp;quot;K300_W: Event: $event&amp;amp;quot;);;\&lt;br /&gt;
 fhem(&amp;amp;quot;trigger KS300_W data: $event&amp;amp;quot;);;\&lt;br /&gt;
 fhem(&amp;amp;quot;trigger KS300 average-wind: $avg&amp;amp;quot;);;\&lt;br /&gt;
}&lt;br /&gt;
define FileLog_KS300_W FileLog ./log/KS300_W-%Y.log KS300_W.*&lt;br /&gt;
attr FileLog_KS300_W logtype text&lt;br /&gt;
attr FileLog_KS300_W room Logs&lt;br /&gt;
define KS300_TH dummy&lt;br /&gt;
define KS300_TH_notify notify KS300:temperature.* {\&lt;br /&gt;
 my $avg = myAverage(&amp;amp;quot;86400&amp;amp;quot;, &amp;amp;quot;FileLog_KS300&amp;amp;quot;, &amp;amp;quot;4:::&amp;amp;quot;);;\&lt;br /&gt;
 my $event = sprintf(&amp;amp;quot;Tc:&amp;amp;#160;%0.1f Hc:&amp;amp;#160;%0.1f Tavg:&amp;amp;#160;%0.1f&amp;amp;quot;, ReadingsVal(&amp;amp;quot;KS300&amp;amp;quot;,&amp;amp;quot;temperature&amp;amp;quot;,&amp;amp;quot;0&amp;amp;quot;), ReadingsVal(&amp;amp;quot;KS300&amp;amp;quot;,&amp;amp;quot;humidity&amp;amp;quot;,&amp;amp;quot;0&amp;amp;quot;), $avg);;\&lt;br /&gt;
 Log 2, (&amp;amp;quot;K300_TH: Event: $event&amp;amp;quot;);;\&lt;br /&gt;
 fhem(&amp;amp;quot;trigger KS300_TH data: $event&amp;amp;quot;);;\&lt;br /&gt;
 fhem(&#039;trigger KS300 average-temp: &#039;.$avg);;\&lt;br /&gt;
}&lt;br /&gt;
define FileLog_KS300_TH FileLog ./log/KS300_TH-%Y.log KS300_TH.*&lt;br /&gt;
attr FileLog_KS300_TH logtype text&lt;br /&gt;
attr FileLog_KS300_TH room Logs&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Die Definitionen für die Plots schauen so aus:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define weblink_KS300_W weblink fileplot FileLog_KS300_W:ks300_wind:CURRENT&lt;br /&gt;
attr weblink_KS300_W label &amp;amp;quot;Wind - Min: $data{min1}, Max: $data{max1}, Last: $data{currval1}&amp;amp;quot;&lt;br /&gt;
attr weblink_KS300_W room Dachterasse&lt;br /&gt;
define weblink_KS300_TH weblink fileplot FileLog_KS300_TH:ks300_temphum:CURRENT&lt;br /&gt;
attr weblink_KS300_TH label &amp;amp;quot;Temperatur/Feuchte - Min: $data{min1}, Max: $data{max1}, Last: $data{currval1}&amp;amp;quot;&lt;br /&gt;
attr weblink_KS300_TH room Dachterasse&lt;br /&gt;
define weblink_KS300_R weblink fileplot FileLog_KS300:ks300_rain10:CURRENT&lt;br /&gt;
attr weblink_KS300_R label &amp;amp;quot;Regen - Min: $data{min1}, Max: $data{max1}, Last: $data{currval1}&amp;amp;quot;&lt;br /&gt;
attr weblink_KS300_R room Dachterasse&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Angepasste gplot-Dateien ====&lt;br /&gt;
Nun noch die speziellen gplot-Dateien.&lt;br /&gt;
ks300_wind.gplot&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;############################&lt;br /&gt;
# Display the wind values of a KS300.&lt;br /&gt;
# Corresponding FileLog definition:&lt;br /&gt;
# define &amp;amp;lt;filelogname&amp;amp;gt; FileLog ./log/KS300_W-%Y.log KS300_W.*&lt;br /&gt;
set terminal png transparent size &amp;amp;lt;SIZE&amp;amp;gt; crop&lt;br /&gt;
set output &#039;&amp;amp;lt;OUT&amp;amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;amp;quot;%Y-%m-%d_%H:%M:%S&amp;amp;quot;&lt;br /&gt;
set xlabel &amp;amp;quot; &amp;amp;quot;&lt;br /&gt;
set ytics nomirror&lt;br /&gt;
#set y2tics&lt;br /&gt;
set ytics&lt;br /&gt;
set title &#039;&amp;amp;lt;L1&amp;amp;gt;&#039;&lt;br /&gt;
set grid xtics ytics&lt;br /&gt;
set yrange [0:]&lt;br /&gt;
set y2range [0:]&lt;br /&gt;
set ylabel &amp;amp;quot;Wind (aktuell) [km/h]&amp;amp;quot;&lt;br /&gt;
set y2label &amp;amp;quot;Wind (gemittelt) [km/h]&amp;amp;quot;&lt;br /&gt;
set format y2 &amp;amp;quot;%0.1f&amp;amp;quot;&lt;br /&gt;
#FileLog 5:Wc\x3a:0:&lt;br /&gt;
#FileLog 11:Wlh\x3a:0:&lt;br /&gt;
plot &amp;amp;quot;&amp;amp;lt;IN&amp;amp;gt;&amp;amp;quot; using 1:5 ls l7fill axes x1y1 title &#039;Wind (aktuell)&#039; with lines,\&lt;br /&gt;
   &amp;amp;quot;&amp;amp;lt;IN&amp;amp;gt;&amp;amp;quot; using 1:11 ls l5 axes x1y2 title &#039;Wind (3h-Mittel)&#039; with steps,\&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ks300_temphum.gplot&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;############################&lt;br /&gt;
# Display the Temperature und Humidity values of a KS300.&lt;br /&gt;
# Corresponding FileLog definition:&lt;br /&gt;
# define &amp;amp;lt;filelogname&amp;amp;gt; FileLog ./log/KS300_TH-%Y.log KS300_TH.*&lt;br /&gt;
set terminal png transparent size &amp;amp;lt;SIZE&amp;amp;gt; crop&lt;br /&gt;
set output &#039;&amp;amp;lt;OUT&amp;amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;amp;quot;%Y-%m-%d_%H:%M:%S&amp;amp;quot;&lt;br /&gt;
set xlabel &amp;amp;quot; &amp;amp;quot;&lt;br /&gt;
set ytics nomirror&lt;br /&gt;
set y2tics&lt;br /&gt;
#set ytics&lt;br /&gt;
set title &#039;&amp;amp;lt;L1&amp;amp;gt;&#039;&lt;br /&gt;
set grid xtics y2tics&lt;br /&gt;
set y2label &amp;amp;quot;Temperatur [°C]&amp;amp;quot;&lt;br /&gt;
set ylabel &amp;amp;quot;Luftfeuchte [%]&amp;amp;quot;&lt;br /&gt;
#FileLog 5:Tc\x3a:0:&lt;br /&gt;
#FileLog 9:Tavg\x3a:0:&lt;br /&gt;
#FileLog 7:Hc\x3a:0:&lt;br /&gt;
plot &amp;amp;quot;&amp;amp;lt;IN&amp;amp;gt;&amp;amp;quot; using 1:5 axes x1y2 ls l0 title &#039;Temperatur&#039; with lines,\&lt;br /&gt;
   &amp;amp;quot;&amp;amp;lt;IN&amp;amp;gt;&amp;amp;quot; using 1:9 axes x1y2 ls l10 title &#039;Temperatur (24h-Mittel)&#039; with lines,\&lt;br /&gt;
   &amp;amp;quot;&amp;amp;lt;IN&amp;amp;gt;&amp;amp;quot; using 1:7 axes x1y1 ls l2fill title &#039;Luftfeuchte&#039; with lines&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Den Plot für den Regen habe ich noch um Punkt-Plots für den israining-Status erweitert, so dass Punkte bei &amp;quot;yes&amp;quot; geplottet werden.&lt;br /&gt;
&lt;br /&gt;
ks300_rain10.gplot&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;############################&lt;br /&gt;
# Display the Rain values of a KS300.&lt;br /&gt;
# Corresponding FileLog definition:&lt;br /&gt;
# define &amp;amp;lt;filelogname&amp;amp;gt; FileLog ./log/KS300-%Y.log KS300:T:.*&lt;br /&gt;
set terminal png transparent size &amp;amp;lt;SIZE&amp;amp;gt; crop&lt;br /&gt;
set output &#039;&amp;amp;lt;OUT&amp;amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;amp;quot;%Y-%m-%d_%H:%M:%S&amp;amp;quot;&lt;br /&gt;
set xlabel &amp;amp;quot; &amp;amp;quot;&lt;br /&gt;
set ytics nomirror&lt;br /&gt;
#set y2tics&lt;br /&gt;
set ytics&lt;br /&gt;
set title &#039;&amp;amp;lt;L1&amp;amp;gt;&#039;&lt;br /&gt;
set grid xtics ytics&lt;br /&gt;
set y2range [0.5:1.5]&lt;br /&gt;
set y2tics (&amp;amp;quot;&amp;amp;quot; 0, &amp;amp;quot;Regen&amp;amp;quot; 1)&lt;br /&gt;
set pointsize 7&lt;br /&gt;
set ylabel &amp;amp;quot;Regen (l/m²)&amp;amp;quot;&lt;br /&gt;
set yrange [0:]&lt;br /&gt;
# Computing Rain/h and Rain/d values by accumulating the changes.&lt;br /&gt;
#FileLog 10:IR\x3a:0:delta-h&lt;br /&gt;
#FileLog 10:IR\x3a:0:delta-d&lt;br /&gt;
#FileLog 12:IR:0:$fld[11]=~&amp;amp;quot;yes&amp;amp;quot;?1:0&lt;br /&gt;
plot &amp;amp;quot;&amp;amp;lt;grep -v avg_ &amp;amp;lt;IN&amp;amp;gt; | perl -ane &#039;\&lt;br /&gt;
    @a = split(\&amp;amp;quot;[_:]\&amp;amp;quot;, $F[0]);\&lt;br /&gt;
    if(defined($lh) &amp;amp;amp;&amp;amp;amp; $lh ne $a[1])\&lt;br /&gt;
     { printf(\&amp;amp;quot;${ld}_$lh:30:00&amp;amp;#160;%f\n\&amp;amp;quot;, $hv); $hv = 0; }\&lt;br /&gt;
    if($lv) { $hv += ($F[9]-$lv); }\&lt;br /&gt;
    $lh = $a[1]; $ld = $a[0]; $lv = $F[9];\&lt;br /&gt;
    END { printf(\&amp;amp;quot;${ld}_$lh:30:00&amp;amp;#160;%f\n\&amp;amp;quot;, $hv) }&#039;&amp;amp;quot;\&lt;br /&gt;
   using 1:2 axes x1y1 ls l1fill title &#039;Regen pro Stunde&#039; with histeps,\&lt;br /&gt;
   &amp;amp;quot;&amp;amp;lt;grep -v avg_ &amp;amp;lt;IN&amp;amp;gt; | perl -ane &#039;\&lt;br /&gt;
    @a = split(\&amp;amp;quot;[_]\&amp;amp;quot;, $F[0]);\&lt;br /&gt;
    if(defined($ld) &amp;amp;amp;&amp;amp;amp; $ld ne $a[0]) {\&lt;br /&gt;
     printf(\&amp;amp;quot;${ld}_12:00:00&amp;amp;#160;%f\n\&amp;amp;quot;, $dv); $dv = 0; }\&lt;br /&gt;
     if($lv) { $dv += ($F[9]-$lv); }\&lt;br /&gt;
     $ld = $a[0]; $lv = $F[9];\&lt;br /&gt;
     END {printf(\&amp;amp;quot;${ld}_12:00:00&amp;amp;#160;%f\n\&amp;amp;quot;, $dv)}&#039;&amp;amp;quot;\&lt;br /&gt;
   using 1:2 axes x1y1 ls l7 title &#039;Regen pro Tag&#039; with histeps&lt;br /&gt;
   &amp;amp;quot;&amp;amp;lt;grep -v avg_ &amp;amp;lt;IN&amp;amp;gt; | awk &#039;{print $1, $12==\&amp;amp;quot;yes\&amp;amp;quot;? 1&amp;amp;#160;: 0; }&#039;&amp;amp;quot;\&lt;br /&gt;
   using 1:2 axes x1y2 ls l11fill title &#039;Regen aktuell&#039; with points&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Eventuell müssen in den gplots noch die Linienstile/Farben den eigenen Bedürfnissen angepasst werden. Ich verwende hier eigene Farben und Füllungen.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FHEM_startet_nicht_-_Tipps_zur_Fehlersuche&amp;diff=22019</id>
		<title>FHEM startet nicht - Tipps zur Fehlersuche</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FHEM_startet_nicht_-_Tipps_zur_Fehlersuche&amp;diff=22019"/>
		<updated>2017-08-01T11:13:50Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: /* Fehlernachrichten von FHEM bei dessen Start analysieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Kein Zugriff auf FHEMWEB/FHEM startet nicht - Was kann ich tun???&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Deine FHEMWEB-Seite ist nicht erreichbar? Ist FHEM tot, oder ist das Netzwerk kaputt? Was kann ich machen, um zu prüfen, woran es genau liegt?&lt;br /&gt;
&lt;br /&gt;
In diesem Wiki Artikel soll es darum gehen, wie Du für Dich prüfen kannst, ob ein Fehler bei FHEM, im Netzwerk oder ein anderes Problem vorliegt.&lt;br /&gt;
== Prüfen: Läuft überhaupt ein FHEM-Prozess? ==&lt;br /&gt;
Man kann sich unter einem Linuxsystem sämtliche laufende Prozesse auflisten lassen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ps ax&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Befehl ps listet je nach Argument alle laufende Prozesse auf. Die Liste kann man nun noch nach einem bestimmten Prozess filtern. Aufruf und Ausgabe einer Prozessliste mit einem Filter nach perl sieht z. B. so aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ps ax | grep perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cooltux@fhem01-cluster:~&amp;gt; ps ax | grep perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;11320 pts/0    S+     0:00 grep --color=auto perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wie wir sehen, wird hier lediglich der gerade ausgeführte Befehl ps gefunden (weil das Wort &#039;&#039;perl&#039;&#039; in der Aufrufzeile stand. Es wird hier überhaupt kein Perl-Prozess gelistet. Aktuell läuft also definitiv kein FHEM, das ja ein Perl-Programm/Prozess ist.&lt;br /&gt;
&lt;br /&gt;
Eine Prozessliste mit einem laufenden FHEM-Prozess könnte so aussehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[11:31 root@fhem01-cluster cooltux] &amp;gt; ps ax | grep perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;15852 ?        R    2119:09 /usr/bin/perl fhem.pl configDB&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;21447 pts/0    S+     0:00 grep perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
FHEM (&#039;&#039;perl fhem.pl ...&#039;&#039;) ist in diesem Fall also aktiv.&lt;br /&gt;
== Prüfen: Ist der laufende FHEM-Prozess überlastet? ==&lt;br /&gt;
Ich sollte mir anschauen, ob der FHEM-Prozess vielleicht zu sehr ausgelastet ist, der Prozess also 100 Prozent CPU Auslastung produziert?&lt;br /&gt;
&lt;br /&gt;
Ein weiterer Linuxbefehl &#039;&#039;pre&#039;&#039; wird uns hierbei behilflich sein:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
 [11:38 root@fhem01-cluster cooltux] &amp;gt; top&lt;br /&gt;
 top - 11:38:18 up 11 days, 18:58,  1 user,  load average: 1,07, 1,03, 1,00&lt;br /&gt;
 Tasks: 125 total,   2 running, 123 sleeping,   0 stopped,   0 zombie&lt;br /&gt;
 %Cpu(s): 24,9 us,  0,9 sy,  0,0 ni, 74,1 id,  0,0 wa,  0,0 hi,  0,1 si,  0,0 st&lt;br /&gt;
 KiB Mem:    945524 total,   833532 used,   111992 free,    41552 buffers&lt;br /&gt;
 KiB Swap:   102396 total,    46564 used,    55832 free.   496240 cached Mem&lt;br /&gt;
 PID   USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND&lt;br /&gt;
 15852 fhem      20   0  103652  82160   5068 R 100,0  8,7   2125:41 perl                                                                                                               &lt;br /&gt;
 21683 root      20   0    5740   2560   2092 R   1,0  0,3   0:00.37 top                                                                                                                &lt;br /&gt;
 19129 cooltux   20   0   86204  22348   3668 S   0,3  2,4  64:16.90 insync-portable                                                                                                    &lt;br /&gt;
 21350 cooltux   20   0   11436   2848   2248 S   0,3  0,3   0:00.10 sshd                                                                                                               &lt;br /&gt;
     1 root      20   0   23292   2368   1380 S   0,0  0,3   0:54.23 systemd                                                                                                            &lt;br /&gt;
     2 root      20   0       0      0      0 S   0,0  0,0   0:01.09 kthreadd                                                                                                           &lt;br /&gt;
     3 root      20   0       0      0      0 S   0,0  0,0   3:37.20 ksoftirqd/0                                                                                                        &lt;br /&gt;
     5 root       0 -20       0      0      0 S   0,0  0,0   0:00.00 kworker/0:0H                                                                                                       &lt;br /&gt;
     7 root      20   0       0      0      0 S   0,0  0,0   8:20.71 rcu_sched                                                                                                          &lt;br /&gt;
     8 root      20   0       0      0      0 S   0,0  0,0   0:00.00 rcu_bh                                                                                                             &lt;br /&gt;
     9 root      rt   0       0      0      0 S   0,0  0,0   0:05.45 migration/0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hier können wir nun eindeutig erkennen, das unser FHEM die CPU mit 100 Prozent auslastet. FHEM hat also ein Problem!&lt;br /&gt;
&lt;br /&gt;
Zum Vergleich ein FHEM/Perl-Prozess ohne Probleme:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
 [11:50 root@fhem01-cluster cooltux] &amp;gt; top&lt;br /&gt;
 top - 11:50:33 up 11 days, 19:10,  1 user,  load average: 0,84, 1,03, 1,00&lt;br /&gt;
 Tasks: 133 total,   1 running, 132 sleeping,   0 stopped,   0 zombie&lt;br /&gt;
 %Cpu(s):  0,6 us,  0,8 sy,  0,0 ni, 98,6 id,  0,0 wa,  0,0 hi,  0,0 si,  0,0 st&lt;br /&gt;
 KiB Mem:    945524 total,   818344 used,   127180 free,    43748 buffers&lt;br /&gt;
 KiB Swap:   102396 total,    46820 used,    55576 free.   489652 cached Mem&lt;br /&gt;
   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND&lt;br /&gt;
 22074 fhem      20   0   86424  68516   7200 S   1,3  7,2   0:47.64 perl&lt;br /&gt;
 22294 root      20   0    5740   2564   2092 R   1,3  0,3   0:00.19 top&lt;br /&gt;
 22296 fhem      20   0   86424  63556   2240 S   1,3  6,7   0:00.04 perl&lt;br /&gt;
 22297 fhem      20   0    2088    408    328 S   0,7  0,0   0:00.02 ping&lt;br /&gt;
     7 root      20   0       0      0      0 S   0,3  0,0   8:21.23 rcu_sched&lt;br /&gt;
  1366 mysql     20   0  620608 157132   5736 S   0,3 16,6  70:12.59 mysqld&lt;br /&gt;
 19481 root      20   0       0      0      0 S   0,3  0,0   0:02.35 kworker/3:0&lt;br /&gt;
     1 root      20   0   23292   2408   1420 S   0,0  0,3   0:54.27 systemd&lt;br /&gt;
     2 root      20   0       0      0      0 S   0,0  0,0   0:01.09 kthreadd&lt;br /&gt;
     3 root      20   0       0      0      0 S   0,0  0,0   3:37.42 ksoftirqd/0&lt;br /&gt;
     5 root       0 -20       0      0      0 S   0,0  0,0   0:00.00 kworker/0:0H&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Und wenn sich gar nichts mehr tut? ==&lt;br /&gt;
=== Fehlernachrichten von FHEM bei dessen Start analysieren  ===&lt;br /&gt;
In der Regel werden die Ausgaben von FHEM, auch die bei seinem Start, gemeinsam mit vielen anderen Nachrichten in ein Logfile geschrieben. Dort kann natürlich nach Ursachen geforscht werden.&lt;br /&gt;
&lt;br /&gt;
Eine einfachere Auswertung wird möglich, wenn man diese Meldungen zeitweilig in einem Terminalfenster (das Ding, um Kommandozeilenbefehle einzugeben) angezeigt bekommt. Das erreicht man z.B. auf folgendem Weg:&lt;br /&gt;
&lt;br /&gt;
# Starte ein Terminalfenster bzw. einen Terminalemulator&lt;br /&gt;
# Wechsle in das FHEM-Installationsverzeichnis (meist: &#039;&#039;/opt/fhem&#039;&#039;)&lt;br /&gt;
#: &amp;lt;code&amp;gt;cd /opt/fhem&amp;lt;/code&amp;gt;&lt;br /&gt;
# Erstelle eine Kopie Deiner fhem.cfg, z.B. fhem.cfg.debug&lt;br /&gt;
#: &amp;lt;code&amp;gt;cp fhem.cfg fhem.cfg.debug&amp;lt;/code&amp;gt;&lt;br /&gt;
# Bearbeite diese Kopie fhem.cfg.debug nun, um die Meldungen in das Terminalfenster zu leiten, in dem der FHEM-Start versucht wird:&lt;br /&gt;
#: &amp;lt;code&amp;gt;nano ./fhem.cfg.debug&amp;lt;/code&amp;gt;&lt;br /&gt;
#:&lt;br /&gt;
#: In der Zeile mit &amp;quot;attr global logfile&amp;quot; ist der Dateiname durch ein - (Minuszeichen) zu ersetzen. Dadurch werden die FHEM-Ausgaben auf STDOUT (in das Terminalfenster) geschrieben, und FHEM geht nicht in den Hintergrund.&lt;br /&gt;
&lt;br /&gt;
# Starte FHEM im Terminalfenster &#039;&#039;&#039;mit der angepassten Konfigurationsdatei&#039;&#039;&#039;:&lt;br /&gt;
#: &amp;lt;code&amp;gt;perl fhem.pl fhem.cfg.debug&amp;lt;/code&amp;gt;&lt;br /&gt;
#: Das Terminalfenster nun nicht schliessen, die Meldungen tauchen hier auf.&lt;br /&gt;
#: ... Die Fehlermeldungen sind nun zu interpretieren. Gegebenenfalls kann man sie kopieren und als wichtige Information bei einer Hilfeanfrage (z.B. im Forum) verwenden.&lt;br /&gt;
# Wenn man genug analysiert hat, FHEM mit Ctrl-C/Strg-C stoppen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Neue Möglichkeit des debuggen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
seit dem 01.08.2017 gibt es die Möglichkeit beim manuellen starten von FHEM den Schalter -d zu verwenden. Dieser startet FHEM mit global verbose 5 und gibt somit alle Meldungen aus&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
perl fhem.pl -d fhem.cfg&lt;br /&gt;
perl fhem.pl -d configDB&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=AMAD&amp;diff=22018</id>
		<title>AMAD</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=AMAD&amp;diff=22018"/>
		<updated>2017-08-01T10:15:24Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: /* Bekannte Meldungen/Hinweise/Probleme */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuern von Adroidgeräten und Anzeige von bestimmten Informationen dieser Geräte&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Sonstige Systeme&lt;br /&gt;
|ModTechName=73_AMADCommBridge.pm, 74_AMADDevice.pm&lt;br /&gt;
|ModOwner=CoolTux &amp;lt;br /&amp;gt;([http://forum.fhem.de/index.php?action=profile;u=13684 Forum] / [[Benutzer:CoolTux|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= AMAD 4.0 [AMADNG] =&lt;br /&gt;
== 73_AMADCommBridge / 74_AMADDevice ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Vorwort =&lt;br /&gt;
=== Warum AMADNG ===&lt;br /&gt;
Nach fast 6 Monaten Entwicklungszeit wurde die neuste AMAD Version am 24.07.2017 offiziell frei gegeben. Diesmal lagen mir mehrere Dinge am Herzen.&lt;br /&gt;
In erster Linie wollte ich eine softwareseitige Trennung der AMADCommBridge vom eigentlichen Android Device. Daher ist die neue Version ein zweistufiges Modul geworden.&lt;br /&gt;
Im Laufe der Entwicklung kamen auch andere Anforderungen hinzu, welche ich dann fähig war um zu setzen. Eine dieser Anforderungen war eine einfachere und besser funktionierende Installation. Raus gekommen ist ein Android Installationsassistant.&lt;br /&gt;
Mit ihm wird auf einfache Art und Weise direkt per Sprachführung und Eingabedialogen Automagic für AMAD konfiguriert und das Device in FHEM automatisch erstellt. Autocreate!&lt;br /&gt;
&lt;br /&gt;
= Vorstellung =&lt;br /&gt;
Dieses 2-stufige Modul liefert, &#039;&#039;&#039;in Verbindung mit der Android APP Automagic&#039;&#039;&#039;, diverse Informationen von Android Geräten. &lt;br /&gt;
Die AndroidAPP Automagic (welche nicht von mir stammt und 2.90 Euro kostet) funktioniert wie Tasker, ist aber bei weitem User freundlicher.&lt;br /&gt;
&lt;br /&gt;
=== Features / Funktionen ===&lt;br /&gt;
Im Auslieferiungszustand werden folgende Zustände dargestellt:&lt;br /&gt;
* installierte Android Version&lt;br /&gt;
* Zustand von Automagic auf dem Gerät&lt;br /&gt;
* Spracheingabe&lt;br /&gt;
* Bluetooth An/Aus&lt;br /&gt;
* Zustand einer definierten App (läuft aktiv im Vordergrund oder nicht?)&lt;br /&gt;
* verbundene Bluetoothgeräte, inklusive deren MAC Adresse&lt;br /&gt;
* aktuell abgespieltes Musikalbum des verwendeten Mediaplayers&lt;br /&gt;
* aktuell abgespielter Musikinterpret des verwendeten Mediaplayers&lt;br /&gt;
* aktuell abgespielter Musiktitel des verwendeten Mediaplayers&lt;br /&gt;
* Status des Androidgerätes - Online/Offline&lt;br /&gt;
* nächster Alarmtag&lt;br /&gt;
* nächste Alarmzeit&lt;br /&gt;
* Batteriestatus in %&lt;br /&gt;
* Ladestatus - Netztei angeschlossen / nicht angeschlossen&lt;br /&gt;
* Bildschirmstatus An/Aus&lt;br /&gt;
* Bildschirmhelligkeit&lt;br /&gt;
* Vollbildmodus An/Aus&lt;br /&gt;
* Bildschirmausrichtung Auto/Landscape/Portrait&lt;br /&gt;
* Standardlautstärke&lt;br /&gt;
* Media Lautstärke&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Mit etwas Einarbeitung können jegliche Informationen welche Automagic bereit stellt, in FHEM angezeigt werden. Hierzu bedarf es lediglich eines eigenen Flows welcher seine Daten an die AMADCommBridge sendet. Das Modul gibt auch die Möglichkeit Androidgeräte zu steuern.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= AMADCommBridge - Kommunikationsbrücke für alle AMAD Geräte =&lt;br /&gt;
Dieses Modul ist das Ausgangsmodul zur erfolgreichen Integration von Androidgeräten in FHEM. Es stellt ferner eine Verbindungsebene zwischen AMAD unterstützten Geräten und FHEM zur Verfügung. Alle Kommunikation zwischen AMAD Android und FHEM läuft über diese Schnittstelle.&lt;br /&gt;
Daher erfolgt die Ersteinrichtung eines AMAD Devices auch genau über diese Modulinstanz. &lt;br /&gt;
&lt;br /&gt;
Damit erfolgreich ein Androidgerät in FHEM eingerichtet werden kann, muss im ersten Schritt ein AMADCommBridge Device angelegt werden.&lt;br /&gt;
&lt;br /&gt;
=== Definition in FHEM ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; AMADCommBridge&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== Beispiel ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define AMADBridge AMADCommBridge&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Anweisung erstellt ein neues AMADCommBridge Device Namens AMADBridge.&lt;br /&gt;
&lt;br /&gt;
Im folgenden muß lediglich das Flowset auf dem Android Gerät installiert werden und der Flow &#039;First Run Assistent&#039; ausgeführt werden. (einfach den Homebutton drücken)&lt;br /&gt;
Der Assistent geleitet Dich dann durch die Einrichtung Deines AMAD Gerätes und sorgt dafür das am Ende des Installationsprozess das Androidgerät als AMAD Device in FHEM angelegt wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
* JSON_ERROR - JSON Fehlermeldung welche von Perl gemeldet wird&lt;br /&gt;
* JSON_ERROR_STRING - der String welcher die JSON Fehlermeldung verursacht hat&lt;br /&gt;
* fhemServerIP - die Ip-Adresse des FHEM Servers, wird vom Modul auf Basis des JSON Strings vom Installationsassistenten gesetzt. Kann aber auch mittels set Befehles vom User gesetzt werden&lt;br /&gt;
* receiveFhemCommand - ist das Attribut fhemControlMode auf trigger gestellt, wird das Reading gesetzt sobald ein FHEM Befehl übersendet wird. Hierauf kann dann ein Notify triggern. Wird anstelle von trigger setControl als Wert für fhemControlMode eingestellt, wird das Reading nicht gestzt sondern der set Befehl sofort ausgeführt.&lt;br /&gt;
* receiveVoiceCommand - wird die Sprachsteuerung von AMAD aktiviert (set DEVICE activateVoiceInput) so wird der letzte erkannten Sprachbefehle in dieses Reading geschrieben.&lt;br /&gt;
* receiveVoiceDevice - Name des Devices von wo aus der letzte erkannte Sprachbefehl gesendet wurde&lt;br /&gt;
* state - Status der Bridge, open, closed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
* allowFrom - Regexp der erlaubten IP-Adressen oder Hostnamen. Wenn dieses Attribut gesetzt wurde, werden ausschließlich Verbindungen von diesen Adressen akzeptiert. Achtung: falls allowfrom nicht gesetzt ist, und keine gütige allowed Instanz definiert ist, und die Gegenstelle eine nicht lokale Adresse hat, dann wird die Verbindung abgewiesen. Folgende Adressen werden als local betrachtet: IPV4: 127/8, 10/8, 192.168/16, 172.16/10, 169.254/16, IPV6: ::1, fe80/10&lt;br /&gt;
* debugJSON - wenn auf 1 gesetzt, werden JSON Fehlermeldungen in Readings geschrieben. Siehe hierzu JSON_ERROR* unter Readings&lt;br /&gt;
* fhemControlMode - steuert die zulässige Art der Kontrolle von FHEM Devices. Du kannst über die Bridge auf 2 Arten FHEM Devices steuern. Entweder per direktem FHEM Befehl aus einem Flow heraus, oder als Sprachbefehl mittels Sprachsteuerung (set DEVICE activateVoiceInput)&lt;br /&gt;
** trigger - ist der Wert trigger gesetzt, werden alle an die Bridge gesendeten FHEM set Befehle in das Reading receiveFhemCommand geschrieben und können so mittels notify ausgeführt werden. Sprachsteuerung ist möglich, es werden Readings receiveVoice* gesetzt. Auf dem Androidgerät können bei Sprachsteuerung mehrere Sprachbefehle mittels &amp;quot;und&amp;quot; verknüpft/aneinander gereiht werden. Bsp: schalte die Lichtszene Abends an und schalte den Fernsehr an&lt;br /&gt;
** setControl - alle set Befehle welche mittels eines Flows über die Bridge gesendet werden, werden automatisch ausgeführt. Das triggern eines Readings ist nicht nötig. Die Steuerung mittels Sprache verhält sich wie beim Wert trigger&lt;br /&gt;
** thirdPartControl - verhält sich wie trigger, bei der Sprachsteuerung ist jedoch ein anreihen von Sprachbefehlen mittels &amp;quot;und&amp;quot; nicht möglich. Dient der Sprachsteuerung über Module anderer Modulautoren ((z.B. 39_TEERKO.pm)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= AMADDevice - Automagic Android Device =&lt;br /&gt;
Dieses Modul liefert, in Verbindung mit der Android APP Automagic, diverse Informationen von Android Geräten. Die AndroidAPP Automagic (welche nicht von mir stammt und 2.90 Euro kostet) funktioniert wie Tasker, ist aber bei weitem User freundlicher. &lt;br /&gt;
Mit etwas Einarbeitung können jegliche Informationen welche Automagic bereit stellt in FHEM angezeigt werden. Hierzu bedarf es lediglich eines eigenen Flows welcher seine Daten an die AMADDeviceCommBridge sendet. Das Modul gibt auch die Möglichkeit Androidgeräte zu steuern. &lt;br /&gt;
Für all diese Aktionen und Informationen wird auf dem Androidgerät &amp;quot;Automagic&amp;quot; und ein so genannter Flow benötigt. Die App ist über den Google PlayStore zu beziehen. Das benötigte Flowset bekommt man aus dem FHEM Verzeichnis. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Wie genau verwendet man nun AMADDevice? ===&lt;br /&gt;
* stelle sicher das als aller erstes die AMADCommBridge in FHEM definiert wurde&lt;br /&gt;
* installiere die App &amp;quot;Automagic Premium&amp;quot; aus dem PlayStore.&lt;br /&gt;
* installiere das Flowset 74_AMADDeviceautomagicFlowset$VERSION.xml aus dem Ordner $INSTALLFHEM/FHEM/lib/ auf dem Androidgerät&lt;br /&gt;
* aktiviere den Installationsassistanten Flow in Automagic. Wenn man nun Automagic in den Hintergrund schickt, z.B. Hometaste drücken, startet der Assistant und legt automatisch ein Device für das Androidgerät an.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ein AMADDevice Gerät von Hand anlegen. ===&lt;br /&gt;
&lt;br /&gt;
Define&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; AMADDevice &amp;lt;IP-ADRESSE&amp;gt; &amp;lt;AMAD_ID&amp;gt; IODev=&amp;lt;IODEVICE&amp;gt; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Beispiel ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define WandTabletWohnzimmer AMADDevice 192.168.0.23 123456 IODev=NAME_des_AMADCommBridge_Devices&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Fall wird ein AMADDevice von Hand angelegt. Die AMAD_ID, hier 123456, muß auch exakt so als globale Variable in Automagic eingetragen sein.&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
* airplanemode - Status des Flugmodus&lt;br /&gt;
* androidVersion - aktuell installierte Androidversion&lt;br /&gt;
* automagicState - Statusmeldungen von der AutomagicApp &#039;&#039;&#039;(Voraussetzung Android &amp;gt;4.3). Ist Android größer 4.3 vorhanden und im Reading steht &amp;quot;wird nicht unterstützt&amp;quot;, muß in den Androideinstellungen unter Ton und Benachrichtigungen -&amp;gt; Benachrichtigungszugriff ein Haken für Automagic gesetzt werden&#039;&#039;&#039;&lt;br /&gt;
* batteryHealth - Zustand der Battery (1=unbekannt, 2=gut, 3=Überhitzt, 4=tot, 5=Überspannung, 6=unbekannter Fehler, 7=kalt)&lt;br /&gt;
* batterytemperature - Temperatur der Batterie&lt;br /&gt;
* bluetooth - on/off, Bluetooth Status an oder aus&lt;br /&gt;
* checkActiveTask - Zustand einer zuvor definierten APP. 0=nicht aktiv oder nicht aktiv im Vordergrund, 1=aktiv im Vordergrund, &#039;&#039;&#039;siehe Hinweis unten&#039;&#039;&#039;&lt;br /&gt;
* connectedBTdevices - eine Liste der verbundenen Gerät&lt;br /&gt;
* connectedBTdevicesMAC - eine Liste der MAC Adressen aller verbundender BT Geräte&lt;br /&gt;
* currentMusicAlbum - aktuell abgespieltes Musikalbum des verwendeten Mediaplayers&lt;br /&gt;
* currentMusicApp - aktuell verwendeter Mediaplayer (Amazon Music, Google Play Music, Google Play Video, Spotify, YouTube, TuneIn Player, Aldi Life Music)&lt;br /&gt;
* currentMusicArtist - aktuell abgespielter Musikinterpret des verwendeten Mediaplayers&lt;br /&gt;
* currentMusicIcon - Cover vom aktuell abgespielten Album &#039;&#039;&#039;Noch nicht fertig implementiert&#039;&#039;&#039;&lt;br /&gt;
* currentMusicState - Status des aktuellen/zuletzt verwendeten Mediaplayers&lt;br /&gt;
* currentMusicTrack - aktuell abgespielter Musiktitel des verwendeten Mediaplayers&lt;br /&gt;
* daydream - on/off, Daydream gestartet oder nicht&lt;br /&gt;
* deviceState - Status des Androidgerätes. unknown, online, offline.&lt;br /&gt;
* doNotDisturb - aktueller Status des nicht stören Modus&lt;br /&gt;
* dockingState - undocked/docked Status ob sich das Gerät in einer Dockinstation befindet.&lt;br /&gt;
* flow_SetCommands - active/inactive, Status des SetCommands Flow&lt;br /&gt;
* flow_informations - active/inactive, Status des Informations Flow&lt;br /&gt;
* flowsetVersionAtDevice - aktuell installierte Flowsetversion auf dem Device&lt;br /&gt;
* incomingCallerName - Anrufername des eingehenden Anrufes&lt;br /&gt;
* incomingCallerNumber - Anrufernummer des eingehenden Anrufes&lt;br /&gt;
* incommingWhatsAppMessageFrom - letzte WhatsApp Nachricht&lt;br /&gt;
* incommingWhatsTelegramMessageFrom - letzte Telegram Nachricht&lt;br /&gt;
* intentRadioName - zuletzt gesrreamter Intent Radio Name&lt;br /&gt;
* intentRadioState - Status des IntentRadio Players&lt;br /&gt;
* keyguardSet - 0/1 Displaysperre gesetzt 0=nein 1=ja, bedeutet nicht das sie gerade aktiv ist&lt;br /&gt;
* lastSetCommandError - letzte Fehlermeldung vom set Befehl&lt;br /&gt;
* lastSetCommandState - letzter Status vom set Befehl, Befehl erfolgreich/nicht erfolgreich gesendet&lt;br /&gt;
* lastStatusRequestError - letzte Fehlermeldung vom statusRequest Befehl&lt;br /&gt;
* lastStatusRequestState - letzter Status vom statusRequest Befehl, Befehl erfolgreich/nicht erfolgreich gesendet&lt;br /&gt;
* nextAlarmDay - aktiver Alarmtag&lt;br /&gt;
* nextAlarmState - aktueller Status des &amp;quot;Androidinternen&amp;quot; Weckers&lt;br /&gt;
* nextAlarmTime - aktive Alarmzeit&lt;br /&gt;
* powerLevel - Status der Batterie in %&lt;br /&gt;
* powerPlugged - Netzteil angeschlossen? 0=NEIN, 1|2=JA&lt;br /&gt;
* screen - on locked/unlocked, off locked/unlocked gibt an ob der Bildschirm an oder aus ist und gleichzeitig gesperrt oder nicht gesperrt&lt;br /&gt;
* screenBrightness - Bildschirmhelligkeit von 0-255&lt;br /&gt;
* screenFullscreen - on/off, Vollbildmodus (An,Aus)&lt;br /&gt;
* screenOrientation - Landscape,Portrait, Bildschirmausrichtung (Horizontal,Vertikal)&lt;br /&gt;
* screenOrientationMode - auto/manual, Modus für die Ausrichtung (Automatisch, Manuell)&lt;br /&gt;
* state - aktueller Status&lt;br /&gt;
* userFlowState - aktueller Status eines Flows, festgelegt unter dem setUserFlowState Attribut&lt;br /&gt;
* volume - Media Lautstärkewert&lt;br /&gt;
* volumeNotification - Benachrichtigungs Lautstärke&lt;br /&gt;
&lt;br /&gt;
Beim Reading checkActivTask muß zuvor der Packagename der zu prüfenden App als Attribut checkActiveTask angegeben werden. Beispiel: attr Nexus10Wohnzimmer checkActiveTask com.android.chrome für den Chrome Browser.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Set ===&lt;br /&gt;
* activateVoiceInput - aktiviert die Spracheingabe&lt;br /&gt;
* bluetooth - on/off, aktiviert/deaktiviert Bluetooth&lt;br /&gt;
* clearNotificationBar - All,Automagic, löscht alle Meldungen oder nur die Automagic Meldungen in der Statusleiste&lt;br /&gt;
* closeCall - beendet einen laufenden Anruf&lt;br /&gt;
* currentFlowsetUpdate - fürt ein Flowsetupdate auf dem Device durch&lt;br /&gt;
* doNotDisturb - schaltet den nicht stören Modus, always immer stören, never niemals stören, alarmClockOnly nur Wecker darf stören, onlyImportant nur wichtige Störungen&lt;br /&gt;
* installFlowSource - installiert einen Flow auf dem Device, &amp;lt;u&amp;gt;das XML File muss unter /tmp/ liegen und die Endung xml haben. &amp;lt;b&amp;gt;Bsp:&amp;lt;/b&amp;gt; set TabletWohnzimmer installFlowSource WlanUebwerwachen.xml&amp;lt;/u&amp;gt;&lt;br /&gt;
* mediaAmazonMusic - play, stop, next, back ,steuert den Amazon Musik Mediaplayer&lt;br /&gt;
* mediaGoogleMusic - play, stop, next, back ,steuert den Google Play Musik Mediaplayer&lt;br /&gt;
* mediaSpotifyMusic - play, stop, next, back ,steuert den Spotify Mediaplayer&lt;br /&gt;
* mediaTuneinRadio - play, stop, next, back ,steuert den TuneIn Radio Mediaplayer&lt;br /&gt;
* mediaAldiMusic - play, stop, next, back ,steuert den Aldi Musik Mediaplayer&lt;br /&gt;
* mediaAudible - play, stop, next, back ,steuert den Audible Mediaplayer&lt;br /&gt;
* mediaYouTube - play, stop, next, back ,steuert den YouTube Mediaplayer&lt;br /&gt;
* mediaVlcPlayer - play, stop, next, back ,steuert den VLC Mediaplayer&lt;br /&gt;
* nextAlarmTime - setzt die Alarmzeit. gilt aber nur innerhalb der nächsten 24Std.&lt;br /&gt;
* openCall - ruft eine Nummer an und legt optional nach X Sekunden auf / set DEVICE openCall 01736458 10 / ruft die Nummer an und beendet den Anruf nach 10s&lt;br /&gt;
* screen - on/off/lock/unlock schaltet den Bildschirm ein/aus oder sperrt/entsperrt ihn&lt;br /&gt;
* screenBrightness - setzt die Bildschirmhelligkeit, von 0-255.&lt;br /&gt;
* screenMsg - versendet eine Bildschirmnachricht&lt;br /&gt;
* sendintent - sendet einen Intentstring Bsp: set $AMADDeviceDEVICE sendIntent org.smblott.intentradio.PLAY url http://stream.klassikradio.de/live/mp3-192/stream.klassikradio.de/play.m3u name Klassikradio, der erste Befehl ist die Aktion und der zweite das Extra. Es können immer zwei Extras mitgegeben werden.&lt;br /&gt;
* sendSMS - sendet eine SMS an eine bestimmte Telefonnummer. Bsp.: sendSMS Dies ist ein Test|555487263&lt;br /&gt;
* startDaydream - startet den Daydream&lt;br /&gt;
* statusRequest - Fordert einen neuen Statusreport beim Device an. Es können nicht von allen Readings per statusRequest die Daten geholt werden. Einige wenige geben nur bei Statusänderung ihren Status wieder.&lt;br /&gt;
* timer - setzt einen Timer innerhalb der als Standard definierten ClockAPP auf dem Device. Es können nur Sekunden angegeben werden.&lt;br /&gt;
* ttsMsg - versendet eine Nachricht welche als Sprachnachricht ausgegeben wird&lt;br /&gt;
* userFlowState - aktiviert oder deaktiviert einen oder mehrere Flows,&#039;&#039;&#039;set Nexus7Wohnzimmer Badezimmer vorheizen:inactive oder set Nexus7Wohnzimmer Badezimmer vorheizen,Nachtlicht Steven:inactive&#039;&#039;&#039;&lt;br /&gt;
* vibrate - lässt das Androidgerät vibrieren&lt;br /&gt;
* volume - setzt die Medialautstärke. Entweder die internen Lautsprecher oder sofern angeschlossen die Bluetoothlautsprecher und per Klinkenstecker angeschlossene Lautsprecher, + oder - vor dem Wert reduziert die aktuelle Lautstärke um den Wert. Der maximale Sliderwert kann über das Attribut setVolMax geregelt werden.&lt;br /&gt;
* volumeUp - erhöh;t die Lautstärke um den angegeben Wert im entsprechenden Attribut. Ist kein Attribut angegeben wird per default 2 genommen.&lt;br /&gt;
* volumeDown - reduziert die Lautstärke um den angegeben Wert im entsprechenden Attribut. Ist kein Attribut angegeben wird per default 2 genommen.&lt;br /&gt;
* volumeNotification - setzt die Benachrichtigungslautstärke.&lt;br /&gt;
&lt;br /&gt;
==== Set abhängig von gesetzten Attributen ====&lt;br /&gt;
* changetoBtDevice - wechselt zu einem anderen Bluetooth Gerät. Attribut setBluetoothDevice muß gesetzt sein. Siehe Hinweis unten!&lt;br /&gt;
* notifySndFile - spielt die angegebene Mediadatei auf dem Androidgerät ab. Die aufzurufende Mediadatei sollte sich im Ordner /storage/emulated/0/Notifications/ befinden. Ist dies nicht der Fall kann man über das Attribut setNotifySndFilePath einen Pfad vorgeben.&lt;br /&gt;
* openApp - öffnet eine ausgewählte App. Attribut setOpenApp&lt;br /&gt;
* openURL - öffnet eine URL im Standardbrowser, sofern kein anderer Browser über das Attribut setOpenUrlBrowser ausgewählt wurde. Bsp: attr Tablet setOpenUrlBrowser de.ozerov.fully|de.ozerov.fully.MainActivity, das erste ist der Package Name und das zweite der Class Name&lt;br /&gt;
* setAPSSID - setzt die AccessPoint SSID um ein WLAN sleep zu verhindern&lt;br /&gt;
* setScreenOnForTimer ändert die Zeit wie lange das Display an bleiben soll!&lt;br /&gt;
* screenFullscreen - on/off, (aktiviert/deaktiviert) den Vollbildmodus. Attribut setFullscreen&lt;br /&gt;
* screenLock - Sperrt den Bildschirm mit Pinabfrage. Attribut setScreenlockPIN - hier die Pin dafür eingeben. Erlaubt sind nur Zahlen. Es müßen mindestens 4, bis max 16 Zeichen verwendet werden.&lt;br /&gt;
* screenOrientation - Auto,Landscape,Portait, aktiviert die Bildschirmausrichtung (Automatisch,Horizontal,Vertikal). Attribut setScreenOrientation&lt;br /&gt;
* system - setzt Systembefehle ab (nur bei gerootetet Geräen). reboot,shutdown,airplanemodeON (kann nur aktiviert werden) Attribut root, in den Automagic Einstellungen muss &amp;quot;Root Funktion&amp;quot; gesetzt werden&lt;br /&gt;
* setNotifySndFilePath - setzt den korrekten Systempfad zur Notifydatei (default ist /storage/emulated/0/Notifications/&lt;br /&gt;
* setTtsMsgSpeed - setzt die Sprachgeschwindigkeit bei der Sprachausgabe(Werte zwischen 0.5 bis 4.0 in 0.5er Schritten) default ist 1.0&lt;br /&gt;
* setTtsMsgSpeed - setzt die Sprache bei der Sprachausgabe, de oder en (default ist de)&lt;br /&gt;
* setVolUpDownStep - setzt den Step für volumeUp und volumeDown&lt;br /&gt;
* setVolMax - setzt die maximale Volume Gr&amp;amp;uoml;e für den Slider&lt;br /&gt;
* setNotifyVolMax - setzt den maximalen Lautstärkewert für Benachrichtigungslautstärke für den Slider&lt;br /&gt;
* setRingSoundVolMax - setzt den maximalen Lautstärkewert für Klingellautstärke für den Slider&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Um openApp verwenden zu können, muss als Attribut der Package Name der App angegeben werden. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Um zwischen Bluetoothgeräten wechseln zu können, muß das Attribut setBluetoothDevice mit folgender Syntax gesetzt werden. attr &amp;lt;DEVICE&amp;gt; BTdeviceName1|MAC,BTDeviceName2|MAC Es muss zwingend darauf geachtet werden das beim BTdeviceName kein Leerzeichen vorhanden ist. Am besten zusammen oder mit Unterstrich. Achtet bei der MAC darauf das Ihr wirklich nach jeder zweiten Zahl auch einen : drin habt&lt;br /&gt;
&lt;br /&gt;
** &#039;&#039;&#039;Beispiel: attr Nexus10Wohnzimmer setBluetoothDevice Logitech_BT_Adapter|AB:12:CD:34:EF:32,Anker_A3565|GH:56:IJ:78:KL:76&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== state ===&lt;br /&gt;
* initialized - Ist der Status kurz nach einem define.&lt;br /&gt;
* active - die Geräteinstanz ist im aktiven Status.&lt;br /&gt;
* disabled - die Geräteinstanz wurde über das Attribut disable deaktiviert&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Anwendungsbeispiele==&lt;br /&gt;
=== Lademanagement ===&lt;br /&gt;
Ich habe die Ladegeräte für meine Androidgeräte an Funkschaltsteckdosen. ein DOIF schaltet bei unter 30% die Steckdose ein und bei über 90% wieder aus.&lt;br /&gt;
&lt;br /&gt;
Hier mal ein einfaches DOIF Beispiel für ein Lademanagment&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
... DOIF ([Nexus5Handy:powerLevel] &amp;lt; 30) (set LadenetzteilNexus5Handy:FILTER=STATE=off on) DOELSEIF ([Nexus5Handy:powerLevel] &amp;gt; 90) (set LadenetzteilNexus5Handy:FILTER=STATE=on off) DOELSE&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Wecker ===&lt;br /&gt;
Morgens lasse ich mich über mein Tablet im Schlafzimmer mit Musik wecken. Verwendet wird hierzu der wakeuptimer des RESIDENTS Modules. Das abspielen stoppe ich dann von Hand. Danach erfolgt noch eine Ansage wie das Wetter gerade ist und wird.&lt;br /&gt;
&lt;br /&gt;
=== Mediacenter ===&lt;br /&gt;
Mein 10&amp;quot; Tablet im Wohnzimmer ist Mediaplayer für das Wohnzimmer mit Bluetoothlautsprechern. Die Lautstärke wird automatisch runter gesetzt wenn die Fritzbox einen Anruf auf das Wohnzimmer Handgerät signalisiert.&lt;br /&gt;
&lt;br /&gt;
=== Sprachbefehl - Abfragen von Zuständen diverser Sensoren ===&lt;br /&gt;
Wenn ich die Spracheingabe aktiviere und nach der Temperatur im Wohnzimmer frage, bekomme ich diese angesagt.&lt;br /&gt;
&lt;br /&gt;
Der Teil im Feld Daten ist ein klassisches RadingsVal, halt nur ohne Komma und ohne Anführungszeichen&lt;br /&gt;
&lt;br /&gt;
WIRD GERADE ÜBERARBEITET&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Schaltbefehle vom Androidgerät an FHEM senden ===&lt;br /&gt;
Hierfür richte bitte einen eigen Flow ein. Wie das genau geht, verrät Dir die Hilfe.&lt;br /&gt;
Um einen Schaltbefehl für FHEM zu erstellen, folgt nach dem Trigger eine Aktion als Script (Aktion Type: Script). Hier trägst Du folgendes ein&lt;br /&gt;
&lt;br /&gt;
setcmd = &amp;quot;LichtWohnzimmerLampeRechts on&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;set&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In der ersten Zeile wird also der Schaltbefehl in der Variablem setcmd eingetragen und in der zweiten Zeile der FHEM Befehl in der Variablen fhemcmd.&lt;br /&gt;
&lt;br /&gt;
Danach müsst Ihr nur noch in einer weiteren Aktion den Flow &amp;quot;Send Data to AMADCommBridge&amp;quot; ausführen (Aktion Type: Flows ausführen). Die Aktion sollte bereits in Eurer Liste Vorhanden sein.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Screenshot_20160717-134948.png|200px]]&lt;br /&gt;
[[Datei:Screenshot 17.07.2016 1-50-27.png|200px]]&lt;br /&gt;
&lt;br /&gt;
Nun sollte Lampe1 angeschalten werden wenn der Flow ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Lister aller Variablen für die AMADCommandBridge ===&lt;br /&gt;
fhemcmd Variable &lt;br /&gt;
* Wert &amp;quot;set&amp;quot; - Variable für den Schaltbefehl &#039;setcmd&#039;&lt;br /&gt;
* Wert &amp;quot;setreading&amp;quot; - Variable für die Readingswerte &#039;fhemdata&#039;&lt;br /&gt;
* &amp;quot;readingsval&amp;quot; - Variable für die Abfragewerte &#039;readingsvalcmd&#039;&lt;br /&gt;
* &amp;quot;fhemfunc&amp;quot; - Variable für den Funktionsnamen &#039;fhemsub&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele für Skriptinhalte:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Schalten einer Lampe&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
setcmd = &amp;quot;LichtWohnzimmerLampeRechts on&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;set&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Status eines Device abfragen&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
readingsvalcmd = &amp;quot;DEVICE READING DEFAULT&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;readingsval&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Rückgabevariable welche dann weiter verarbeitet werden kann, heißt &#039;&#039;&#039;respreadingsval&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Aufruf einer 99_myUtils Subroutine&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
fhemsub = &amp;quot;mySub()&amp;quot;; oder natürlich auch &amp;quot;mySub(&#039;was_auch_immer&#039;)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;fhemfunc&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Rückgabevariable welche dann weiter verarbeitet werden kann, heißt &#039;&#039;&#039;respfhemfunc&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Bekannte Meldungen/Hinweise/Probleme ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn auf dem Android-Gerät die Fehlermeldung &#039;Accessibility service not running&#039; von Automagic kommt, oder im FHEM das reading state  &#039;Flow Informations mit Fehler beendet&#039; steht, dann muss der Accessibility Service auf dem Android-Device aktiviert werden: Einstellungen --&amp;gt; Bedienungshilfen --&amp;gt; Automagic Premium. Hier muss der Schalter auf &#039;an&#039; stehen. Sollte dies der Fall sein, hilft u.U. ein kurzes Aus- und wieder Einschalten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Gerät wird oft als offline angezeigt und es können keine set Befehle abgesetzt werden.&lt;br /&gt;
Mit der AMAD Version 2.2 hielt eine neue Behandlung des deviceState Readings Einzug. Das Reading stellt nun den tatsächlichen Status des Gerätes gegenüber FHEM da. Bei vielen Android 6 Geräten kommt es aber auf Grund vom DeepSleep Modus zum wegfall der WLAN Verbindung. Hier hilft die neue KeepAlive Funktion in AMAD. Dafür muß lediglich unter &lt;br /&gt;
* Einstellungen --&amp;gt; Akku --&amp;gt; oben auf die drei Punkte - Akku Leistungsoptimierung --&amp;gt; alle Apps und dann Automagic auswählen und &amp;quot;Nicht optimieren&amp;quot;&lt;br /&gt;
ausgewählt werden und in FHEM für das Device das Attribut setAPSSID gesetzt werden. Alles andere macht das Modul selbst.&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=AMAD&amp;diff=22017</id>
		<title>AMAD</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=AMAD&amp;diff=22017"/>
		<updated>2017-08-01T10:13:14Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: /* Anwendungsbeispiele */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuern von Adroidgeräten und Anzeige von bestimmten Informationen dieser Geräte&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Sonstige Systeme&lt;br /&gt;
|ModTechName=73_AMADCommBridge.pm, 74_AMADDevice.pm&lt;br /&gt;
|ModOwner=CoolTux &amp;lt;br /&amp;gt;([http://forum.fhem.de/index.php?action=profile;u=13684 Forum] / [[Benutzer:CoolTux|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= AMAD 4.0 [AMADNG] =&lt;br /&gt;
== 73_AMADCommBridge / 74_AMADDevice ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Vorwort =&lt;br /&gt;
=== Warum AMADNG ===&lt;br /&gt;
Nach fast 6 Monaten Entwicklungszeit wurde die neuste AMAD Version am 24.07.2017 offiziell frei gegeben. Diesmal lagen mir mehrere Dinge am Herzen.&lt;br /&gt;
In erster Linie wollte ich eine softwareseitige Trennung der AMADCommBridge vom eigentlichen Android Device. Daher ist die neue Version ein zweistufiges Modul geworden.&lt;br /&gt;
Im Laufe der Entwicklung kamen auch andere Anforderungen hinzu, welche ich dann fähig war um zu setzen. Eine dieser Anforderungen war eine einfachere und besser funktionierende Installation. Raus gekommen ist ein Android Installationsassistant.&lt;br /&gt;
Mit ihm wird auf einfache Art und Weise direkt per Sprachführung und Eingabedialogen Automagic für AMAD konfiguriert und das Device in FHEM automatisch erstellt. Autocreate!&lt;br /&gt;
&lt;br /&gt;
= Vorstellung =&lt;br /&gt;
Dieses 2-stufige Modul liefert, &#039;&#039;&#039;in Verbindung mit der Android APP Automagic&#039;&#039;&#039;, diverse Informationen von Android Geräten. &lt;br /&gt;
Die AndroidAPP Automagic (welche nicht von mir stammt und 2.90 Euro kostet) funktioniert wie Tasker, ist aber bei weitem User freundlicher.&lt;br /&gt;
&lt;br /&gt;
=== Features / Funktionen ===&lt;br /&gt;
Im Auslieferiungszustand werden folgende Zustände dargestellt:&lt;br /&gt;
* installierte Android Version&lt;br /&gt;
* Zustand von Automagic auf dem Gerät&lt;br /&gt;
* Spracheingabe&lt;br /&gt;
* Bluetooth An/Aus&lt;br /&gt;
* Zustand einer definierten App (läuft aktiv im Vordergrund oder nicht?)&lt;br /&gt;
* verbundene Bluetoothgeräte, inklusive deren MAC Adresse&lt;br /&gt;
* aktuell abgespieltes Musikalbum des verwendeten Mediaplayers&lt;br /&gt;
* aktuell abgespielter Musikinterpret des verwendeten Mediaplayers&lt;br /&gt;
* aktuell abgespielter Musiktitel des verwendeten Mediaplayers&lt;br /&gt;
* Status des Androidgerätes - Online/Offline&lt;br /&gt;
* nächster Alarmtag&lt;br /&gt;
* nächste Alarmzeit&lt;br /&gt;
* Batteriestatus in %&lt;br /&gt;
* Ladestatus - Netztei angeschlossen / nicht angeschlossen&lt;br /&gt;
* Bildschirmstatus An/Aus&lt;br /&gt;
* Bildschirmhelligkeit&lt;br /&gt;
* Vollbildmodus An/Aus&lt;br /&gt;
* Bildschirmausrichtung Auto/Landscape/Portrait&lt;br /&gt;
* Standardlautstärke&lt;br /&gt;
* Media Lautstärke&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Mit etwas Einarbeitung können jegliche Informationen welche Automagic bereit stellt, in FHEM angezeigt werden. Hierzu bedarf es lediglich eines eigenen Flows welcher seine Daten an die AMADCommBridge sendet. Das Modul gibt auch die Möglichkeit Androidgeräte zu steuern.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= AMADCommBridge - Kommunikationsbrücke für alle AMAD Geräte =&lt;br /&gt;
Dieses Modul ist das Ausgangsmodul zur erfolgreichen Integration von Androidgeräten in FHEM. Es stellt ferner eine Verbindungsebene zwischen AMAD unterstützten Geräten und FHEM zur Verfügung. Alle Kommunikation zwischen AMAD Android und FHEM läuft über diese Schnittstelle.&lt;br /&gt;
Daher erfolgt die Ersteinrichtung eines AMAD Devices auch genau über diese Modulinstanz. &lt;br /&gt;
&lt;br /&gt;
Damit erfolgreich ein Androidgerät in FHEM eingerichtet werden kann, muss im ersten Schritt ein AMADCommBridge Device angelegt werden.&lt;br /&gt;
&lt;br /&gt;
=== Definition in FHEM ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; AMADCommBridge&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== Beispiel ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define AMADBridge AMADCommBridge&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Anweisung erstellt ein neues AMADCommBridge Device Namens AMADBridge.&lt;br /&gt;
&lt;br /&gt;
Im folgenden muß lediglich das Flowset auf dem Android Gerät installiert werden und der Flow &#039;First Run Assistent&#039; ausgeführt werden. (einfach den Homebutton drücken)&lt;br /&gt;
Der Assistent geleitet Dich dann durch die Einrichtung Deines AMAD Gerätes und sorgt dafür das am Ende des Installationsprozess das Androidgerät als AMAD Device in FHEM angelegt wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
* JSON_ERROR - JSON Fehlermeldung welche von Perl gemeldet wird&lt;br /&gt;
* JSON_ERROR_STRING - der String welcher die JSON Fehlermeldung verursacht hat&lt;br /&gt;
* fhemServerIP - die Ip-Adresse des FHEM Servers, wird vom Modul auf Basis des JSON Strings vom Installationsassistenten gesetzt. Kann aber auch mittels set Befehles vom User gesetzt werden&lt;br /&gt;
* receiveFhemCommand - ist das Attribut fhemControlMode auf trigger gestellt, wird das Reading gesetzt sobald ein FHEM Befehl übersendet wird. Hierauf kann dann ein Notify triggern. Wird anstelle von trigger setControl als Wert für fhemControlMode eingestellt, wird das Reading nicht gestzt sondern der set Befehl sofort ausgeführt.&lt;br /&gt;
* receiveVoiceCommand - wird die Sprachsteuerung von AMAD aktiviert (set DEVICE activateVoiceInput) so wird der letzte erkannten Sprachbefehle in dieses Reading geschrieben.&lt;br /&gt;
* receiveVoiceDevice - Name des Devices von wo aus der letzte erkannte Sprachbefehl gesendet wurde&lt;br /&gt;
* state - Status der Bridge, open, closed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
* allowFrom - Regexp der erlaubten IP-Adressen oder Hostnamen. Wenn dieses Attribut gesetzt wurde, werden ausschließlich Verbindungen von diesen Adressen akzeptiert. Achtung: falls allowfrom nicht gesetzt ist, und keine gütige allowed Instanz definiert ist, und die Gegenstelle eine nicht lokale Adresse hat, dann wird die Verbindung abgewiesen. Folgende Adressen werden als local betrachtet: IPV4: 127/8, 10/8, 192.168/16, 172.16/10, 169.254/16, IPV6: ::1, fe80/10&lt;br /&gt;
* debugJSON - wenn auf 1 gesetzt, werden JSON Fehlermeldungen in Readings geschrieben. Siehe hierzu JSON_ERROR* unter Readings&lt;br /&gt;
* fhemControlMode - steuert die zulässige Art der Kontrolle von FHEM Devices. Du kannst über die Bridge auf 2 Arten FHEM Devices steuern. Entweder per direktem FHEM Befehl aus einem Flow heraus, oder als Sprachbefehl mittels Sprachsteuerung (set DEVICE activateVoiceInput)&lt;br /&gt;
** trigger - ist der Wert trigger gesetzt, werden alle an die Bridge gesendeten FHEM set Befehle in das Reading receiveFhemCommand geschrieben und können so mittels notify ausgeführt werden. Sprachsteuerung ist möglich, es werden Readings receiveVoice* gesetzt. Auf dem Androidgerät können bei Sprachsteuerung mehrere Sprachbefehle mittels &amp;quot;und&amp;quot; verknüpft/aneinander gereiht werden. Bsp: schalte die Lichtszene Abends an und schalte den Fernsehr an&lt;br /&gt;
** setControl - alle set Befehle welche mittels eines Flows über die Bridge gesendet werden, werden automatisch ausgeführt. Das triggern eines Readings ist nicht nötig. Die Steuerung mittels Sprache verhält sich wie beim Wert trigger&lt;br /&gt;
** thirdPartControl - verhält sich wie trigger, bei der Sprachsteuerung ist jedoch ein anreihen von Sprachbefehlen mittels &amp;quot;und&amp;quot; nicht möglich. Dient der Sprachsteuerung über Module anderer Modulautoren ((z.B. 39_TEERKO.pm)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= AMADDevice - Automagic Android Device =&lt;br /&gt;
Dieses Modul liefert, in Verbindung mit der Android APP Automagic, diverse Informationen von Android Geräten. Die AndroidAPP Automagic (welche nicht von mir stammt und 2.90 Euro kostet) funktioniert wie Tasker, ist aber bei weitem User freundlicher. &lt;br /&gt;
Mit etwas Einarbeitung können jegliche Informationen welche Automagic bereit stellt in FHEM angezeigt werden. Hierzu bedarf es lediglich eines eigenen Flows welcher seine Daten an die AMADDeviceCommBridge sendet. Das Modul gibt auch die Möglichkeit Androidgeräte zu steuern. &lt;br /&gt;
Für all diese Aktionen und Informationen wird auf dem Androidgerät &amp;quot;Automagic&amp;quot; und ein so genannter Flow benötigt. Die App ist über den Google PlayStore zu beziehen. Das benötigte Flowset bekommt man aus dem FHEM Verzeichnis. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Wie genau verwendet man nun AMADDevice? ===&lt;br /&gt;
* stelle sicher das als aller erstes die AMADCommBridge in FHEM definiert wurde&lt;br /&gt;
* installiere die App &amp;quot;Automagic Premium&amp;quot; aus dem PlayStore.&lt;br /&gt;
* installiere das Flowset 74_AMADDeviceautomagicFlowset$VERSION.xml aus dem Ordner $INSTALLFHEM/FHEM/lib/ auf dem Androidgerät&lt;br /&gt;
* aktiviere den Installationsassistanten Flow in Automagic. Wenn man nun Automagic in den Hintergrund schickt, z.B. Hometaste drücken, startet der Assistant und legt automatisch ein Device für das Androidgerät an.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ein AMADDevice Gerät von Hand anlegen. ===&lt;br /&gt;
&lt;br /&gt;
Define&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; AMADDevice &amp;lt;IP-ADRESSE&amp;gt; &amp;lt;AMAD_ID&amp;gt; IODev=&amp;lt;IODEVICE&amp;gt; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Beispiel ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define WandTabletWohnzimmer AMADDevice 192.168.0.23 123456 IODev=NAME_des_AMADCommBridge_Devices&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Fall wird ein AMADDevice von Hand angelegt. Die AMAD_ID, hier 123456, muß auch exakt so als globale Variable in Automagic eingetragen sein.&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
* airplanemode - Status des Flugmodus&lt;br /&gt;
* androidVersion - aktuell installierte Androidversion&lt;br /&gt;
* automagicState - Statusmeldungen von der AutomagicApp &#039;&#039;&#039;(Voraussetzung Android &amp;gt;4.3). Ist Android größer 4.3 vorhanden und im Reading steht &amp;quot;wird nicht unterstützt&amp;quot;, muß in den Androideinstellungen unter Ton und Benachrichtigungen -&amp;gt; Benachrichtigungszugriff ein Haken für Automagic gesetzt werden&#039;&#039;&#039;&lt;br /&gt;
* batteryHealth - Zustand der Battery (1=unbekannt, 2=gut, 3=Überhitzt, 4=tot, 5=Überspannung, 6=unbekannter Fehler, 7=kalt)&lt;br /&gt;
* batterytemperature - Temperatur der Batterie&lt;br /&gt;
* bluetooth - on/off, Bluetooth Status an oder aus&lt;br /&gt;
* checkActiveTask - Zustand einer zuvor definierten APP. 0=nicht aktiv oder nicht aktiv im Vordergrund, 1=aktiv im Vordergrund, &#039;&#039;&#039;siehe Hinweis unten&#039;&#039;&#039;&lt;br /&gt;
* connectedBTdevices - eine Liste der verbundenen Gerät&lt;br /&gt;
* connectedBTdevicesMAC - eine Liste der MAC Adressen aller verbundender BT Geräte&lt;br /&gt;
* currentMusicAlbum - aktuell abgespieltes Musikalbum des verwendeten Mediaplayers&lt;br /&gt;
* currentMusicApp - aktuell verwendeter Mediaplayer (Amazon Music, Google Play Music, Google Play Video, Spotify, YouTube, TuneIn Player, Aldi Life Music)&lt;br /&gt;
* currentMusicArtist - aktuell abgespielter Musikinterpret des verwendeten Mediaplayers&lt;br /&gt;
* currentMusicIcon - Cover vom aktuell abgespielten Album &#039;&#039;&#039;Noch nicht fertig implementiert&#039;&#039;&#039;&lt;br /&gt;
* currentMusicState - Status des aktuellen/zuletzt verwendeten Mediaplayers&lt;br /&gt;
* currentMusicTrack - aktuell abgespielter Musiktitel des verwendeten Mediaplayers&lt;br /&gt;
* daydream - on/off, Daydream gestartet oder nicht&lt;br /&gt;
* deviceState - Status des Androidgerätes. unknown, online, offline.&lt;br /&gt;
* doNotDisturb - aktueller Status des nicht stören Modus&lt;br /&gt;
* dockingState - undocked/docked Status ob sich das Gerät in einer Dockinstation befindet.&lt;br /&gt;
* flow_SetCommands - active/inactive, Status des SetCommands Flow&lt;br /&gt;
* flow_informations - active/inactive, Status des Informations Flow&lt;br /&gt;
* flowsetVersionAtDevice - aktuell installierte Flowsetversion auf dem Device&lt;br /&gt;
* incomingCallerName - Anrufername des eingehenden Anrufes&lt;br /&gt;
* incomingCallerNumber - Anrufernummer des eingehenden Anrufes&lt;br /&gt;
* incommingWhatsAppMessageFrom - letzte WhatsApp Nachricht&lt;br /&gt;
* incommingWhatsTelegramMessageFrom - letzte Telegram Nachricht&lt;br /&gt;
* intentRadioName - zuletzt gesrreamter Intent Radio Name&lt;br /&gt;
* intentRadioState - Status des IntentRadio Players&lt;br /&gt;
* keyguardSet - 0/1 Displaysperre gesetzt 0=nein 1=ja, bedeutet nicht das sie gerade aktiv ist&lt;br /&gt;
* lastSetCommandError - letzte Fehlermeldung vom set Befehl&lt;br /&gt;
* lastSetCommandState - letzter Status vom set Befehl, Befehl erfolgreich/nicht erfolgreich gesendet&lt;br /&gt;
* lastStatusRequestError - letzte Fehlermeldung vom statusRequest Befehl&lt;br /&gt;
* lastStatusRequestState - letzter Status vom statusRequest Befehl, Befehl erfolgreich/nicht erfolgreich gesendet&lt;br /&gt;
* nextAlarmDay - aktiver Alarmtag&lt;br /&gt;
* nextAlarmState - aktueller Status des &amp;quot;Androidinternen&amp;quot; Weckers&lt;br /&gt;
* nextAlarmTime - aktive Alarmzeit&lt;br /&gt;
* powerLevel - Status der Batterie in %&lt;br /&gt;
* powerPlugged - Netzteil angeschlossen? 0=NEIN, 1|2=JA&lt;br /&gt;
* screen - on locked/unlocked, off locked/unlocked gibt an ob der Bildschirm an oder aus ist und gleichzeitig gesperrt oder nicht gesperrt&lt;br /&gt;
* screenBrightness - Bildschirmhelligkeit von 0-255&lt;br /&gt;
* screenFullscreen - on/off, Vollbildmodus (An,Aus)&lt;br /&gt;
* screenOrientation - Landscape,Portrait, Bildschirmausrichtung (Horizontal,Vertikal)&lt;br /&gt;
* screenOrientationMode - auto/manual, Modus für die Ausrichtung (Automatisch, Manuell)&lt;br /&gt;
* state - aktueller Status&lt;br /&gt;
* userFlowState - aktueller Status eines Flows, festgelegt unter dem setUserFlowState Attribut&lt;br /&gt;
* volume - Media Lautstärkewert&lt;br /&gt;
* volumeNotification - Benachrichtigungs Lautstärke&lt;br /&gt;
&lt;br /&gt;
Beim Reading checkActivTask muß zuvor der Packagename der zu prüfenden App als Attribut checkActiveTask angegeben werden. Beispiel: attr Nexus10Wohnzimmer checkActiveTask com.android.chrome für den Chrome Browser.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Set ===&lt;br /&gt;
* activateVoiceInput - aktiviert die Spracheingabe&lt;br /&gt;
* bluetooth - on/off, aktiviert/deaktiviert Bluetooth&lt;br /&gt;
* clearNotificationBar - All,Automagic, löscht alle Meldungen oder nur die Automagic Meldungen in der Statusleiste&lt;br /&gt;
* closeCall - beendet einen laufenden Anruf&lt;br /&gt;
* currentFlowsetUpdate - fürt ein Flowsetupdate auf dem Device durch&lt;br /&gt;
* doNotDisturb - schaltet den nicht stören Modus, always immer stören, never niemals stören, alarmClockOnly nur Wecker darf stören, onlyImportant nur wichtige Störungen&lt;br /&gt;
* installFlowSource - installiert einen Flow auf dem Device, &amp;lt;u&amp;gt;das XML File muss unter /tmp/ liegen und die Endung xml haben. &amp;lt;b&amp;gt;Bsp:&amp;lt;/b&amp;gt; set TabletWohnzimmer installFlowSource WlanUebwerwachen.xml&amp;lt;/u&amp;gt;&lt;br /&gt;
* mediaAmazonMusic - play, stop, next, back ,steuert den Amazon Musik Mediaplayer&lt;br /&gt;
* mediaGoogleMusic - play, stop, next, back ,steuert den Google Play Musik Mediaplayer&lt;br /&gt;
* mediaSpotifyMusic - play, stop, next, back ,steuert den Spotify Mediaplayer&lt;br /&gt;
* mediaTuneinRadio - play, stop, next, back ,steuert den TuneIn Radio Mediaplayer&lt;br /&gt;
* mediaAldiMusic - play, stop, next, back ,steuert den Aldi Musik Mediaplayer&lt;br /&gt;
* mediaAudible - play, stop, next, back ,steuert den Audible Mediaplayer&lt;br /&gt;
* mediaYouTube - play, stop, next, back ,steuert den YouTube Mediaplayer&lt;br /&gt;
* mediaVlcPlayer - play, stop, next, back ,steuert den VLC Mediaplayer&lt;br /&gt;
* nextAlarmTime - setzt die Alarmzeit. gilt aber nur innerhalb der nächsten 24Std.&lt;br /&gt;
* openCall - ruft eine Nummer an und legt optional nach X Sekunden auf / set DEVICE openCall 01736458 10 / ruft die Nummer an und beendet den Anruf nach 10s&lt;br /&gt;
* screen - on/off/lock/unlock schaltet den Bildschirm ein/aus oder sperrt/entsperrt ihn&lt;br /&gt;
* screenBrightness - setzt die Bildschirmhelligkeit, von 0-255.&lt;br /&gt;
* screenMsg - versendet eine Bildschirmnachricht&lt;br /&gt;
* sendintent - sendet einen Intentstring Bsp: set $AMADDeviceDEVICE sendIntent org.smblott.intentradio.PLAY url http://stream.klassikradio.de/live/mp3-192/stream.klassikradio.de/play.m3u name Klassikradio, der erste Befehl ist die Aktion und der zweite das Extra. Es können immer zwei Extras mitgegeben werden.&lt;br /&gt;
* sendSMS - sendet eine SMS an eine bestimmte Telefonnummer. Bsp.: sendSMS Dies ist ein Test|555487263&lt;br /&gt;
* startDaydream - startet den Daydream&lt;br /&gt;
* statusRequest - Fordert einen neuen Statusreport beim Device an. Es können nicht von allen Readings per statusRequest die Daten geholt werden. Einige wenige geben nur bei Statusänderung ihren Status wieder.&lt;br /&gt;
* timer - setzt einen Timer innerhalb der als Standard definierten ClockAPP auf dem Device. Es können nur Sekunden angegeben werden.&lt;br /&gt;
* ttsMsg - versendet eine Nachricht welche als Sprachnachricht ausgegeben wird&lt;br /&gt;
* userFlowState - aktiviert oder deaktiviert einen oder mehrere Flows,&#039;&#039;&#039;set Nexus7Wohnzimmer Badezimmer vorheizen:inactive oder set Nexus7Wohnzimmer Badezimmer vorheizen,Nachtlicht Steven:inactive&#039;&#039;&#039;&lt;br /&gt;
* vibrate - lässt das Androidgerät vibrieren&lt;br /&gt;
* volume - setzt die Medialautstärke. Entweder die internen Lautsprecher oder sofern angeschlossen die Bluetoothlautsprecher und per Klinkenstecker angeschlossene Lautsprecher, + oder - vor dem Wert reduziert die aktuelle Lautstärke um den Wert. Der maximale Sliderwert kann über das Attribut setVolMax geregelt werden.&lt;br /&gt;
* volumeUp - erhöh;t die Lautstärke um den angegeben Wert im entsprechenden Attribut. Ist kein Attribut angegeben wird per default 2 genommen.&lt;br /&gt;
* volumeDown - reduziert die Lautstärke um den angegeben Wert im entsprechenden Attribut. Ist kein Attribut angegeben wird per default 2 genommen.&lt;br /&gt;
* volumeNotification - setzt die Benachrichtigungslautstärke.&lt;br /&gt;
&lt;br /&gt;
==== Set abhängig von gesetzten Attributen ====&lt;br /&gt;
* changetoBtDevice - wechselt zu einem anderen Bluetooth Gerät. Attribut setBluetoothDevice muß gesetzt sein. Siehe Hinweis unten!&lt;br /&gt;
* notifySndFile - spielt die angegebene Mediadatei auf dem Androidgerät ab. Die aufzurufende Mediadatei sollte sich im Ordner /storage/emulated/0/Notifications/ befinden. Ist dies nicht der Fall kann man über das Attribut setNotifySndFilePath einen Pfad vorgeben.&lt;br /&gt;
* openApp - öffnet eine ausgewählte App. Attribut setOpenApp&lt;br /&gt;
* openURL - öffnet eine URL im Standardbrowser, sofern kein anderer Browser über das Attribut setOpenUrlBrowser ausgewählt wurde. Bsp: attr Tablet setOpenUrlBrowser de.ozerov.fully|de.ozerov.fully.MainActivity, das erste ist der Package Name und das zweite der Class Name&lt;br /&gt;
* setAPSSID - setzt die AccessPoint SSID um ein WLAN sleep zu verhindern&lt;br /&gt;
* setScreenOnForTimer ändert die Zeit wie lange das Display an bleiben soll!&lt;br /&gt;
* screenFullscreen - on/off, (aktiviert/deaktiviert) den Vollbildmodus. Attribut setFullscreen&lt;br /&gt;
* screenLock - Sperrt den Bildschirm mit Pinabfrage. Attribut setScreenlockPIN - hier die Pin dafür eingeben. Erlaubt sind nur Zahlen. Es müßen mindestens 4, bis max 16 Zeichen verwendet werden.&lt;br /&gt;
* screenOrientation - Auto,Landscape,Portait, aktiviert die Bildschirmausrichtung (Automatisch,Horizontal,Vertikal). Attribut setScreenOrientation&lt;br /&gt;
* system - setzt Systembefehle ab (nur bei gerootetet Geräen). reboot,shutdown,airplanemodeON (kann nur aktiviert werden) Attribut root, in den Automagic Einstellungen muss &amp;quot;Root Funktion&amp;quot; gesetzt werden&lt;br /&gt;
* setNotifySndFilePath - setzt den korrekten Systempfad zur Notifydatei (default ist /storage/emulated/0/Notifications/&lt;br /&gt;
* setTtsMsgSpeed - setzt die Sprachgeschwindigkeit bei der Sprachausgabe(Werte zwischen 0.5 bis 4.0 in 0.5er Schritten) default ist 1.0&lt;br /&gt;
* setTtsMsgSpeed - setzt die Sprache bei der Sprachausgabe, de oder en (default ist de)&lt;br /&gt;
* setVolUpDownStep - setzt den Step für volumeUp und volumeDown&lt;br /&gt;
* setVolMax - setzt die maximale Volume Gr&amp;amp;uoml;e für den Slider&lt;br /&gt;
* setNotifyVolMax - setzt den maximalen Lautstärkewert für Benachrichtigungslautstärke für den Slider&lt;br /&gt;
* setRingSoundVolMax - setzt den maximalen Lautstärkewert für Klingellautstärke für den Slider&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Um openApp verwenden zu können, muss als Attribut der Package Name der App angegeben werden. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Um zwischen Bluetoothgeräten wechseln zu können, muß das Attribut setBluetoothDevice mit folgender Syntax gesetzt werden. attr &amp;lt;DEVICE&amp;gt; BTdeviceName1|MAC,BTDeviceName2|MAC Es muss zwingend darauf geachtet werden das beim BTdeviceName kein Leerzeichen vorhanden ist. Am besten zusammen oder mit Unterstrich. Achtet bei der MAC darauf das Ihr wirklich nach jeder zweiten Zahl auch einen : drin habt&lt;br /&gt;
&lt;br /&gt;
** &#039;&#039;&#039;Beispiel: attr Nexus10Wohnzimmer setBluetoothDevice Logitech_BT_Adapter|AB:12:CD:34:EF:32,Anker_A3565|GH:56:IJ:78:KL:76&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== state ===&lt;br /&gt;
* initialized - Ist der Status kurz nach einem define.&lt;br /&gt;
* active - die Geräteinstanz ist im aktiven Status.&lt;br /&gt;
* disabled - die Geräteinstanz wurde über das Attribut disable deaktiviert&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Anwendungsbeispiele==&lt;br /&gt;
=== Lademanagement ===&lt;br /&gt;
Ich habe die Ladegeräte für meine Androidgeräte an Funkschaltsteckdosen. ein DOIF schaltet bei unter 30% die Steckdose ein und bei über 90% wieder aus.&lt;br /&gt;
&lt;br /&gt;
Hier mal ein einfaches DOIF Beispiel für ein Lademanagment&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
... DOIF ([Nexus5Handy:powerLevel] &amp;lt; 30) (set LadenetzteilNexus5Handy:FILTER=STATE=off on) DOELSEIF ([Nexus5Handy:powerLevel] &amp;gt; 90) (set LadenetzteilNexus5Handy:FILTER=STATE=on off) DOELSE&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Wecker ===&lt;br /&gt;
Morgens lasse ich mich über mein Tablet im Schlafzimmer mit Musik wecken. Verwendet wird hierzu der wakeuptimer des RESIDENTS Modules. Das abspielen stoppe ich dann von Hand. Danach erfolgt noch eine Ansage wie das Wetter gerade ist und wird.&lt;br /&gt;
&lt;br /&gt;
=== Mediacenter ===&lt;br /&gt;
Mein 10&amp;quot; Tablet im Wohnzimmer ist Mediaplayer für das Wohnzimmer mit Bluetoothlautsprechern. Die Lautstärke wird automatisch runter gesetzt wenn die Fritzbox einen Anruf auf das Wohnzimmer Handgerät signalisiert.&lt;br /&gt;
&lt;br /&gt;
=== Sprachbefehl - Abfragen von Zuständen diverser Sensoren ===&lt;br /&gt;
Wenn ich die Spracheingabe aktiviere und nach der Temperatur im Wohnzimmer frage, bekomme ich diese angesagt.&lt;br /&gt;
&lt;br /&gt;
Der Teil im Feld Daten ist ein klassisches RadingsVal, halt nur ohne Komma und ohne Anführungszeichen&lt;br /&gt;
&lt;br /&gt;
WIRD GERADE ÜBERARBEITET&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Schaltbefehle vom Androidgerät an FHEM senden ===&lt;br /&gt;
Hierfür richte bitte einen eigen Flow ein. Wie das genau geht, verrät Dir die Hilfe.&lt;br /&gt;
Um einen Schaltbefehl für FHEM zu erstellen, folgt nach dem Trigger eine Aktion als Script (Aktion Type: Script). Hier trägst Du folgendes ein&lt;br /&gt;
&lt;br /&gt;
setcmd = &amp;quot;LichtWohnzimmerLampeRechts on&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;set&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In der ersten Zeile wird also der Schaltbefehl in der Variablem setcmd eingetragen und in der zweiten Zeile der FHEM Befehl in der Variablen fhemcmd.&lt;br /&gt;
&lt;br /&gt;
Danach müsst Ihr nur noch in einer weiteren Aktion den Flow &amp;quot;Send Data to AMADCommBridge&amp;quot; ausführen (Aktion Type: Flows ausführen). Die Aktion sollte bereits in Eurer Liste Vorhanden sein.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Screenshot_20160717-134948.png|200px]]&lt;br /&gt;
[[Datei:Screenshot 17.07.2016 1-50-27.png|200px]]&lt;br /&gt;
&lt;br /&gt;
Nun sollte Lampe1 angeschalten werden wenn der Flow ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Lister aller Variablen für die AMADCommandBridge ===&lt;br /&gt;
fhemcmd Variable &lt;br /&gt;
* Wert &amp;quot;set&amp;quot; - Variable für den Schaltbefehl &#039;setcmd&#039;&lt;br /&gt;
* Wert &amp;quot;setreading&amp;quot; - Variable für die Readingswerte &#039;fhemdata&#039;&lt;br /&gt;
* &amp;quot;readingsval&amp;quot; - Variable für die Abfragewerte &#039;readingsvalcmd&#039;&lt;br /&gt;
* &amp;quot;fhemfunc&amp;quot; - Variable für den Funktionsnamen &#039;fhemsub&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele für Skriptinhalte:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Schalten einer Lampe&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
setcmd = &amp;quot;LichtWohnzimmerLampeRechts on&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;set&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Status eines Device abfragen&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
readingsvalcmd = &amp;quot;DEVICE READING DEFAULT&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;readingsval&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Rückgabevariable welche dann weiter verarbeitet werden kann, heißt &#039;&#039;&#039;respreadingsval&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Aufruf einer 99_myUtils Subroutine&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
fhemsub = &amp;quot;mySub()&amp;quot;; oder natürlich auch &amp;quot;mySub(&#039;was_auch_immer&#039;)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;fhemfunc&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Rückgabevariable welche dann weiter verarbeitet werden kann, heißt &#039;&#039;&#039;respfhemfunc&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Bekannte Meldungen/Hinweise/Probleme ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn auf dem Android-Gerät die Fehlermeldung &#039;Accessibility service not running&#039; von Automagic kommt, oder im FHEM das reading state  &#039;Flow Informations mit Fehler beendet&#039; steht, dann muss der Accessibility Service auf dem Android-Device aktiviert werden: Einstellungen --&amp;gt; Bedienungshilfen --&amp;gt; Automagic Premium. Hier muss der Schalter auf &#039;an&#039; stehen. Sollte dies der Fall sein, hilft u.U. ein kurzes Aus- und wieder Einschalten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Gerät wird oft als offline angezeigt und es können keine set Befehle abgesetzt werden.&lt;br /&gt;
Mit der AMAD Version 2.2 hielt eine neue Behandlung des deviceState Readings Einzug. Das Reading stellt nun den tatsächlichen Status des Gerätes gegenüber FHEM da. Bei vielen Android 6 Geräten kommt es aber auf Grund vom DeepSleep Modus zum wegfall der WLAN Verbindung. Hier hilft die neue KeepAlive Funktion in AMAD. Dafür muß lediglich unter &lt;br /&gt;
* Einstellungen --&amp;gt; Akku --&amp;gt; oben auf die drei Punkte - Akku Leistungsoptimierung --&amp;gt; alle Apps und dann Automagic auswählen und &amp;quot;Nicht optimieren&amp;quot;&lt;br /&gt;
ausgewählt werden. Alles andere macht das Modul selbst.&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=AMAD&amp;diff=21854</id>
		<title>AMAD</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=AMAD&amp;diff=21854"/>
		<updated>2017-07-25T12:10:10Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: /* Ein AMADDevice Gerät von Hand anlegen. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuern von Adroidgeräten und Anzeige von bestimmten Informationen dieser Geräte&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Sonstige Systeme&lt;br /&gt;
|ModTechName=73_AMADCommBridge.pm, 74_AMADDevice.pm&lt;br /&gt;
|ModOwner=CoolTux &amp;lt;br /&amp;gt;([http://forum.fhem.de/index.php?action=profile;u=13684 Forum] / [[Benutzer:CoolTux|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= AMAD 4.0 [AMADNG] =&lt;br /&gt;
== 73_AMADCommBridge / 74_AMADDevice ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Vorwort =&lt;br /&gt;
=== Warum AMADNG ===&lt;br /&gt;
Nach fast 6 Monaten Entwicklungszeit wurde die neuste AMAD Version am 24.07.2017 offiziell frei gegeben. Diesmal lagen mir mehrere Dinge am Herzen.&lt;br /&gt;
In erster Linie wollte ich eine softwareseitige Trennung der AMADCommBridge vom eigentlichen Android Device. Daher ist die neue Version ein zweistufiges Modul geworden.&lt;br /&gt;
Im Laufe der Entwicklung kamen auch andere Anforderungen hinzu, welche ich dann fähig war um zu setzen. Eine dieser Anforderungen war eine einfachere und besser funktionierende Installation. Raus gekommen ist ein Android Installationsassistant.&lt;br /&gt;
Mit ihm wird auf einfache Art und Weise direkt per Sprachführung und Eingabedialogen Automagic für AMAD konfiguriert und das Device in FHEM automatisch erstellt. Autocreate!&lt;br /&gt;
&lt;br /&gt;
= Vorstellung =&lt;br /&gt;
Dieses 2-stufige Modul liefert, &#039;&#039;&#039;in Verbindung mit der Android APP Automagic&#039;&#039;&#039;, diverse Informationen von Android Geräten. &lt;br /&gt;
Die AndroidAPP Automagic (welche nicht von mir stammt und 2.90 Euro kostet) funktioniert wie Tasker, ist aber bei weitem User freundlicher.&lt;br /&gt;
&lt;br /&gt;
=== Features / Funktionen ===&lt;br /&gt;
Im Auslieferiungszustand werden folgende Zustände dargestellt:&lt;br /&gt;
* installierte Android Version&lt;br /&gt;
* Zustand von Automagic auf dem Gerät&lt;br /&gt;
* Spracheingabe&lt;br /&gt;
* Bluetooth An/Aus&lt;br /&gt;
* Zustand einer definierten App (läuft aktiv im Vordergrund oder nicht?)&lt;br /&gt;
* verbundene Bluetoothgeräte, inklusive deren MAC Adresse&lt;br /&gt;
* aktuell abgespieltes Musikalbum des verwendeten Mediaplayers&lt;br /&gt;
* aktuell abgespielter Musikinterpret des verwendeten Mediaplayers&lt;br /&gt;
* aktuell abgespielter Musiktitel des verwendeten Mediaplayers&lt;br /&gt;
* Status des Androidgerätes - Online/Offline&lt;br /&gt;
* nächster Alarmtag&lt;br /&gt;
* nächste Alarmzeit&lt;br /&gt;
* Batteriestatus in %&lt;br /&gt;
* Ladestatus - Netztei angeschlossen / nicht angeschlossen&lt;br /&gt;
* Bildschirmstatus An/Aus&lt;br /&gt;
* Bildschirmhelligkeit&lt;br /&gt;
* Vollbildmodus An/Aus&lt;br /&gt;
* Bildschirmausrichtung Auto/Landscape/Portrait&lt;br /&gt;
* Standardlautstärke&lt;br /&gt;
* Media Lautstärke&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Mit etwas Einarbeitung können jegliche Informationen welche Automagic bereit stellt, in FHEM angezeigt werden. Hierzu bedarf es lediglich eines eigenen Flows welcher seine Daten an die AMADCommBridge sendet. Das Modul gibt auch die Möglichkeit Androidgeräte zu steuern.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= AMADCommBridge - Kommunikationsbrücke für alle AMAD Geräte =&lt;br /&gt;
Dieses Modul ist das Ausgangsmodul zur erfolgreichen Integration von Androidgeräten in FHEM. Es stellt ferner eine Verbindungsebene zwischen AMAD unterstützten Geräten und FHEM zur Verfügung. Alle Kommunikation zwischen AMAD Android und FHEM läuft über diese Schnittstelle.&lt;br /&gt;
Daher erfolgt die Ersteinrichtung eines AMAD Devices auch genau über diese Modulinstanz. &lt;br /&gt;
&lt;br /&gt;
Damit erfolgreich ein Androidgerät in FHEM eingerichtet werden kann, muss im ersten Schritt ein AMADCommBridge Device angelegt werden.&lt;br /&gt;
&lt;br /&gt;
=== Definition in FHEM ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; AMADCommBridge&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== Beispiel ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define AMADBridge AMADCommBridge&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Anweisung erstellt ein neues AMADCommBridge Device Namens AMADBridge.&lt;br /&gt;
&lt;br /&gt;
Im folgenden muß lediglich das Flowset auf dem Android Gerät installiert werden und der Flow &#039;First Run Assistent&#039; ausgeführt werden. (einfach den Homebutton drücken)&lt;br /&gt;
Der Assistent geleitet Dich dann durch die Einrichtung Deines AMAD Gerätes und sorgt dafür das am Ende des Installationsprozess das Androidgerät als AMAD Device in FHEM angelegt wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
* JSON_ERROR - JSON Fehlermeldung welche von Perl gemeldet wird&lt;br /&gt;
* JSON_ERROR_STRING - der String welcher die JSON Fehlermeldung verursacht hat&lt;br /&gt;
* fhemServerIP - die Ip-Adresse des FHEM Servers, wird vom Modul auf Basis des JSON Strings vom Installationsassistenten gesetzt. Kann aber auch mittels set Befehles vom User gesetzt werden&lt;br /&gt;
* receiveFhemCommand - ist das Attribut fhemControlMode auf trigger gestellt, wird das Reading gesetzt sobald ein FHEM Befehl übersendet wird. Hierauf kann dann ein Notify triggern. Wird anstelle von trigger setControl als Wert für fhemControlMode eingestellt, wird das Reading nicht gestzt sondern der set Befehl sofort ausgeführt.&lt;br /&gt;
* receiveVoiceCommand - wird die Sprachsteuerung von AMAD aktiviert (set DEVICE activateVoiceInput) so wird der letzte erkannten Sprachbefehle in dieses Reading geschrieben.&lt;br /&gt;
* receiveVoiceDevice - Name des Devices von wo aus der letzte erkannte Sprachbefehl gesendet wurde&lt;br /&gt;
* state - Status der Bridge, open, closed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
* allowFrom - Regexp der erlaubten IP-Adressen oder Hostnamen. Wenn dieses Attribut gesetzt wurde, werden ausschließlich Verbindungen von diesen Adressen akzeptiert. Achtung: falls allowfrom nicht gesetzt ist, und keine gütige allowed Instanz definiert ist, und die Gegenstelle eine nicht lokale Adresse hat, dann wird die Verbindung abgewiesen. Folgende Adressen werden als local betrachtet: IPV4: 127/8, 10/8, 192.168/16, 172.16/10, 169.254/16, IPV6: ::1, fe80/10&lt;br /&gt;
* debugJSON - wenn auf 1 gesetzt, werden JSON Fehlermeldungen in Readings geschrieben. Siehe hierzu JSON_ERROR* unter Readings&lt;br /&gt;
* fhemControlMode - steuert die zulässige Art der Kontrolle von FHEM Devices. Du kannst über die Bridge auf 2 Arten FHEM Devices steuern. Entweder per direktem FHEM Befehl aus einem Flow heraus, oder als Sprachbefehl mittels Sprachsteuerung (set DEVICE activateVoiceInput)&lt;br /&gt;
** trigger - ist der Wert trigger gesetzt, werden alle an die Bridge gesendeten FHEM set Befehle in das Reading receiveFhemCommand geschrieben und können so mittels notify ausgeführt werden. Sprachsteuerung ist möglich, es werden Readings receiveVoice* gesetzt. Auf dem Androidgerät können bei Sprachsteuerung mehrere Sprachbefehle mittels &amp;quot;und&amp;quot; verknüpft/aneinander gereiht werden. Bsp: schalte die Lichtszene Abends an und schalte den Fernsehr an&lt;br /&gt;
** setControl - alle set Befehle welche mittels eines Flows über die Bridge gesendet werden, werden automatisch ausgeführt. Das triggern eines Readings ist nicht nötig. Die Steuerung mittels Sprache verhält sich wie beim Wert trigger&lt;br /&gt;
** thirdPartControl - verhält sich wie trigger, bei der Sprachsteuerung ist jedoch ein anreihen von Sprachbefehlen mittels &amp;quot;und&amp;quot; nicht möglich. Dient der Sprachsteuerung über Module anderer Modulautoren ((z.B. 39_TEERKO.pm)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= AMADDevice - Automagic Android Device =&lt;br /&gt;
Dieses Modul liefert, in Verbindung mit der Android APP Automagic, diverse Informationen von Android Geräten. Die AndroidAPP Automagic (welche nicht von mir stammt und 2.90 Euro kostet) funktioniert wie Tasker, ist aber bei weitem User freundlicher. &lt;br /&gt;
Mit etwas Einarbeitung können jegliche Informationen welche Automagic bereit stellt in FHEM angezeigt werden. Hierzu bedarf es lediglich eines eigenen Flows welcher seine Daten an die AMADDeviceCommBridge sendet. Das Modul gibt auch die Möglichkeit Androidgeräte zu steuern. &lt;br /&gt;
Für all diese Aktionen und Informationen wird auf dem Androidgerät &amp;quot;Automagic&amp;quot; und ein so genannter Flow benötigt. Die App ist über den Google PlayStore zu beziehen. Das benötigte Flowset bekommt man aus dem FHEM Verzeichnis. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Wie genau verwendet man nun AMADDevice? ===&lt;br /&gt;
* stelle sicher das als aller erstes die AMADCommBridge in FHEM definiert wurde&lt;br /&gt;
* installiere die App &amp;quot;Automagic Premium&amp;quot; aus dem PlayStore.&lt;br /&gt;
* installiere das Flowset 74_AMADDeviceautomagicFlowset$VERSION.xml aus dem Ordner $INSTALLFHEM/FHEM/lib/ auf dem Androidgerät&lt;br /&gt;
* aktiviere den Installationsassistanten Flow in Automagic. Wenn man nun Automagic in den Hintergrund schickt, z.B. Hometaste drücken, startet der Assistant und legt automatisch ein Device für das Androidgerät an.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ein AMADDevice Gerät von Hand anlegen. ===&lt;br /&gt;
&lt;br /&gt;
Define&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; AMADDevice &amp;lt;IP-ADRESSE&amp;gt; &amp;lt;AMAD_ID&amp;gt; IODev=&amp;lt;IODEVICE&amp;gt; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Beispiel ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define WandTabletWohnzimmer AMADDevice 192.168.0.23 123456 IODev=NAME_des_AMADCommBridge_Devices&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Fall wird ein AMADDevice von Hand angelegt. Die AMAD_ID, hier 123456, muß auch exakt so als globale Variable in Automagic eingetragen sein.&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
* airplanemode - Status des Flugmodus&lt;br /&gt;
* androidVersion - aktuell installierte Androidversion&lt;br /&gt;
* automagicState - Statusmeldungen von der AutomagicApp &#039;&#039;&#039;(Voraussetzung Android &amp;gt;4.3). Ist Android größer 4.3 vorhanden und im Reading steht &amp;quot;wird nicht unterstützt&amp;quot;, muß in den Androideinstellungen unter Ton und Benachrichtigungen -&amp;gt; Benachrichtigungszugriff ein Haken für Automagic gesetzt werden&#039;&#039;&#039;&lt;br /&gt;
* batteryHealth - Zustand der Battery (1=unbekannt, 2=gut, 3=Überhitzt, 4=tot, 5=Überspannung, 6=unbekannter Fehler, 7=kalt)&lt;br /&gt;
* batterytemperature - Temperatur der Batterie&lt;br /&gt;
* bluetooth - on/off, Bluetooth Status an oder aus&lt;br /&gt;
* checkActiveTask - Zustand einer zuvor definierten APP. 0=nicht aktiv oder nicht aktiv im Vordergrund, 1=aktiv im Vordergrund, &#039;&#039;&#039;siehe Hinweis unten&#039;&#039;&#039;&lt;br /&gt;
* connectedBTdevices - eine Liste der verbundenen Gerät&lt;br /&gt;
* connectedBTdevicesMAC - eine Liste der MAC Adressen aller verbundender BT Geräte&lt;br /&gt;
* currentMusicAlbum - aktuell abgespieltes Musikalbum des verwendeten Mediaplayers&lt;br /&gt;
* currentMusicApp - aktuell verwendeter Mediaplayer (Amazon Music, Google Play Music, Google Play Video, Spotify, YouTube, TuneIn Player, Aldi Life Music)&lt;br /&gt;
* currentMusicArtist - aktuell abgespielter Musikinterpret des verwendeten Mediaplayers&lt;br /&gt;
* currentMusicIcon - Cover vom aktuell abgespielten Album &#039;&#039;&#039;Noch nicht fertig implementiert&#039;&#039;&#039;&lt;br /&gt;
* currentMusicState - Status des aktuellen/zuletzt verwendeten Mediaplayers&lt;br /&gt;
* currentMusicTrack - aktuell abgespielter Musiktitel des verwendeten Mediaplayers&lt;br /&gt;
* daydream - on/off, Daydream gestartet oder nicht&lt;br /&gt;
* deviceState - Status des Androidgerätes. unknown, online, offline.&lt;br /&gt;
* doNotDisturb - aktueller Status des nicht stören Modus&lt;br /&gt;
* dockingState - undocked/docked Status ob sich das Gerät in einer Dockinstation befindet.&lt;br /&gt;
* flow_SetCommands - active/inactive, Status des SetCommands Flow&lt;br /&gt;
* flow_informations - active/inactive, Status des Informations Flow&lt;br /&gt;
* flowsetVersionAtDevice - aktuell installierte Flowsetversion auf dem Device&lt;br /&gt;
* incomingCallerName - Anrufername des eingehenden Anrufes&lt;br /&gt;
* incomingCallerNumber - Anrufernummer des eingehenden Anrufes&lt;br /&gt;
* incommingWhatsAppMessageFrom - letzte WhatsApp Nachricht&lt;br /&gt;
* incommingWhatsTelegramMessageFrom - letzte Telegram Nachricht&lt;br /&gt;
* intentRadioName - zuletzt gesrreamter Intent Radio Name&lt;br /&gt;
* intentRadioState - Status des IntentRadio Players&lt;br /&gt;
* keyguardSet - 0/1 Displaysperre gesetzt 0=nein 1=ja, bedeutet nicht das sie gerade aktiv ist&lt;br /&gt;
* lastSetCommandError - letzte Fehlermeldung vom set Befehl&lt;br /&gt;
* lastSetCommandState - letzter Status vom set Befehl, Befehl erfolgreich/nicht erfolgreich gesendet&lt;br /&gt;
* lastStatusRequestError - letzte Fehlermeldung vom statusRequest Befehl&lt;br /&gt;
* lastStatusRequestState - letzter Status vom statusRequest Befehl, Befehl erfolgreich/nicht erfolgreich gesendet&lt;br /&gt;
* nextAlarmDay - aktiver Alarmtag&lt;br /&gt;
* nextAlarmState - aktueller Status des &amp;quot;Androidinternen&amp;quot; Weckers&lt;br /&gt;
* nextAlarmTime - aktive Alarmzeit&lt;br /&gt;
* powerLevel - Status der Batterie in %&lt;br /&gt;
* powerPlugged - Netzteil angeschlossen? 0=NEIN, 1|2=JA&lt;br /&gt;
* screen - on locked/unlocked, off locked/unlocked gibt an ob der Bildschirm an oder aus ist und gleichzeitig gesperrt oder nicht gesperrt&lt;br /&gt;
* screenBrightness - Bildschirmhelligkeit von 0-255&lt;br /&gt;
* screenFullscreen - on/off, Vollbildmodus (An,Aus)&lt;br /&gt;
* screenOrientation - Landscape,Portrait, Bildschirmausrichtung (Horizontal,Vertikal)&lt;br /&gt;
* screenOrientationMode - auto/manual, Modus für die Ausrichtung (Automatisch, Manuell)&lt;br /&gt;
* state - aktueller Status&lt;br /&gt;
* userFlowState - aktueller Status eines Flows, festgelegt unter dem setUserFlowState Attribut&lt;br /&gt;
* volume - Media Lautstärkewert&lt;br /&gt;
* volumeNotification - Benachrichtigungs Lautstärke&lt;br /&gt;
&lt;br /&gt;
Beim Reading checkActivTask muß zuvor der Packagename der zu prüfenden App als Attribut checkActiveTask angegeben werden. Beispiel: attr Nexus10Wohnzimmer checkActiveTask com.android.chrome für den Chrome Browser.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Set ===&lt;br /&gt;
* activateVoiceInput - aktiviert die Spracheingabe&lt;br /&gt;
* bluetooth - on/off, aktiviert/deaktiviert Bluetooth&lt;br /&gt;
* clearNotificationBar - All,Automagic, löscht alle Meldungen oder nur die Automagic Meldungen in der Statusleiste&lt;br /&gt;
* closeCall - beendet einen laufenden Anruf&lt;br /&gt;
* currentFlowsetUpdate - fürt ein Flowsetupdate auf dem Device durch&lt;br /&gt;
* doNotDisturb - schaltet den nicht stören Modus, always immer stören, never niemals stören, alarmClockOnly nur Wecker darf stören, onlyImportant nur wichtige Störungen&lt;br /&gt;
* installFlowSource - installiert einen Flow auf dem Device, &amp;lt;u&amp;gt;das XML File muss unter /tmp/ liegen und die Endung xml haben. &amp;lt;b&amp;gt;Bsp:&amp;lt;/b&amp;gt; set TabletWohnzimmer installFlowSource WlanUebwerwachen.xml&amp;lt;/u&amp;gt;&lt;br /&gt;
* mediaAmazonMusic - play, stop, next, back ,steuert den Amazon Musik Mediaplayer&lt;br /&gt;
* mediaGoogleMusic - play, stop, next, back ,steuert den Google Play Musik Mediaplayer&lt;br /&gt;
* mediaSpotifyMusic - play, stop, next, back ,steuert den Spotify Mediaplayer&lt;br /&gt;
* mediaTuneinRadio - play, stop, next, back ,steuert den TuneIn Radio Mediaplayer&lt;br /&gt;
* mediaAldiMusic - play, stop, next, back ,steuert den Aldi Musik Mediaplayer&lt;br /&gt;
* mediaAudible - play, stop, next, back ,steuert den Audible Mediaplayer&lt;br /&gt;
* mediaYouTube - play, stop, next, back ,steuert den YouTube Mediaplayer&lt;br /&gt;
* mediaVlcPlayer - play, stop, next, back ,steuert den VLC Mediaplayer&lt;br /&gt;
* nextAlarmTime - setzt die Alarmzeit. gilt aber nur innerhalb der nächsten 24Std.&lt;br /&gt;
* openCall - ruft eine Nummer an und legt optional nach X Sekunden auf / set DEVICE openCall 01736458 10 / ruft die Nummer an und beendet den Anruf nach 10s&lt;br /&gt;
* screen - on/off/lock/unlock schaltet den Bildschirm ein/aus oder sperrt/entsperrt ihn&lt;br /&gt;
* screenBrightness - setzt die Bildschirmhelligkeit, von 0-255.&lt;br /&gt;
* screenMsg - versendet eine Bildschirmnachricht&lt;br /&gt;
* sendintent - sendet einen Intentstring Bsp: set $AMADDeviceDEVICE sendIntent org.smblott.intentradio.PLAY url http://stream.klassikradio.de/live/mp3-192/stream.klassikradio.de/play.m3u name Klassikradio, der erste Befehl ist die Aktion und der zweite das Extra. Es können immer zwei Extras mitgegeben werden.&lt;br /&gt;
* sendSMS - sendet eine SMS an eine bestimmte Telefonnummer. Bsp.: sendSMS Dies ist ein Test|555487263&lt;br /&gt;
* startDaydream - startet den Daydream&lt;br /&gt;
* statusRequest - Fordert einen neuen Statusreport beim Device an. Es können nicht von allen Readings per statusRequest die Daten geholt werden. Einige wenige geben nur bei Statusänderung ihren Status wieder.&lt;br /&gt;
* timer - setzt einen Timer innerhalb der als Standard definierten ClockAPP auf dem Device. Es können nur Sekunden angegeben werden.&lt;br /&gt;
* ttsMsg - versendet eine Nachricht welche als Sprachnachricht ausgegeben wird&lt;br /&gt;
* userFlowState - aktiviert oder deaktiviert einen oder mehrere Flows,&#039;&#039;&#039;set Nexus7Wohnzimmer Badezimmer vorheizen:inactive oder set Nexus7Wohnzimmer Badezimmer vorheizen,Nachtlicht Steven:inactive&#039;&#039;&#039;&lt;br /&gt;
* vibrate - lässt das Androidgerät vibrieren&lt;br /&gt;
* volume - setzt die Medialautstärke. Entweder die internen Lautsprecher oder sofern angeschlossen die Bluetoothlautsprecher und per Klinkenstecker angeschlossene Lautsprecher, + oder - vor dem Wert reduziert die aktuelle Lautstärke um den Wert. Der maximale Sliderwert kann über das Attribut setVolMax geregelt werden.&lt;br /&gt;
* volumeUp - erhöh;t die Lautstärke um den angegeben Wert im entsprechenden Attribut. Ist kein Attribut angegeben wird per default 2 genommen.&lt;br /&gt;
* volumeDown - reduziert die Lautstärke um den angegeben Wert im entsprechenden Attribut. Ist kein Attribut angegeben wird per default 2 genommen.&lt;br /&gt;
* volumeNotification - setzt die Benachrichtigungslautstärke.&lt;br /&gt;
&lt;br /&gt;
==== Set abhängig von gesetzten Attributen ====&lt;br /&gt;
* changetoBtDevice - wechselt zu einem anderen Bluetooth Gerät. Attribut setBluetoothDevice muß gesetzt sein. Siehe Hinweis unten!&lt;br /&gt;
* notifySndFile - spielt die angegebene Mediadatei auf dem Androidgerät ab. Die aufzurufende Mediadatei sollte sich im Ordner /storage/emulated/0/Notifications/ befinden. Ist dies nicht der Fall kann man über das Attribut setNotifySndFilePath einen Pfad vorgeben.&lt;br /&gt;
* openApp - öffnet eine ausgewählte App. Attribut setOpenApp&lt;br /&gt;
* openURL - öffnet eine URL im Standardbrowser, sofern kein anderer Browser über das Attribut setOpenUrlBrowser ausgewählt wurde. Bsp: attr Tablet setOpenUrlBrowser de.ozerov.fully|de.ozerov.fully.MainActivity, das erste ist der Package Name und das zweite der Class Name&lt;br /&gt;
* setAPSSID - setzt die AccessPoint SSID um ein WLAN sleep zu verhindern&lt;br /&gt;
* setScreenOnForTimer ändert die Zeit wie lange das Display an bleiben soll!&lt;br /&gt;
* screenFullscreen - on/off, (aktiviert/deaktiviert) den Vollbildmodus. Attribut setFullscreen&lt;br /&gt;
* screenLock - Sperrt den Bildschirm mit Pinabfrage. Attribut setScreenlockPIN - hier die Pin dafür eingeben. Erlaubt sind nur Zahlen. Es müßen mindestens 4, bis max 16 Zeichen verwendet werden.&lt;br /&gt;
* screenOrientation - Auto,Landscape,Portait, aktiviert die Bildschirmausrichtung (Automatisch,Horizontal,Vertikal). Attribut setScreenOrientation&lt;br /&gt;
* system - setzt Systembefehle ab (nur bei gerootetet Geräen). reboot,shutdown,airplanemodeON (kann nur aktiviert werden) Attribut root, in den Automagic Einstellungen muss &amp;quot;Root Funktion&amp;quot; gesetzt werden&lt;br /&gt;
* setNotifySndFilePath - setzt den korrekten Systempfad zur Notifydatei (default ist /storage/emulated/0/Notifications/&lt;br /&gt;
* setTtsMsgSpeed - setzt die Sprachgeschwindigkeit bei der Sprachausgabe(Werte zwischen 0.5 bis 4.0 in 0.5er Schritten) default ist 1.0&lt;br /&gt;
* setTtsMsgSpeed - setzt die Sprache bei der Sprachausgabe, de oder en (default ist de)&lt;br /&gt;
* setVolUpDownStep - setzt den Step für volumeUp und volumeDown&lt;br /&gt;
* setVolMax - setzt die maximale Volume Gr&amp;amp;uoml;e für den Slider&lt;br /&gt;
* setNotifyVolMax - setzt den maximalen Lautstärkewert für Benachrichtigungslautstärke für den Slider&lt;br /&gt;
* setRingSoundVolMax - setzt den maximalen Lautstärkewert für Klingellautstärke für den Slider&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Um openApp verwenden zu können, muss als Attribut der Package Name der App angegeben werden. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Um zwischen Bluetoothgeräten wechseln zu können, muß das Attribut setBluetoothDevice mit folgender Syntax gesetzt werden. attr &amp;lt;DEVICE&amp;gt; BTdeviceName1|MAC,BTDeviceName2|MAC Es muss zwingend darauf geachtet werden das beim BTdeviceName kein Leerzeichen vorhanden ist. Am besten zusammen oder mit Unterstrich. Achtet bei der MAC darauf das Ihr wirklich nach jeder zweiten Zahl auch einen : drin habt&lt;br /&gt;
&lt;br /&gt;
** &#039;&#039;&#039;Beispiel: attr Nexus10Wohnzimmer setBluetoothDevice Logitech_BT_Adapter|AB:12:CD:34:EF:32,Anker_A3565|GH:56:IJ:78:KL:76&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== state ===&lt;br /&gt;
* initialized - Ist der Status kurz nach einem define.&lt;br /&gt;
* active - die Geräteinstanz ist im aktiven Status.&lt;br /&gt;
* disabled - die Geräteinstanz wurde über das Attribut disable deaktiviert&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Anwendungsbeispiele==&lt;br /&gt;
=== Lademanagement ===&lt;br /&gt;
Ich habe die Ladegeräte für meine Androidgeräte an Funkschaltsteckdosen. ein DOIF schaltet bei unter 30% die Steckdose ein und bei über 90% wieder aus.&lt;br /&gt;
&lt;br /&gt;
Hier mal ein einfaches DOIF Beispiel für ein Lademanagment&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
... DOIF ([Nexus5Handy:powerLevel] &amp;lt; 30) (set LadenetzteilNexus5Handy:FILTER=STATE=off on) DOELSEIF ([Nexus5Handy:powerLevel] &amp;gt; 90) (set LadenetzteilNexus5Handy:FILTER=STATE=on off) DOELSE&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Wecker ===&lt;br /&gt;
Morgens lasse ich mich über mein Tablet im Schlafzimmer mit Musik wecken. Verwendet wird hierzu der wakeuptimer des RESIDENTS Modules. Das abspielen stoppe ich dann von Hand. Danach erfolgt noch eine Ansage wie das Wetter gerade ist und wird.&lt;br /&gt;
&lt;br /&gt;
=== Mediacenter ===&lt;br /&gt;
Mein 10&amp;quot; Tablet im Wohnzimmer ist Mediaplayer für das Wohnzimmer mit Bluetoothlautsprechern. Die Lautstärke wird automatisch runter gesetzt wenn die Fritzbox einen Anruf auf das Wohnzimmer Handgerät signalisiert.&lt;br /&gt;
&lt;br /&gt;
=== Sprachbefehl - Abfragen von Zuständen diverser Sensoren ===&lt;br /&gt;
Wenn ich die Spracheingabe aktiviere und nach der Temperatur im Wohnzimmer frage, bekomme ich diese angesagt.&lt;br /&gt;
&lt;br /&gt;
Der Teil im Feld Daten ist ein klassisches RadingsVal, halt nur ohne Komma und ohne Anführungszeichen&lt;br /&gt;
&lt;br /&gt;
WIRD GERADE ÜBERARBEITET&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Schaltbefehle vom Androidgerät an FHEM senden ===&lt;br /&gt;
Hierfür richte bitte einen eigen Flow ein. Wie das genau geht, verrät Dir die Hilfe.&lt;br /&gt;
Um einen Schaltbefehl für FHEM zu erstellen, folgt nach dem Trigger eine Aktion als Script (Aktion Type: Script). Hier trägst Du folgendes ein&lt;br /&gt;
&lt;br /&gt;
setcmd = &amp;quot;LichtWohnzimmerLampeRechts on&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;set&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In der ersten Zeile wird also der Schaltbefehl in der Variablem setcmd eingetragen und in der zweiten Zeile der FHEM Befehl in der Variablen fhemcmd.&lt;br /&gt;
&lt;br /&gt;
Danach müsst Ihr nur noch in einer weiteren Aktion den Flow &amp;quot;Send Data to AMADCommBridge&amp;quot; ausführen (Aktion Type: Flows ausführen). Die Aktion sollte bereits in Eurer Liste Vorhanden sein.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Screenshot_20160717-134948.png|200px]]&lt;br /&gt;
[[Datei:Screenshot 17.07.2016 1-50-27.png|200px]]&lt;br /&gt;
&lt;br /&gt;
Nun sollte Lampe1 angeschalten werden wenn der Flow ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bekannte Meldungen/Hinweise/Probleme ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn auf dem Android-Gerät die Fehlermeldung &#039;Accessibility service not running&#039; von Automagic kommt, oder im FHEM das reading state  &#039;Flow Informations mit Fehler beendet&#039; steht, dann muss der Accessibility Service auf dem Android-Device aktiviert werden: Einstellungen --&amp;gt; Bedienungshilfen --&amp;gt; Automagic Premium. Hier muss der Schalter auf &#039;an&#039; stehen. Sollte dies der Fall sein, hilft u.U. ein kurzes Aus- und wieder Einschalten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Gerät wird oft als offline angezeigt und es können keine set Befehle abgesetzt werden.&lt;br /&gt;
Mit der AMAD Version 2.2 hielt eine neue Behandlung des deviceState Readings Einzug. Das Reading stellt nun den tatsächlichen Status des Gerätes gegenüber FHEM da. Bei vielen Android 6 Geräten kommt es aber auf Grund vom DeepSleep Modus zum wegfall der WLAN Verbindung. Hier hilft die neue KeepAlive Funktion in AMAD. Dafür muß lediglich unter &lt;br /&gt;
* Einstellungen --&amp;gt; Akku --&amp;gt; oben auf die drei Punkte - Akku Leistungsoptimierung --&amp;gt; alle Apps und dann Automagic auswählen und &amp;quot;Nicht optimieren&amp;quot;&lt;br /&gt;
ausgewählt werden. Alles andere macht das Modul selbst.&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=AMAD&amp;diff=21853</id>
		<title>AMAD</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=AMAD&amp;diff=21853"/>
		<updated>2017-07-25T12:09:07Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: /* Warum AMADNG */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuern von Adroidgeräten und Anzeige von bestimmten Informationen dieser Geräte&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Sonstige Systeme&lt;br /&gt;
|ModTechName=73_AMADCommBridge.pm, 74_AMADDevice.pm&lt;br /&gt;
|ModOwner=CoolTux &amp;lt;br /&amp;gt;([http://forum.fhem.de/index.php?action=profile;u=13684 Forum] / [[Benutzer:CoolTux|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= AMAD 4.0 [AMADNG] =&lt;br /&gt;
== 73_AMADCommBridge / 74_AMADDevice ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Vorwort =&lt;br /&gt;
=== Warum AMADNG ===&lt;br /&gt;
Nach fast 6 Monaten Entwicklungszeit wurde die neuste AMAD Version am 24.07.2017 offiziell frei gegeben. Diesmal lagen mir mehrere Dinge am Herzen.&lt;br /&gt;
In erster Linie wollte ich eine softwareseitige Trennung der AMADCommBridge vom eigentlichen Android Device. Daher ist die neue Version ein zweistufiges Modul geworden.&lt;br /&gt;
Im Laufe der Entwicklung kamen auch andere Anforderungen hinzu, welche ich dann fähig war um zu setzen. Eine dieser Anforderungen war eine einfachere und besser funktionierende Installation. Raus gekommen ist ein Android Installationsassistant.&lt;br /&gt;
Mit ihm wird auf einfache Art und Weise direkt per Sprachführung und Eingabedialogen Automagic für AMAD konfiguriert und das Device in FHEM automatisch erstellt. Autocreate!&lt;br /&gt;
&lt;br /&gt;
= Vorstellung =&lt;br /&gt;
Dieses 2-stufige Modul liefert, &#039;&#039;&#039;in Verbindung mit der Android APP Automagic&#039;&#039;&#039;, diverse Informationen von Android Geräten. &lt;br /&gt;
Die AndroidAPP Automagic (welche nicht von mir stammt und 2.90 Euro kostet) funktioniert wie Tasker, ist aber bei weitem User freundlicher.&lt;br /&gt;
&lt;br /&gt;
=== Features / Funktionen ===&lt;br /&gt;
Im Auslieferiungszustand werden folgende Zustände dargestellt:&lt;br /&gt;
* installierte Android Version&lt;br /&gt;
* Zustand von Automagic auf dem Gerät&lt;br /&gt;
* Spracheingabe&lt;br /&gt;
* Bluetooth An/Aus&lt;br /&gt;
* Zustand einer definierten App (läuft aktiv im Vordergrund oder nicht?)&lt;br /&gt;
* verbundene Bluetoothgeräte, inklusive deren MAC Adresse&lt;br /&gt;
* aktuell abgespieltes Musikalbum des verwendeten Mediaplayers&lt;br /&gt;
* aktuell abgespielter Musikinterpret des verwendeten Mediaplayers&lt;br /&gt;
* aktuell abgespielter Musiktitel des verwendeten Mediaplayers&lt;br /&gt;
* Status des Androidgerätes - Online/Offline&lt;br /&gt;
* nächster Alarmtag&lt;br /&gt;
* nächste Alarmzeit&lt;br /&gt;
* Batteriestatus in %&lt;br /&gt;
* Ladestatus - Netztei angeschlossen / nicht angeschlossen&lt;br /&gt;
* Bildschirmstatus An/Aus&lt;br /&gt;
* Bildschirmhelligkeit&lt;br /&gt;
* Vollbildmodus An/Aus&lt;br /&gt;
* Bildschirmausrichtung Auto/Landscape/Portrait&lt;br /&gt;
* Standardlautstärke&lt;br /&gt;
* Media Lautstärke&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Mit etwas Einarbeitung können jegliche Informationen welche Automagic bereit stellt, in FHEM angezeigt werden. Hierzu bedarf es lediglich eines eigenen Flows welcher seine Daten an die AMADCommBridge sendet. Das Modul gibt auch die Möglichkeit Androidgeräte zu steuern.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= AMADCommBridge - Kommunikationsbrücke für alle AMAD Geräte =&lt;br /&gt;
Dieses Modul ist das Ausgangsmodul zur erfolgreichen Integration von Androidgeräten in FHEM. Es stellt ferner eine Verbindungsebene zwischen AMAD unterstützten Geräten und FHEM zur Verfügung. Alle Kommunikation zwischen AMAD Android und FHEM läuft über diese Schnittstelle.&lt;br /&gt;
Daher erfolgt die Ersteinrichtung eines AMAD Devices auch genau über diese Modulinstanz. &lt;br /&gt;
&lt;br /&gt;
Damit erfolgreich ein Androidgerät in FHEM eingerichtet werden kann, muss im ersten Schritt ein AMADCommBridge Device angelegt werden.&lt;br /&gt;
&lt;br /&gt;
=== Definition in FHEM ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; AMADCommBridge&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== Beispiel ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define AMADBridge AMADCommBridge&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Anweisung erstellt ein neues AMADCommBridge Device Namens AMADBridge.&lt;br /&gt;
&lt;br /&gt;
Im folgenden muß lediglich das Flowset auf dem Android Gerät installiert werden und der Flow &#039;First Run Assistent&#039; ausgeführt werden. (einfach den Homebutton drücken)&lt;br /&gt;
Der Assistent geleitet Dich dann durch die Einrichtung Deines AMAD Gerätes und sorgt dafür das am Ende des Installationsprozess das Androidgerät als AMAD Device in FHEM angelegt wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
* JSON_ERROR - JSON Fehlermeldung welche von Perl gemeldet wird&lt;br /&gt;
* JSON_ERROR_STRING - der String welcher die JSON Fehlermeldung verursacht hat&lt;br /&gt;
* fhemServerIP - die Ip-Adresse des FHEM Servers, wird vom Modul auf Basis des JSON Strings vom Installationsassistenten gesetzt. Kann aber auch mittels set Befehles vom User gesetzt werden&lt;br /&gt;
* receiveFhemCommand - ist das Attribut fhemControlMode auf trigger gestellt, wird das Reading gesetzt sobald ein FHEM Befehl übersendet wird. Hierauf kann dann ein Notify triggern. Wird anstelle von trigger setControl als Wert für fhemControlMode eingestellt, wird das Reading nicht gestzt sondern der set Befehl sofort ausgeführt.&lt;br /&gt;
* receiveVoiceCommand - wird die Sprachsteuerung von AMAD aktiviert (set DEVICE activateVoiceInput) so wird der letzte erkannten Sprachbefehle in dieses Reading geschrieben.&lt;br /&gt;
* receiveVoiceDevice - Name des Devices von wo aus der letzte erkannte Sprachbefehl gesendet wurde&lt;br /&gt;
* state - Status der Bridge, open, closed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
* allowFrom - Regexp der erlaubten IP-Adressen oder Hostnamen. Wenn dieses Attribut gesetzt wurde, werden ausschließlich Verbindungen von diesen Adressen akzeptiert. Achtung: falls allowfrom nicht gesetzt ist, und keine gütige allowed Instanz definiert ist, und die Gegenstelle eine nicht lokale Adresse hat, dann wird die Verbindung abgewiesen. Folgende Adressen werden als local betrachtet: IPV4: 127/8, 10/8, 192.168/16, 172.16/10, 169.254/16, IPV6: ::1, fe80/10&lt;br /&gt;
* debugJSON - wenn auf 1 gesetzt, werden JSON Fehlermeldungen in Readings geschrieben. Siehe hierzu JSON_ERROR* unter Readings&lt;br /&gt;
* fhemControlMode - steuert die zulässige Art der Kontrolle von FHEM Devices. Du kannst über die Bridge auf 2 Arten FHEM Devices steuern. Entweder per direktem FHEM Befehl aus einem Flow heraus, oder als Sprachbefehl mittels Sprachsteuerung (set DEVICE activateVoiceInput)&lt;br /&gt;
** trigger - ist der Wert trigger gesetzt, werden alle an die Bridge gesendeten FHEM set Befehle in das Reading receiveFhemCommand geschrieben und können so mittels notify ausgeführt werden. Sprachsteuerung ist möglich, es werden Readings receiveVoice* gesetzt. Auf dem Androidgerät können bei Sprachsteuerung mehrere Sprachbefehle mittels &amp;quot;und&amp;quot; verknüpft/aneinander gereiht werden. Bsp: schalte die Lichtszene Abends an und schalte den Fernsehr an&lt;br /&gt;
** setControl - alle set Befehle welche mittels eines Flows über die Bridge gesendet werden, werden automatisch ausgeführt. Das triggern eines Readings ist nicht nötig. Die Steuerung mittels Sprache verhält sich wie beim Wert trigger&lt;br /&gt;
** thirdPartControl - verhält sich wie trigger, bei der Sprachsteuerung ist jedoch ein anreihen von Sprachbefehlen mittels &amp;quot;und&amp;quot; nicht möglich. Dient der Sprachsteuerung über Module anderer Modulautoren ((z.B. 39_TEERKO.pm)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= AMADDevice - Automagic Android Device =&lt;br /&gt;
Dieses Modul liefert, in Verbindung mit der Android APP Automagic, diverse Informationen von Android Geräten. Die AndroidAPP Automagic (welche nicht von mir stammt und 2.90 Euro kostet) funktioniert wie Tasker, ist aber bei weitem User freundlicher. &lt;br /&gt;
Mit etwas Einarbeitung können jegliche Informationen welche Automagic bereit stellt in FHEM angezeigt werden. Hierzu bedarf es lediglich eines eigenen Flows welcher seine Daten an die AMADDeviceCommBridge sendet. Das Modul gibt auch die Möglichkeit Androidgeräte zu steuern. &lt;br /&gt;
Für all diese Aktionen und Informationen wird auf dem Androidgerät &amp;quot;Automagic&amp;quot; und ein so genannter Flow benötigt. Die App ist über den Google PlayStore zu beziehen. Das benötigte Flowset bekommt man aus dem FHEM Verzeichnis. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Wie genau verwendet man nun AMADDevice? ===&lt;br /&gt;
* stelle sicher das als aller erstes die AMADCommBridge in FHEM definiert wurde&lt;br /&gt;
* installiere die App &amp;quot;Automagic Premium&amp;quot; aus dem PlayStore.&lt;br /&gt;
* installiere das Flowset 74_AMADDeviceautomagicFlowset$VERSION.xml aus dem Ordner $INSTALLFHEM/FHEM/lib/ auf dem Androidgerät&lt;br /&gt;
* aktiviere den Installationsassistanten Flow in Automagic. Wenn man nun Automagic in den Hintergrund schickt, z.B. Hometaste drücken, startet der Assistant und legt automatisch ein Device für das Androidgerät an.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ein AMADDevice Gerät von Hand anlegen. ===&lt;br /&gt;
&lt;br /&gt;
Define&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;10.6.9.10 1496497380000 IODev=AMADBridge define &amp;lt;name&amp;gt; AMADDevice &amp;lt;IP-ADRESSE&amp;gt; &amp;lt;AMAD_ID&amp;gt; IODev=&amp;lt;IODEVICE&amp;gt; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Beispiel ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define WandTabletWohnzimmer AMADDevice 192.168.0.23 123456 IODev=NAME_des_AMADCommBridge_Devices&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Fall wird ein AMADDevice von Hand angelegt. Die AMAD_ID, hier 123456, muß auch exakt so als globale Variable in Automagic eingetragen sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
* airplanemode - Status des Flugmodus&lt;br /&gt;
* androidVersion - aktuell installierte Androidversion&lt;br /&gt;
* automagicState - Statusmeldungen von der AutomagicApp &#039;&#039;&#039;(Voraussetzung Android &amp;gt;4.3). Ist Android größer 4.3 vorhanden und im Reading steht &amp;quot;wird nicht unterstützt&amp;quot;, muß in den Androideinstellungen unter Ton und Benachrichtigungen -&amp;gt; Benachrichtigungszugriff ein Haken für Automagic gesetzt werden&#039;&#039;&#039;&lt;br /&gt;
* batteryHealth - Zustand der Battery (1=unbekannt, 2=gut, 3=Überhitzt, 4=tot, 5=Überspannung, 6=unbekannter Fehler, 7=kalt)&lt;br /&gt;
* batterytemperature - Temperatur der Batterie&lt;br /&gt;
* bluetooth - on/off, Bluetooth Status an oder aus&lt;br /&gt;
* checkActiveTask - Zustand einer zuvor definierten APP. 0=nicht aktiv oder nicht aktiv im Vordergrund, 1=aktiv im Vordergrund, &#039;&#039;&#039;siehe Hinweis unten&#039;&#039;&#039;&lt;br /&gt;
* connectedBTdevices - eine Liste der verbundenen Gerät&lt;br /&gt;
* connectedBTdevicesMAC - eine Liste der MAC Adressen aller verbundender BT Geräte&lt;br /&gt;
* currentMusicAlbum - aktuell abgespieltes Musikalbum des verwendeten Mediaplayers&lt;br /&gt;
* currentMusicApp - aktuell verwendeter Mediaplayer (Amazon Music, Google Play Music, Google Play Video, Spotify, YouTube, TuneIn Player, Aldi Life Music)&lt;br /&gt;
* currentMusicArtist - aktuell abgespielter Musikinterpret des verwendeten Mediaplayers&lt;br /&gt;
* currentMusicIcon - Cover vom aktuell abgespielten Album &#039;&#039;&#039;Noch nicht fertig implementiert&#039;&#039;&#039;&lt;br /&gt;
* currentMusicState - Status des aktuellen/zuletzt verwendeten Mediaplayers&lt;br /&gt;
* currentMusicTrack - aktuell abgespielter Musiktitel des verwendeten Mediaplayers&lt;br /&gt;
* daydream - on/off, Daydream gestartet oder nicht&lt;br /&gt;
* deviceState - Status des Androidgerätes. unknown, online, offline.&lt;br /&gt;
* doNotDisturb - aktueller Status des nicht stören Modus&lt;br /&gt;
* dockingState - undocked/docked Status ob sich das Gerät in einer Dockinstation befindet.&lt;br /&gt;
* flow_SetCommands - active/inactive, Status des SetCommands Flow&lt;br /&gt;
* flow_informations - active/inactive, Status des Informations Flow&lt;br /&gt;
* flowsetVersionAtDevice - aktuell installierte Flowsetversion auf dem Device&lt;br /&gt;
* incomingCallerName - Anrufername des eingehenden Anrufes&lt;br /&gt;
* incomingCallerNumber - Anrufernummer des eingehenden Anrufes&lt;br /&gt;
* incommingWhatsAppMessageFrom - letzte WhatsApp Nachricht&lt;br /&gt;
* incommingWhatsTelegramMessageFrom - letzte Telegram Nachricht&lt;br /&gt;
* intentRadioName - zuletzt gesrreamter Intent Radio Name&lt;br /&gt;
* intentRadioState - Status des IntentRadio Players&lt;br /&gt;
* keyguardSet - 0/1 Displaysperre gesetzt 0=nein 1=ja, bedeutet nicht das sie gerade aktiv ist&lt;br /&gt;
* lastSetCommandError - letzte Fehlermeldung vom set Befehl&lt;br /&gt;
* lastSetCommandState - letzter Status vom set Befehl, Befehl erfolgreich/nicht erfolgreich gesendet&lt;br /&gt;
* lastStatusRequestError - letzte Fehlermeldung vom statusRequest Befehl&lt;br /&gt;
* lastStatusRequestState - letzter Status vom statusRequest Befehl, Befehl erfolgreich/nicht erfolgreich gesendet&lt;br /&gt;
* nextAlarmDay - aktiver Alarmtag&lt;br /&gt;
* nextAlarmState - aktueller Status des &amp;quot;Androidinternen&amp;quot; Weckers&lt;br /&gt;
* nextAlarmTime - aktive Alarmzeit&lt;br /&gt;
* powerLevel - Status der Batterie in %&lt;br /&gt;
* powerPlugged - Netzteil angeschlossen? 0=NEIN, 1|2=JA&lt;br /&gt;
* screen - on locked/unlocked, off locked/unlocked gibt an ob der Bildschirm an oder aus ist und gleichzeitig gesperrt oder nicht gesperrt&lt;br /&gt;
* screenBrightness - Bildschirmhelligkeit von 0-255&lt;br /&gt;
* screenFullscreen - on/off, Vollbildmodus (An,Aus)&lt;br /&gt;
* screenOrientation - Landscape,Portrait, Bildschirmausrichtung (Horizontal,Vertikal)&lt;br /&gt;
* screenOrientationMode - auto/manual, Modus für die Ausrichtung (Automatisch, Manuell)&lt;br /&gt;
* state - aktueller Status&lt;br /&gt;
* userFlowState - aktueller Status eines Flows, festgelegt unter dem setUserFlowState Attribut&lt;br /&gt;
* volume - Media Lautstärkewert&lt;br /&gt;
* volumeNotification - Benachrichtigungs Lautstärke&lt;br /&gt;
&lt;br /&gt;
Beim Reading checkActivTask muß zuvor der Packagename der zu prüfenden App als Attribut checkActiveTask angegeben werden. Beispiel: attr Nexus10Wohnzimmer checkActiveTask com.android.chrome für den Chrome Browser.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Set ===&lt;br /&gt;
* activateVoiceInput - aktiviert die Spracheingabe&lt;br /&gt;
* bluetooth - on/off, aktiviert/deaktiviert Bluetooth&lt;br /&gt;
* clearNotificationBar - All,Automagic, löscht alle Meldungen oder nur die Automagic Meldungen in der Statusleiste&lt;br /&gt;
* closeCall - beendet einen laufenden Anruf&lt;br /&gt;
* currentFlowsetUpdate - fürt ein Flowsetupdate auf dem Device durch&lt;br /&gt;
* doNotDisturb - schaltet den nicht stören Modus, always immer stören, never niemals stören, alarmClockOnly nur Wecker darf stören, onlyImportant nur wichtige Störungen&lt;br /&gt;
* installFlowSource - installiert einen Flow auf dem Device, &amp;lt;u&amp;gt;das XML File muss unter /tmp/ liegen und die Endung xml haben. &amp;lt;b&amp;gt;Bsp:&amp;lt;/b&amp;gt; set TabletWohnzimmer installFlowSource WlanUebwerwachen.xml&amp;lt;/u&amp;gt;&lt;br /&gt;
* mediaAmazonMusic - play, stop, next, back ,steuert den Amazon Musik Mediaplayer&lt;br /&gt;
* mediaGoogleMusic - play, stop, next, back ,steuert den Google Play Musik Mediaplayer&lt;br /&gt;
* mediaSpotifyMusic - play, stop, next, back ,steuert den Spotify Mediaplayer&lt;br /&gt;
* mediaTuneinRadio - play, stop, next, back ,steuert den TuneIn Radio Mediaplayer&lt;br /&gt;
* mediaAldiMusic - play, stop, next, back ,steuert den Aldi Musik Mediaplayer&lt;br /&gt;
* mediaAudible - play, stop, next, back ,steuert den Audible Mediaplayer&lt;br /&gt;
* mediaYouTube - play, stop, next, back ,steuert den YouTube Mediaplayer&lt;br /&gt;
* mediaVlcPlayer - play, stop, next, back ,steuert den VLC Mediaplayer&lt;br /&gt;
* nextAlarmTime - setzt die Alarmzeit. gilt aber nur innerhalb der nächsten 24Std.&lt;br /&gt;
* openCall - ruft eine Nummer an und legt optional nach X Sekunden auf / set DEVICE openCall 01736458 10 / ruft die Nummer an und beendet den Anruf nach 10s&lt;br /&gt;
* screen - on/off/lock/unlock schaltet den Bildschirm ein/aus oder sperrt/entsperrt ihn&lt;br /&gt;
* screenBrightness - setzt die Bildschirmhelligkeit, von 0-255.&lt;br /&gt;
* screenMsg - versendet eine Bildschirmnachricht&lt;br /&gt;
* sendintent - sendet einen Intentstring Bsp: set $AMADDeviceDEVICE sendIntent org.smblott.intentradio.PLAY url http://stream.klassikradio.de/live/mp3-192/stream.klassikradio.de/play.m3u name Klassikradio, der erste Befehl ist die Aktion und der zweite das Extra. Es können immer zwei Extras mitgegeben werden.&lt;br /&gt;
* sendSMS - sendet eine SMS an eine bestimmte Telefonnummer. Bsp.: sendSMS Dies ist ein Test|555487263&lt;br /&gt;
* startDaydream - startet den Daydream&lt;br /&gt;
* statusRequest - Fordert einen neuen Statusreport beim Device an. Es können nicht von allen Readings per statusRequest die Daten geholt werden. Einige wenige geben nur bei Statusänderung ihren Status wieder.&lt;br /&gt;
* timer - setzt einen Timer innerhalb der als Standard definierten ClockAPP auf dem Device. Es können nur Sekunden angegeben werden.&lt;br /&gt;
* ttsMsg - versendet eine Nachricht welche als Sprachnachricht ausgegeben wird&lt;br /&gt;
* userFlowState - aktiviert oder deaktiviert einen oder mehrere Flows,&#039;&#039;&#039;set Nexus7Wohnzimmer Badezimmer vorheizen:inactive oder set Nexus7Wohnzimmer Badezimmer vorheizen,Nachtlicht Steven:inactive&#039;&#039;&#039;&lt;br /&gt;
* vibrate - lässt das Androidgerät vibrieren&lt;br /&gt;
* volume - setzt die Medialautstärke. Entweder die internen Lautsprecher oder sofern angeschlossen die Bluetoothlautsprecher und per Klinkenstecker angeschlossene Lautsprecher, + oder - vor dem Wert reduziert die aktuelle Lautstärke um den Wert. Der maximale Sliderwert kann über das Attribut setVolMax geregelt werden.&lt;br /&gt;
* volumeUp - erhöh;t die Lautstärke um den angegeben Wert im entsprechenden Attribut. Ist kein Attribut angegeben wird per default 2 genommen.&lt;br /&gt;
* volumeDown - reduziert die Lautstärke um den angegeben Wert im entsprechenden Attribut. Ist kein Attribut angegeben wird per default 2 genommen.&lt;br /&gt;
* volumeNotification - setzt die Benachrichtigungslautstärke.&lt;br /&gt;
&lt;br /&gt;
==== Set abhängig von gesetzten Attributen ====&lt;br /&gt;
* changetoBtDevice - wechselt zu einem anderen Bluetooth Gerät. Attribut setBluetoothDevice muß gesetzt sein. Siehe Hinweis unten!&lt;br /&gt;
* notifySndFile - spielt die angegebene Mediadatei auf dem Androidgerät ab. Die aufzurufende Mediadatei sollte sich im Ordner /storage/emulated/0/Notifications/ befinden. Ist dies nicht der Fall kann man über das Attribut setNotifySndFilePath einen Pfad vorgeben.&lt;br /&gt;
* openApp - öffnet eine ausgewählte App. Attribut setOpenApp&lt;br /&gt;
* openURL - öffnet eine URL im Standardbrowser, sofern kein anderer Browser über das Attribut setOpenUrlBrowser ausgewählt wurde. Bsp: attr Tablet setOpenUrlBrowser de.ozerov.fully|de.ozerov.fully.MainActivity, das erste ist der Package Name und das zweite der Class Name&lt;br /&gt;
* setAPSSID - setzt die AccessPoint SSID um ein WLAN sleep zu verhindern&lt;br /&gt;
* setScreenOnForTimer ändert die Zeit wie lange das Display an bleiben soll!&lt;br /&gt;
* screenFullscreen - on/off, (aktiviert/deaktiviert) den Vollbildmodus. Attribut setFullscreen&lt;br /&gt;
* screenLock - Sperrt den Bildschirm mit Pinabfrage. Attribut setScreenlockPIN - hier die Pin dafür eingeben. Erlaubt sind nur Zahlen. Es müßen mindestens 4, bis max 16 Zeichen verwendet werden.&lt;br /&gt;
* screenOrientation - Auto,Landscape,Portait, aktiviert die Bildschirmausrichtung (Automatisch,Horizontal,Vertikal). Attribut setScreenOrientation&lt;br /&gt;
* system - setzt Systembefehle ab (nur bei gerootetet Geräen). reboot,shutdown,airplanemodeON (kann nur aktiviert werden) Attribut root, in den Automagic Einstellungen muss &amp;quot;Root Funktion&amp;quot; gesetzt werden&lt;br /&gt;
* setNotifySndFilePath - setzt den korrekten Systempfad zur Notifydatei (default ist /storage/emulated/0/Notifications/&lt;br /&gt;
* setTtsMsgSpeed - setzt die Sprachgeschwindigkeit bei der Sprachausgabe(Werte zwischen 0.5 bis 4.0 in 0.5er Schritten) default ist 1.0&lt;br /&gt;
* setTtsMsgSpeed - setzt die Sprache bei der Sprachausgabe, de oder en (default ist de)&lt;br /&gt;
* setVolUpDownStep - setzt den Step für volumeUp und volumeDown&lt;br /&gt;
* setVolMax - setzt die maximale Volume Gr&amp;amp;uoml;e für den Slider&lt;br /&gt;
* setNotifyVolMax - setzt den maximalen Lautstärkewert für Benachrichtigungslautstärke für den Slider&lt;br /&gt;
* setRingSoundVolMax - setzt den maximalen Lautstärkewert für Klingellautstärke für den Slider&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Um openApp verwenden zu können, muss als Attribut der Package Name der App angegeben werden. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Um zwischen Bluetoothgeräten wechseln zu können, muß das Attribut setBluetoothDevice mit folgender Syntax gesetzt werden. attr &amp;lt;DEVICE&amp;gt; BTdeviceName1|MAC,BTDeviceName2|MAC Es muss zwingend darauf geachtet werden das beim BTdeviceName kein Leerzeichen vorhanden ist. Am besten zusammen oder mit Unterstrich. Achtet bei der MAC darauf das Ihr wirklich nach jeder zweiten Zahl auch einen : drin habt&lt;br /&gt;
&lt;br /&gt;
** &#039;&#039;&#039;Beispiel: attr Nexus10Wohnzimmer setBluetoothDevice Logitech_BT_Adapter|AB:12:CD:34:EF:32,Anker_A3565|GH:56:IJ:78:KL:76&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== state ===&lt;br /&gt;
* initialized - Ist der Status kurz nach einem define.&lt;br /&gt;
* active - die Geräteinstanz ist im aktiven Status.&lt;br /&gt;
* disabled - die Geräteinstanz wurde über das Attribut disable deaktiviert&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Anwendungsbeispiele==&lt;br /&gt;
=== Lademanagement ===&lt;br /&gt;
Ich habe die Ladegeräte für meine Androidgeräte an Funkschaltsteckdosen. ein DOIF schaltet bei unter 30% die Steckdose ein und bei über 90% wieder aus.&lt;br /&gt;
&lt;br /&gt;
Hier mal ein einfaches DOIF Beispiel für ein Lademanagment&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
... DOIF ([Nexus5Handy:powerLevel] &amp;lt; 30) (set LadenetzteilNexus5Handy:FILTER=STATE=off on) DOELSEIF ([Nexus5Handy:powerLevel] &amp;gt; 90) (set LadenetzteilNexus5Handy:FILTER=STATE=on off) DOELSE&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Wecker ===&lt;br /&gt;
Morgens lasse ich mich über mein Tablet im Schlafzimmer mit Musik wecken. Verwendet wird hierzu der wakeuptimer des RESIDENTS Modules. Das abspielen stoppe ich dann von Hand. Danach erfolgt noch eine Ansage wie das Wetter gerade ist und wird.&lt;br /&gt;
&lt;br /&gt;
=== Mediacenter ===&lt;br /&gt;
Mein 10&amp;quot; Tablet im Wohnzimmer ist Mediaplayer für das Wohnzimmer mit Bluetoothlautsprechern. Die Lautstärke wird automatisch runter gesetzt wenn die Fritzbox einen Anruf auf das Wohnzimmer Handgerät signalisiert.&lt;br /&gt;
&lt;br /&gt;
=== Sprachbefehl - Abfragen von Zuständen diverser Sensoren ===&lt;br /&gt;
Wenn ich die Spracheingabe aktiviere und nach der Temperatur im Wohnzimmer frage, bekomme ich diese angesagt.&lt;br /&gt;
&lt;br /&gt;
Der Teil im Feld Daten ist ein klassisches RadingsVal, halt nur ohne Komma und ohne Anführungszeichen&lt;br /&gt;
&lt;br /&gt;
WIRD GERADE ÜBERARBEITET&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Schaltbefehle vom Androidgerät an FHEM senden ===&lt;br /&gt;
Hierfür richte bitte einen eigen Flow ein. Wie das genau geht, verrät Dir die Hilfe.&lt;br /&gt;
Um einen Schaltbefehl für FHEM zu erstellen, folgt nach dem Trigger eine Aktion als Script (Aktion Type: Script). Hier trägst Du folgendes ein&lt;br /&gt;
&lt;br /&gt;
setcmd = &amp;quot;LichtWohnzimmerLampeRechts on&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;set&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In der ersten Zeile wird also der Schaltbefehl in der Variablem setcmd eingetragen und in der zweiten Zeile der FHEM Befehl in der Variablen fhemcmd.&lt;br /&gt;
&lt;br /&gt;
Danach müsst Ihr nur noch in einer weiteren Aktion den Flow &amp;quot;Send Data to AMADCommBridge&amp;quot; ausführen (Aktion Type: Flows ausführen). Die Aktion sollte bereits in Eurer Liste Vorhanden sein.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Screenshot_20160717-134948.png|200px]]&lt;br /&gt;
[[Datei:Screenshot 17.07.2016 1-50-27.png|200px]]&lt;br /&gt;
&lt;br /&gt;
Nun sollte Lampe1 angeschalten werden wenn der Flow ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bekannte Meldungen/Hinweise/Probleme ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn auf dem Android-Gerät die Fehlermeldung &#039;Accessibility service not running&#039; von Automagic kommt, oder im FHEM das reading state  &#039;Flow Informations mit Fehler beendet&#039; steht, dann muss der Accessibility Service auf dem Android-Device aktiviert werden: Einstellungen --&amp;gt; Bedienungshilfen --&amp;gt; Automagic Premium. Hier muss der Schalter auf &#039;an&#039; stehen. Sollte dies der Fall sein, hilft u.U. ein kurzes Aus- und wieder Einschalten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Gerät wird oft als offline angezeigt und es können keine set Befehle abgesetzt werden.&lt;br /&gt;
Mit der AMAD Version 2.2 hielt eine neue Behandlung des deviceState Readings Einzug. Das Reading stellt nun den tatsächlichen Status des Gerätes gegenüber FHEM da. Bei vielen Android 6 Geräten kommt es aber auf Grund vom DeepSleep Modus zum wegfall der WLAN Verbindung. Hier hilft die neue KeepAlive Funktion in AMAD. Dafür muß lediglich unter &lt;br /&gt;
* Einstellungen --&amp;gt; Akku --&amp;gt; oben auf die drei Punkte - Akku Leistungsoptimierung --&amp;gt; alle Apps und dann Automagic auswählen und &amp;quot;Nicht optimieren&amp;quot;&lt;br /&gt;
ausgewählt werden. Alles andere macht das Modul selbst.&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HEOS&amp;diff=21847</id>
		<title>HEOS</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HEOS&amp;diff=21847"/>
		<updated>2017-07-24T12:34:35Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuern und auslesen des Denon Multiroom-Soundsystem&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Multimedia&lt;br /&gt;
|ModTechName=21_HEOSMaster, 21_HEOSPlayer, 21_HEOSGroup&lt;br /&gt;
|ModOwner=CoolTux &amp;lt;br /&amp;gt;([http://forum.fhem.de/index.php?action=profile;u=13684 Forum] / [[Benutzer:CoolTux|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= HEOSMaster / HEOSPlayer / HEOSGroup =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== HEOSMaster ==&lt;br /&gt;
In Kombination mit HEOSPlayer und HEOSGroup steuert dieses FHEM Modul das Denon Multiroom-Soundsystem mit Hilfe einer telnet Socket-Verbindung und dem HEOS Command Line Interface (CLI). &lt;br /&gt;
&lt;br /&gt;
=== Voraussetzung ===&lt;br /&gt;
Installation der folgenden Pakete: apt-get install libjson-perl libnet-telnet-perl libencode-perl&lt;br /&gt;
&lt;br /&gt;
=== Define ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; HEOSMaster &amp;lt;IP address&amp;gt;&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define MyMasterBox HEOSMaster 192.168.178.67&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;IP address&amp;gt; ist die IP-Adresse des HEOS Receivers oder der HEOS Box. Das Master Device wird im Raum HEOS angelegt und danach erfolgt das Einlesen und automatische Anlegen der Player. Von nun an können die Player gesteuert werden. Außerdem wird der Status und die Media Readings der Player entsprechend geändert, wenn man in der HEOS-App oder direkt am Receiver etwas ändert. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
* enableChangeEvents - Status der Event Wiedergabe auf dem CLI Master&lt;br /&gt;
* heosAccount - signed_out | signed_in as &amp;lt;HEOSAccount&amp;gt;&lt;br /&gt;
* lastCommand - zuletzt ausgeführtes Kommando&lt;br /&gt;
* lastPlayerId - Player-Id des Geräts, welches das Kommando ausgeführt hat&lt;br /&gt;
* lastPlayerName - Player-Name des Geräts, welches das Kommando ausgeführt hat&lt;br /&gt;
* lastResult - Ergebnis des zuletzt ausgeführten Kommandos&lt;br /&gt;
* state - Status des HEOSMaster&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Set ===&lt;br /&gt;
* checkAccount - prüft das HEOS Konto&lt;br /&gt;
* enableChangeEvents - aktiviert die Event Wiedergabe auf dem CLI Master&lt;br /&gt;
* getGroups - holt eine Liste aller Gruppen und legt die Devices an, sofern noch nicht geschehen&lt;br /&gt;
* getPlayers - holt eine Liste aller Player und legt die Devices an, sofern noch nicht vorhanden&lt;br /&gt;
* password - setzt das Passwort des HEOS Kontos&lt;br /&gt;
* reboot - rebootet das CLI Interface am Master&lt;br /&gt;
* reopen - versucht eine neue Socket-Verbindung zum CLI Master aufzubauen&lt;br /&gt;
* signAccount In|Out - anmelden|abmelden am HEOS Konto (attr MyMasterBox heosUsername &amp;lt;username&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Get ===&lt;br /&gt;
* ShowAccount - zeigt das HEOS Konto an&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== State ===&lt;br /&gt;
* connected - der HEOSmaster ist mit dem CLI Master verbunden&lt;br /&gt;
* not connected - der HEOSmaster ist nicht mit dem CLI Master verbunden&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
* heosUsername - Benutzername des HEOS Kontos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== HEOSPlayer ==&lt;br /&gt;
In Kombination mit HEOSMaster and HEOSGroup steuert dieses FHEM Modul das Denon Multiroom-Soundsystem mit Hilfe einer telnet Socket-Verbindung und dem HEOS Command Line Interface (CLI). &lt;br /&gt;
&lt;br /&gt;
Nachdem der Master einmal angelegt ist werden die Player und Gruppierungen des Systems automatisch erkannt und in FHEM angelegt. Von da an können die Player und Gruppierungen gesteuert werden und Veränderungen in der HEOS App oder am Reveiver werden mit dem Status und den Media Readings der Player und Gruppierungen synchronisiert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
* channel - Nr des gerade abgespielten Favoriten&lt;br /&gt;
* currentAlbum - Name des gerade abgespielten Albums&lt;br /&gt;
* currentArtist - Name des gerade abgespielten Künstlers&lt;br /&gt;
* currentImageUrl - URL des Albumcovers, Senderlogos, etc.&lt;br /&gt;
* currentMedia - Medientyp des gerade abgespielten Streams (song|station|genre|artist|album|container)&lt;br /&gt;
* currentMid - media ID&lt;br /&gt;
* currentQid - queue ID&lt;br /&gt;
* currentSid - source ID&lt;br /&gt;
* currentStation - Name des gerade abgespielten Senders&lt;br /&gt;
* currentTitle - Name des gerade abgespielten Titels&lt;br /&gt;
* error - letzte Fehlermeldung&lt;br /&gt;
* gid - ID der Gruppe, in der der Player Mitglied ist&lt;br /&gt;
* ip-address - IP-Adresse des Players&lt;br /&gt;
* lineout - lineout level type (variable|Fixed)&lt;br /&gt;
* model - Modell des HEOS Lautsprechers (z.B. HEOS 1)&lt;br /&gt;
* mute - Player mute Status (on|off)&lt;br /&gt;
* name - Name des Players (aus der App übernommen)&lt;br /&gt;
* network - Netzwerkverbindung (wired|wifi)&lt;br /&gt;
* playStatus - Status des Players (play|pause|stop)&lt;br /&gt;
* repeat - Player Repeat Status (on_all|on_one|off)&lt;br /&gt;
* shuffle - Player Shuffle Status (on|off)&lt;br /&gt;
* state - Status der Player-Verbindung (on|off)&lt;br /&gt;
* version - Softwareversion des HEOS Lautsprechers&lt;br /&gt;
* volume - aktuelle Lautstärke (0-100)&lt;br /&gt;
* volumeDown - Schrittweite Lautstärke (1-10, default 5)&lt;br /&gt;
* volumeUp - Schrittweite Lautstärke (1-10, default 5)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Set ===&lt;br /&gt;
* aux - aktiviert die Quelle am AUX-Eingang des Players&lt;br /&gt;
* channel &amp;lt;nr&amp;gt; - spielt den vorher mit der App erstellten Favoriten &amp;lt;nr&amp;gt; ab&lt;br /&gt;
* channelUp - schaltet auf den nächsten Favoriten in der Favoritenliste um&lt;br /&gt;
* channelDown- schaltet auf vorherigen Favoriten in der Favoritenliste um&lt;br /&gt;
* clear queue - löscht die Warteschlange&lt;br /&gt;
* deletePlaylist &amp;lt;myList&amp;gt; - löscht die Playlist &amp;lt;myList&amp;gt;&lt;br /&gt;
* set &amp;lt;hp1&amp;gt; groupWithMember &amp;lt;hp2&amp;gt; - erzeugt eine Gruppierung mit hp1 als Leader und hp2 als Mitglied&lt;br /&gt;
* input sid[,cid][,mid] - setze input source-id[,container-id][,media-id]&lt;br /&gt;
**Beispiel: set Küche input 1027,1772574848,inputs/tvaudio, startet &amp;quot;TV-Audio&amp;quot; auf dem Player &amp;quot;Küche&amp;quot;&lt;br /&gt;
* mute on|off - setzt den mute Status on|off&lt;br /&gt;
* next - spielt nächsten Titel in Warteschlange&lt;br /&gt;
* pause - setzt den Status des Players auf &amp;quot;pause&amp;quot;&lt;br /&gt;
* play - setzt den Status des Players auf &amp;quot;play&amp;quot;&lt;br /&gt;
* playPlaylist &amp;lt;myList&amp;gt; - spielt die Playlist &amp;lt;myList&amp;gt; ab&lt;br /&gt;
* playQueueItem &amp;lt;nr&amp;gt; - spielt Titel &amp;lt;nr&amp;gt; in Warteschlange&lt;br /&gt;
* prev - spielt vorherigen Titel in Warteschlange&lt;br /&gt;
* repeat - setzt den Player Repeat Status (on_all|on_one|off)&lt;br /&gt;
* saveQueue &amp;lt;myList&amp;gt; - speichert die Warteschlange als Playlist &amp;lt;myList&amp;gt;&lt;br /&gt;
* shuffle - setzt den Player Shuffle Status auf on|off&lt;br /&gt;
* stop - setzt den Status des Players auf &amp;quot;stop&amp;quot;&lt;br /&gt;
* volume - setzt die Lautstärke auf 0..100&lt;br /&gt;
* volumeDown - verringert die Lautstärke um &amp;lt;volumeDown&amp;gt;&lt;br /&gt;
* volumeUp - erhöht die Lautstärke um &amp;lt;volumeUp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Get ===&lt;br /&gt;
* ls - listet Musikquellen (Eingänge, Playlists, Favoriten, Musik-Dienste, ...)&lt;br /&gt;
* channelscount - Anzahl der Favoriten&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== state ===&lt;br /&gt;
Status der Player-Verbindung (on|off)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
* channelring - Beim Erreichen des letzten Favoriten schaltet ChannelUp/Down im Kreis, also wieder auf den ersten/letzten Favoriten&lt;br /&gt;
* mute2play - Beim Betätigen der Mute-Taste am Lautsprecher wird auch der Stream angehalten&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== HEOSGroup ==&lt;br /&gt;
In Kombination mit HEOSMaster and HEOSPlayer steuert dieses FHEM Modul das Denon Multiroom-Soundsystem mit Hilfe einer telnet Socket-Verbindung und dem HEOS Command Line Interface (CLI). &lt;br /&gt;
&lt;br /&gt;
Nachdem der Master einmal angelegt ist werden die Player und Gruppierungen des Systems automatisch erkannt und in FHEM angelegt. Von da an können die Player und Gruppierungen gesteuert werden und Veränderungen in der HEOS App oder am Reveiver werden mit dem Status und den Media Readings der Player und Gruppierungen synchronisiert. &lt;br /&gt;
&lt;br /&gt;
Gruppierungen können aus einem Player heraus mit &amp;quot;groupWithMember&amp;quot; erzeugt werden. &lt;br /&gt;
&lt;br /&gt;
=== Beispiel ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;set Wohnzimmer groupWithMember Küche&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
... erzeugt eine Gruppierung namens &amp;quot;Wohnzimmer+Küche&amp;quot; mit dem Player &amp;quot;Wohnzimmer&amp;quot; als Leader und dem Player &amp;quot;Küche&amp;quot; als Mitglied. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
* channel - Nr des gerade abgespielten Favoriten&lt;br /&gt;
* currentAlbum - Name des gerade abgespielten Albums&lt;br /&gt;
* currentArtist - Name des gerade abgespielten Künstlers&lt;br /&gt;
* currentImageUrl - URL des Albumcovers, Senderlogos, etc.&lt;br /&gt;
* currentMedia - Medientyp des gerade abgespielten Streams (song|station|genre|artist|album|container)&lt;br /&gt;
* currentMid - media ID&lt;br /&gt;
* currentQid - queue ID&lt;br /&gt;
* currentSid - source ID&lt;br /&gt;
* currentStation - Name des gerade abgespielten Senders&lt;br /&gt;
* currentTitle - Name des gerade abgespielten Titels&lt;br /&gt;
* error - letzte Fehlermeldung&lt;br /&gt;
* gid - Gruppen-ID&lt;br /&gt;
* leader - Leader der Gruppierung&lt;br /&gt;
* member - Mitglied(er) der Gruppierung&lt;br /&gt;
* mute - Player mute Status (on|off)&lt;br /&gt;
* name - Name der Gruppierung&lt;br /&gt;
* playStatus - Status des Players (play|pause|stop)&lt;br /&gt;
* repeat - Player Repeat Status (on_all|on_one|off)&lt;br /&gt;
* shuffle - Player Shuffle Status (on|off)&lt;br /&gt;
* state - Status der Player-Verbindung (on|off)&lt;br /&gt;
* volume - aktuelle Lautstärke (0-100)&lt;br /&gt;
* volumeDown - Schrittweite Lautstärke (1-10, default 5)&lt;br /&gt;
* volumeUp - Schrittweite Lautstärke (1-10, default 5)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Set ===&lt;br /&gt;
* channel &amp;lt;nr&amp;gt; - spielt den vorher mit der App erstellten Favoriten &amp;lt;nr&amp;gt; ab&lt;br /&gt;
* channelUp - schaltet auf den nächsten Favoriten in der Favoritenliste um&lt;br /&gt;
* channelDown- schaltet auf vorherigen Favoriten in der Favoritenliste um&lt;br /&gt;
* clearGroup - Auflösen der Gruppierung (setzt state auf off)&lt;br /&gt;
* getGroupInfo - holt die Media-Informationen der Gruppierung&lt;br /&gt;
* mute on|off - setze den mute Status on|off&lt;br /&gt;
* next - spielt nächsten Titel in Warteschlange&lt;br /&gt;
* pause - setzt den Status des Players auf &amp;quot;pause&amp;quot;&lt;br /&gt;
* play - setzt den Status des Players auf &amp;quot;play&amp;quot;&lt;br /&gt;
* playPlaylist &amp;lt;myList&amp;gt; - spielt die Playlist &amp;lt;myList&amp;gt; ab&lt;br /&gt;
* prev - spielt vorherigen Titel in Warteschlange&lt;br /&gt;
* repeat - setzt den Player Repeat Status (on_all|on_one|off)&lt;br /&gt;
* shuffle - setzt den Player Shuffle Status auf on|off&lt;br /&gt;
* stop - setzt den Status des Players auf &amp;quot;stop&amp;quot;&lt;br /&gt;
* volume - setzt die Lautstärke auf 0..100&lt;br /&gt;
* volumeDown - verringert die Lautstärke um &amp;lt;volumeDown&amp;gt;&lt;br /&gt;
* volumeUp - erhöht die Lautstärke um &amp;lt;volumeUp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== State ===&lt;br /&gt;
* Status der Gruppierung (on|off)&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HEOS&amp;diff=21846</id>
		<title>HEOS</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HEOS&amp;diff=21846"/>
		<updated>2017-07-24T12:30:16Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: Die Seite wurde neu angelegt: „= HEOSMaster / HEOSPlayer / HEOSGroup =    == HEOSMaster == In Kombination mit HEOSPlayer und HEOSGroup steuert dieses FHEM Modul das Denon Multiroom-Soundsyst…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= HEOSMaster / HEOSPlayer / HEOSGroup =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== HEOSMaster ==&lt;br /&gt;
In Kombination mit HEOSPlayer und HEOSGroup steuert dieses FHEM Modul das Denon Multiroom-Soundsystem mit Hilfe einer telnet Socket-Verbindung und dem HEOS Command Line Interface (CLI). &lt;br /&gt;
&lt;br /&gt;
=== Voraussetzung ===&lt;br /&gt;
Installation der folgenden Pakete: apt-get install libjson-perl libnet-telnet-perl libencode-perl&lt;br /&gt;
&lt;br /&gt;
=== Define ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; HEOSMaster &amp;lt;IP address&amp;gt;&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define MyMasterBox HEOSMaster 192.168.178.67&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;IP address&amp;gt; ist die IP-Adresse des HEOS Receivers oder der HEOS Box. Das Master Device wird im Raum HEOS angelegt und danach erfolgt das Einlesen und automatische Anlegen der Player. Von nun an können die Player gesteuert werden. Außerdem wird der Status und die Media Readings der Player entsprechend geändert, wenn man in der HEOS-App oder direkt am Receiver etwas ändert. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
* enableChangeEvents - Status der Event Wiedergabe auf dem CLI Master&lt;br /&gt;
* heosAccount - signed_out | signed_in as &amp;lt;HEOSAccount&amp;gt;&lt;br /&gt;
* lastCommand - zuletzt ausgeführtes Kommando&lt;br /&gt;
* lastPlayerId - Player-Id des Geräts, welches das Kommando ausgeführt hat&lt;br /&gt;
* lastPlayerName - Player-Name des Geräts, welches das Kommando ausgeführt hat&lt;br /&gt;
* lastResult - Ergebnis des zuletzt ausgeführten Kommandos&lt;br /&gt;
* state - Status des HEOSMaster&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Set ===&lt;br /&gt;
* checkAccount - prüft das HEOS Konto&lt;br /&gt;
* enableChangeEvents - aktiviert die Event Wiedergabe auf dem CLI Master&lt;br /&gt;
* getGroups - holt eine Liste aller Gruppen und legt die Devices an, sofern noch nicht geschehen&lt;br /&gt;
* getPlayers - holt eine Liste aller Player und legt die Devices an, sofern noch nicht vorhanden&lt;br /&gt;
* password - setzt das Passwort des HEOS Kontos&lt;br /&gt;
* reboot - rebootet das CLI Interface am Master&lt;br /&gt;
* reopen - versucht eine neue Socket-Verbindung zum CLI Master aufzubauen&lt;br /&gt;
* signAccount In|Out - anmelden|abmelden am HEOS Konto (attr MyMasterBox heosUsername &amp;lt;username&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Get ===&lt;br /&gt;
* ShowAccount - zeigt das HEOS Konto an&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== State ===&lt;br /&gt;
* connected - der HEOSmaster ist mit dem CLI Master verbunden&lt;br /&gt;
* not connected - der HEOSmaster ist nicht mit dem CLI Master verbunden&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
* heosUsername - Benutzername des HEOS Kontos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== HEOSPlayer ==&lt;br /&gt;
In Kombination mit HEOSMaster and HEOSGroup steuert dieses FHEM Modul das Denon Multiroom-Soundsystem mit Hilfe einer telnet Socket-Verbindung und dem HEOS Command Line Interface (CLI). &lt;br /&gt;
&lt;br /&gt;
Nachdem der Master einmal angelegt ist werden die Player und Gruppierungen des Systems automatisch erkannt und in FHEM angelegt. Von da an können die Player und Gruppierungen gesteuert werden und Veränderungen in der HEOS App oder am Reveiver werden mit dem Status und den Media Readings der Player und Gruppierungen synchronisiert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
* channel - Nr des gerade abgespielten Favoriten&lt;br /&gt;
* currentAlbum - Name des gerade abgespielten Albums&lt;br /&gt;
* currentArtist - Name des gerade abgespielten Künstlers&lt;br /&gt;
* currentImageUrl - URL des Albumcovers, Senderlogos, etc.&lt;br /&gt;
* currentMedia - Medientyp des gerade abgespielten Streams (song|station|genre|artist|album|container)&lt;br /&gt;
* currentMid - media ID&lt;br /&gt;
* currentQid - queue ID&lt;br /&gt;
* currentSid - source ID&lt;br /&gt;
* currentStation - Name des gerade abgespielten Senders&lt;br /&gt;
* currentTitle - Name des gerade abgespielten Titels&lt;br /&gt;
* error - letzte Fehlermeldung&lt;br /&gt;
* gid - ID der Gruppe, in der der Player Mitglied ist&lt;br /&gt;
* ip-address - IP-Adresse des Players&lt;br /&gt;
* lineout - lineout level type (variable|Fixed)&lt;br /&gt;
* model - Modell des HEOS Lautsprechers (z.B. HEOS 1)&lt;br /&gt;
* mute - Player mute Status (on|off)&lt;br /&gt;
* name - Name des Players (aus der App übernommen)&lt;br /&gt;
* network - Netzwerkverbindung (wired|wifi)&lt;br /&gt;
* playStatus - Status des Players (play|pause|stop)&lt;br /&gt;
* repeat - Player Repeat Status (on_all|on_one|off)&lt;br /&gt;
* shuffle - Player Shuffle Status (on|off)&lt;br /&gt;
* state - Status der Player-Verbindung (on|off)&lt;br /&gt;
* version - Softwareversion des HEOS Lautsprechers&lt;br /&gt;
* volume - aktuelle Lautstärke (0-100)&lt;br /&gt;
* volumeDown - Schrittweite Lautstärke (1-10, default 5)&lt;br /&gt;
* volumeUp - Schrittweite Lautstärke (1-10, default 5)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Set ===&lt;br /&gt;
* aux - aktiviert die Quelle am AUX-Eingang des Players&lt;br /&gt;
* channel &amp;lt;nr&amp;gt; - spielt den vorher mit der App erstellten Favoriten &amp;lt;nr&amp;gt; ab&lt;br /&gt;
* channelUp - schaltet auf den nächsten Favoriten in der Favoritenliste um&lt;br /&gt;
* channelDown- schaltet auf vorherigen Favoriten in der Favoritenliste um&lt;br /&gt;
* clear queue - löscht die Warteschlange&lt;br /&gt;
* deletePlaylist &amp;lt;myList&amp;gt; - löscht die Playlist &amp;lt;myList&amp;gt;&lt;br /&gt;
* set &amp;lt;hp1&amp;gt; groupWithMember &amp;lt;hp2&amp;gt; - erzeugt eine Gruppierung mit hp1 als Leader und hp2 als Mitglied&lt;br /&gt;
* input sid[,cid][,mid] - setze input source-id[,container-id][,media-id]&lt;br /&gt;
**Beispiel: set Küche input 1027,1772574848,inputs/tvaudio, startet &amp;quot;TV-Audio&amp;quot; auf dem Player &amp;quot;Küche&amp;quot;&lt;br /&gt;
* mute on|off - setzt den mute Status on|off&lt;br /&gt;
* next - spielt nächsten Titel in Warteschlange&lt;br /&gt;
* pause - setzt den Status des Players auf &amp;quot;pause&amp;quot;&lt;br /&gt;
* play - setzt den Status des Players auf &amp;quot;play&amp;quot;&lt;br /&gt;
* playPlaylist &amp;lt;myList&amp;gt; - spielt die Playlist &amp;lt;myList&amp;gt; ab&lt;br /&gt;
* playQueueItem &amp;lt;nr&amp;gt; - spielt Titel &amp;lt;nr&amp;gt; in Warteschlange&lt;br /&gt;
* prev - spielt vorherigen Titel in Warteschlange&lt;br /&gt;
* repeat - setzt den Player Repeat Status (on_all|on_one|off)&lt;br /&gt;
* saveQueue &amp;lt;myList&amp;gt; - speichert die Warteschlange als Playlist &amp;lt;myList&amp;gt;&lt;br /&gt;
* shuffle - setzt den Player Shuffle Status auf on|off&lt;br /&gt;
* stop - setzt den Status des Players auf &amp;quot;stop&amp;quot;&lt;br /&gt;
* volume - setzt die Lautstärke auf 0..100&lt;br /&gt;
* volumeDown - verringert die Lautstärke um &amp;lt;volumeDown&amp;gt;&lt;br /&gt;
* volumeUp - erhöht die Lautstärke um &amp;lt;volumeUp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Get ===&lt;br /&gt;
* ls - listet Musikquellen (Eingänge, Playlists, Favoriten, Musik-Dienste, ...)&lt;br /&gt;
* channelscount - Anzahl der Favoriten&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== state ===&lt;br /&gt;
Status der Player-Verbindung (on|off)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
* channelring - Beim Erreichen des letzten Favoriten schaltet ChannelUp/Down im Kreis, also wieder auf den ersten/letzten Favoriten&lt;br /&gt;
* mute2play - Beim Betätigen der Mute-Taste am Lautsprecher wird auch der Stream angehalten&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== HEOSGroup ==&lt;br /&gt;
In Kombination mit HEOSMaster and HEOSPlayer steuert dieses FHEM Modul das Denon Multiroom-Soundsystem mit Hilfe einer telnet Socket-Verbindung und dem HEOS Command Line Interface (CLI). &lt;br /&gt;
&lt;br /&gt;
Nachdem der Master einmal angelegt ist werden die Player und Gruppierungen des Systems automatisch erkannt und in FHEM angelegt. Von da an können die Player und Gruppierungen gesteuert werden und Veränderungen in der HEOS App oder am Reveiver werden mit dem Status und den Media Readings der Player und Gruppierungen synchronisiert. &lt;br /&gt;
&lt;br /&gt;
Gruppierungen können aus einem Player heraus mit &amp;quot;groupWithMember&amp;quot; erzeugt werden. &lt;br /&gt;
&lt;br /&gt;
=== Beispiel ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;set Wohnzimmer groupWithMember Küche&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
... erzeugt eine Gruppierung namens &amp;quot;Wohnzimmer+Küche&amp;quot; mit dem Player &amp;quot;Wohnzimmer&amp;quot; als Leader und dem Player &amp;quot;Küche&amp;quot; als Mitglied. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
* channel - Nr des gerade abgespielten Favoriten&lt;br /&gt;
* currentAlbum - Name des gerade abgespielten Albums&lt;br /&gt;
* currentArtist - Name des gerade abgespielten Künstlers&lt;br /&gt;
* currentImageUrl - URL des Albumcovers, Senderlogos, etc.&lt;br /&gt;
* currentMedia - Medientyp des gerade abgespielten Streams (song|station|genre|artist|album|container)&lt;br /&gt;
* currentMid - media ID&lt;br /&gt;
* currentQid - queue ID&lt;br /&gt;
* currentSid - source ID&lt;br /&gt;
* currentStation - Name des gerade abgespielten Senders&lt;br /&gt;
* currentTitle - Name des gerade abgespielten Titels&lt;br /&gt;
* error - letzte Fehlermeldung&lt;br /&gt;
* gid - Gruppen-ID&lt;br /&gt;
* leader - Leader der Gruppierung&lt;br /&gt;
* member - Mitglied(er) der Gruppierung&lt;br /&gt;
* mute - Player mute Status (on|off)&lt;br /&gt;
* name - Name der Gruppierung&lt;br /&gt;
* playStatus - Status des Players (play|pause|stop)&lt;br /&gt;
* repeat - Player Repeat Status (on_all|on_one|off)&lt;br /&gt;
* shuffle - Player Shuffle Status (on|off)&lt;br /&gt;
* state - Status der Player-Verbindung (on|off)&lt;br /&gt;
* volume - aktuelle Lautstärke (0-100)&lt;br /&gt;
* volumeDown - Schrittweite Lautstärke (1-10, default 5)&lt;br /&gt;
* volumeUp - Schrittweite Lautstärke (1-10, default 5)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Set ===&lt;br /&gt;
* channel &amp;lt;nr&amp;gt; - spielt den vorher mit der App erstellten Favoriten &amp;lt;nr&amp;gt; ab&lt;br /&gt;
* channelUp - schaltet auf den nächsten Favoriten in der Favoritenliste um&lt;br /&gt;
* channelDown- schaltet auf vorherigen Favoriten in der Favoritenliste um&lt;br /&gt;
* clearGroup - Auflösen der Gruppierung (setzt state auf off)&lt;br /&gt;
* getGroupInfo - holt die Media-Informationen der Gruppierung&lt;br /&gt;
* mute on|off - setze den mute Status on|off&lt;br /&gt;
* next - spielt nächsten Titel in Warteschlange&lt;br /&gt;
* pause - setzt den Status des Players auf &amp;quot;pause&amp;quot;&lt;br /&gt;
* play - setzt den Status des Players auf &amp;quot;play&amp;quot;&lt;br /&gt;
* playPlaylist &amp;lt;myList&amp;gt; - spielt die Playlist &amp;lt;myList&amp;gt; ab&lt;br /&gt;
* prev - spielt vorherigen Titel in Warteschlange&lt;br /&gt;
* repeat - setzt den Player Repeat Status (on_all|on_one|off)&lt;br /&gt;
* shuffle - setzt den Player Shuffle Status auf on|off&lt;br /&gt;
* stop - setzt den Status des Players auf &amp;quot;stop&amp;quot;&lt;br /&gt;
* volume - setzt die Lautstärke auf 0..100&lt;br /&gt;
* volumeDown - verringert die Lautstärke um &amp;lt;volumeDown&amp;gt;&lt;br /&gt;
* volumeUp - erhöht die Lautstärke um &amp;lt;volumeUp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== State ===&lt;br /&gt;
* Status der Gruppierung (on|off)&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=AMAD&amp;diff=21845</id>
		<title>AMAD</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=AMAD&amp;diff=21845"/>
		<updated>2017-07-24T11:15:28Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuern von Adroidgeräten und Anzeige von bestimmten Informationen dieser Geräte&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Sonstige Systeme&lt;br /&gt;
|ModTechName=73_AMADCommBridge.pm, 74_AMADDevice.pm&lt;br /&gt;
|ModOwner=CoolTux &amp;lt;br /&amp;gt;([http://forum.fhem.de/index.php?action=profile;u=13684 Forum] / [[Benutzer:CoolTux|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= AMAD 4.0 [AMADNG] =&lt;br /&gt;
== 73_AMADCommBridge / 74_AMADDevice ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Vorwort =&lt;br /&gt;
=== Warum AMADNG ===&lt;br /&gt;
Nach nun fast 6 Monaten Entwicklungszeit nähert sich die Fertigstellung der neusten AMAD Version. Diesmal lagen mir mehrere Dinge am Herzen.&lt;br /&gt;
In erster Linie wollte ich eine softwareseitige Trennung der AMADCommBridge vom eigentlichen Android Device. Daher ist die neue Version ein zweistufiges Modul geworden.&lt;br /&gt;
Im Laufe der Entwicklung kamen auch andere Anforderungen welche ich nun fähig bin um zu setzen. Eine dieser Anforderungen war eine einfachere und besser funktionierende Installation. Raus gekommen ist ein Android Installationsassistant.&lt;br /&gt;
Mit ihm wird auf einfache Art und Weise direkt per Sprachführung und Eingabedialogen Automagic für AMAD konfiguriert und das Device in FHEM automatisch erstellt. Autocreate!&lt;br /&gt;
&lt;br /&gt;
= Vorstellung =&lt;br /&gt;
Dieses 2-stufige Modul liefert, &#039;&#039;&#039;in Verbindung mit der Android APP Automagic&#039;&#039;&#039;, diverse Informationen von Android Geräten. &lt;br /&gt;
Die AndroidAPP Automagic (welche nicht von mir stammt und 2.90 Euro kostet) funktioniert wie Tasker, ist aber bei weitem User freundlicher.&lt;br /&gt;
&lt;br /&gt;
=== Features / Funktionen ===&lt;br /&gt;
Im Auslieferiungszustand werden folgende Zustände dargestellt:&lt;br /&gt;
* installierte Android Version&lt;br /&gt;
* Zustand von Automagic auf dem Gerät&lt;br /&gt;
* Spracheingabe&lt;br /&gt;
* Bluetooth An/Aus&lt;br /&gt;
* Zustand einer definierten App (läuft aktiv im Vordergrund oder nicht?)&lt;br /&gt;
* verbundene Bluetoothgeräte, inklusive deren MAC Adresse&lt;br /&gt;
* aktuell abgespieltes Musikalbum des verwendeten Mediaplayers&lt;br /&gt;
* aktuell abgespielter Musikinterpret des verwendeten Mediaplayers&lt;br /&gt;
* aktuell abgespielter Musiktitel des verwendeten Mediaplayers&lt;br /&gt;
* Status des Androidgerätes - Online/Offline&lt;br /&gt;
* nächster Alarmtag&lt;br /&gt;
* nächste Alarmzeit&lt;br /&gt;
* Batteriestatus in %&lt;br /&gt;
* Ladestatus - Netztei angeschlossen / nicht angeschlossen&lt;br /&gt;
* Bildschirmstatus An/Aus&lt;br /&gt;
* Bildschirmhelligkeit&lt;br /&gt;
* Vollbildmodus An/Aus&lt;br /&gt;
* Bildschirmausrichtung Auto/Landscape/Portrait&lt;br /&gt;
* Standardlautstärke&lt;br /&gt;
* Media Lautstärke&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Mit etwas Einarbeitung können jegliche Informationen welche Automagic bereit stellt, in FHEM angezeigt werden. Hierzu bedarf es lediglich eines eigenen Flows welcher seine Daten an die AMADCommBridge sendet. Das Modul gibt auch die Möglichkeit Androidgeräte zu steuern.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= AMADCommBridge - Kommunikationsbrücke für alle AMAD Geräte =&lt;br /&gt;
Dieses Modul ist das Ausgangsmodul zur erfolgreichen Integration von Androidgeräten in FHEM. Es stellt ferner eine Verbindungsebene zwischen AMAD unterstützten Geräten und FHEM zur Verfügung. Alle Kommunikation zwischen AMAD Android und FHEM läuft über diese Schnittstelle.&lt;br /&gt;
Daher erfolgt die Ersteinrichtung eines AMAD Devices auch genau über diese Modulinstanz. &lt;br /&gt;
&lt;br /&gt;
Damit erfolgreich ein Androidgerät in FHEM eingerichtet werden kann, muss im ersten Schritt ein AMADCommBridge Device angelegt werden.&lt;br /&gt;
&lt;br /&gt;
=== Definition in FHEM ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; AMADCommBridge&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== Beispiel ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define AMADBridge AMADCommBridge&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Anweisung erstellt ein neues AMADCommBridge Device Namens AMADBridge.&lt;br /&gt;
&lt;br /&gt;
Im folgenden muß lediglich das Flowset auf dem Android Gerät installiert werden und der Flow &#039;First Run Assistent&#039; ausgeführt werden. (einfach den Homebutton drücken)&lt;br /&gt;
Der Assistent geleitet Dich dann durch die Einrichtung Deines AMAD Gerätes und sorgt dafür das am Ende des Installationsprozess das Androidgerät als AMAD Device in FHEM angelegt wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
* JSON_ERROR - JSON Fehlermeldung welche von Perl gemeldet wird&lt;br /&gt;
* JSON_ERROR_STRING - der String welcher die JSON Fehlermeldung verursacht hat&lt;br /&gt;
* fhemServerIP - die Ip-Adresse des FHEM Servers, wird vom Modul auf Basis des JSON Strings vom Installationsassistenten gesetzt. Kann aber auch mittels set Befehles vom User gesetzt werden&lt;br /&gt;
* receiveFhemCommand - ist das Attribut fhemControlMode auf trigger gestellt, wird das Reading gesetzt sobald ein FHEM Befehl übersendet wird. Hierauf kann dann ein Notify triggern. Wird anstelle von trigger setControl als Wert für fhemControlMode eingestellt, wird das Reading nicht gestzt sondern der set Befehl sofort ausgeführt.&lt;br /&gt;
* receiveVoiceCommand - wird die Sprachsteuerung von AMAD aktiviert (set DEVICE activateVoiceInput) so wird der letzte erkannten Sprachbefehle in dieses Reading geschrieben.&lt;br /&gt;
* receiveVoiceDevice - Name des Devices von wo aus der letzte erkannte Sprachbefehl gesendet wurde&lt;br /&gt;
* state - Status der Bridge, open, closed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
* allowFrom - Regexp der erlaubten IP-Adressen oder Hostnamen. Wenn dieses Attribut gesetzt wurde, werden ausschließlich Verbindungen von diesen Adressen akzeptiert. Achtung: falls allowfrom nicht gesetzt ist, und keine gütige allowed Instanz definiert ist, und die Gegenstelle eine nicht lokale Adresse hat, dann wird die Verbindung abgewiesen. Folgende Adressen werden als local betrachtet: IPV4: 127/8, 10/8, 192.168/16, 172.16/10, 169.254/16, IPV6: ::1, fe80/10&lt;br /&gt;
* debugJSON - wenn auf 1 gesetzt, werden JSON Fehlermeldungen in Readings geschrieben. Siehe hierzu JSON_ERROR* unter Readings&lt;br /&gt;
* fhemControlMode - steuert die zulässige Art der Kontrolle von FHEM Devices. Du kannst über die Bridge auf 2 Arten FHEM Devices steuern. Entweder per direktem FHEM Befehl aus einem Flow heraus, oder als Sprachbefehl mittels Sprachsteuerung (set DEVICE activateVoiceInput)&lt;br /&gt;
** trigger - ist der Wert trigger gesetzt, werden alle an die Bridge gesendeten FHEM set Befehle in das Reading receiveFhemCommand geschrieben und können so mittels notify ausgeführt werden. Sprachsteuerung ist möglich, es werden Readings receiveVoice* gesetzt. Auf dem Androidgerät können bei Sprachsteuerung mehrere Sprachbefehle mittels &amp;quot;und&amp;quot; verknüpft/aneinander gereiht werden. Bsp: schalte die Lichtszene Abends an und schalte den Fernsehr an&lt;br /&gt;
** setControl - alle set Befehle welche mittels eines Flows über die Bridge gesendet werden, werden automatisch ausgeführt. Das triggern eines Readings ist nicht nötig. Die Steuerung mittels Sprache verhält sich wie beim Wert trigger&lt;br /&gt;
** thirdPartControl - verhält sich wie trigger, bei der Sprachsteuerung ist jedoch ein anreihen von Sprachbefehlen mittels &amp;quot;und&amp;quot; nicht möglich. Dient der Sprachsteuerung über Module anderer Modulautoren ((z.B. 39_TEERKO.pm)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= AMADDevice - Automagic Android Device =&lt;br /&gt;
Dieses Modul liefert, in Verbindung mit der Android APP Automagic, diverse Informationen von Android Geräten. Die AndroidAPP Automagic (welche nicht von mir stammt und 2.90 Euro kostet) funktioniert wie Tasker, ist aber bei weitem User freundlicher. &lt;br /&gt;
Mit etwas Einarbeitung können jegliche Informationen welche Automagic bereit stellt in FHEM angezeigt werden. Hierzu bedarf es lediglich eines eigenen Flows welcher seine Daten an die AMADDeviceCommBridge sendet. Das Modul gibt auch die Möglichkeit Androidgeräte zu steuern. &lt;br /&gt;
Für all diese Aktionen und Informationen wird auf dem Androidgerät &amp;quot;Automagic&amp;quot; und ein so genannter Flow benötigt. Die App ist über den Google PlayStore zu beziehen. Das benötigte Flowset bekommt man aus dem FHEM Verzeichnis. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Wie genau verwendet man nun AMADDevice? ===&lt;br /&gt;
* stelle sicher das als aller erstes die AMADCommBridge in FHEM definiert wurde&lt;br /&gt;
* installiere die App &amp;quot;Automagic Premium&amp;quot; aus dem PlayStore.&lt;br /&gt;
* installiere das Flowset 74_AMADDeviceautomagicFlowset$VERSION.xml aus dem Ordner $INSTALLFHEM/FHEM/lib/ auf dem Androidgerät&lt;br /&gt;
* aktiviere den Installationsassistanten Flow in Automagic. Wenn man nun Automagic in den Hintergrund schickt, z.B. Hometaste drücken, startet der Assistant und legt automatisch ein Device für das Androidgerät an.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ein AMADDevice Gerät von Hand anlegen. ===&lt;br /&gt;
&lt;br /&gt;
Define&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;10.6.9.10 1496497380000 IODev=AMADBridge define &amp;lt;name&amp;gt; AMADDevice &amp;lt;IP-ADRESSE&amp;gt; &amp;lt;AMAD_ID&amp;gt; IODev=&amp;lt;IODEVICE&amp;gt; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Beispiel ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define WandTabletWohnzimmer AMADDevice 192.168.0.23 123456 IODev=NAME_des_AMADCommBridge_Devices&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Fall wird ein AMADDevice von Hand angelegt. Die AMAD_ID, hier 123456, muß auch exakt so als globale Variable in Automagic eingetragen sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
* airplanemode - Status des Flugmodus&lt;br /&gt;
* androidVersion - aktuell installierte Androidversion&lt;br /&gt;
* automagicState - Statusmeldungen von der AutomagicApp &#039;&#039;&#039;(Voraussetzung Android &amp;gt;4.3). Ist Android größer 4.3 vorhanden und im Reading steht &amp;quot;wird nicht unterstützt&amp;quot;, muß in den Androideinstellungen unter Ton und Benachrichtigungen -&amp;gt; Benachrichtigungszugriff ein Haken für Automagic gesetzt werden&#039;&#039;&#039;&lt;br /&gt;
* batteryHealth - Zustand der Battery (1=unbekannt, 2=gut, 3=Überhitzt, 4=tot, 5=Überspannung, 6=unbekannter Fehler, 7=kalt)&lt;br /&gt;
* batterytemperature - Temperatur der Batterie&lt;br /&gt;
* bluetooth - on/off, Bluetooth Status an oder aus&lt;br /&gt;
* checkActiveTask - Zustand einer zuvor definierten APP. 0=nicht aktiv oder nicht aktiv im Vordergrund, 1=aktiv im Vordergrund, &#039;&#039;&#039;siehe Hinweis unten&#039;&#039;&#039;&lt;br /&gt;
* connectedBTdevices - eine Liste der verbundenen Gerät&lt;br /&gt;
* connectedBTdevicesMAC - eine Liste der MAC Adressen aller verbundender BT Geräte&lt;br /&gt;
* currentMusicAlbum - aktuell abgespieltes Musikalbum des verwendeten Mediaplayers&lt;br /&gt;
* currentMusicApp - aktuell verwendeter Mediaplayer (Amazon Music, Google Play Music, Google Play Video, Spotify, YouTube, TuneIn Player, Aldi Life Music)&lt;br /&gt;
* currentMusicArtist - aktuell abgespielter Musikinterpret des verwendeten Mediaplayers&lt;br /&gt;
* currentMusicIcon - Cover vom aktuell abgespielten Album &#039;&#039;&#039;Noch nicht fertig implementiert&#039;&#039;&#039;&lt;br /&gt;
* currentMusicState - Status des aktuellen/zuletzt verwendeten Mediaplayers&lt;br /&gt;
* currentMusicTrack - aktuell abgespielter Musiktitel des verwendeten Mediaplayers&lt;br /&gt;
* daydream - on/off, Daydream gestartet oder nicht&lt;br /&gt;
* deviceState - Status des Androidgerätes. unknown, online, offline.&lt;br /&gt;
* doNotDisturb - aktueller Status des nicht stören Modus&lt;br /&gt;
* dockingState - undocked/docked Status ob sich das Gerät in einer Dockinstation befindet.&lt;br /&gt;
* flow_SetCommands - active/inactive, Status des SetCommands Flow&lt;br /&gt;
* flow_informations - active/inactive, Status des Informations Flow&lt;br /&gt;
* flowsetVersionAtDevice - aktuell installierte Flowsetversion auf dem Device&lt;br /&gt;
* incomingCallerName - Anrufername des eingehenden Anrufes&lt;br /&gt;
* incomingCallerNumber - Anrufernummer des eingehenden Anrufes&lt;br /&gt;
* incommingWhatsAppMessageFrom - letzte WhatsApp Nachricht&lt;br /&gt;
* incommingWhatsTelegramMessageFrom - letzte Telegram Nachricht&lt;br /&gt;
* intentRadioName - zuletzt gesrreamter Intent Radio Name&lt;br /&gt;
* intentRadioState - Status des IntentRadio Players&lt;br /&gt;
* keyguardSet - 0/1 Displaysperre gesetzt 0=nein 1=ja, bedeutet nicht das sie gerade aktiv ist&lt;br /&gt;
* lastSetCommandError - letzte Fehlermeldung vom set Befehl&lt;br /&gt;
* lastSetCommandState - letzter Status vom set Befehl, Befehl erfolgreich/nicht erfolgreich gesendet&lt;br /&gt;
* lastStatusRequestError - letzte Fehlermeldung vom statusRequest Befehl&lt;br /&gt;
* lastStatusRequestState - letzter Status vom statusRequest Befehl, Befehl erfolgreich/nicht erfolgreich gesendet&lt;br /&gt;
* nextAlarmDay - aktiver Alarmtag&lt;br /&gt;
* nextAlarmState - aktueller Status des &amp;quot;Androidinternen&amp;quot; Weckers&lt;br /&gt;
* nextAlarmTime - aktive Alarmzeit&lt;br /&gt;
* powerLevel - Status der Batterie in %&lt;br /&gt;
* powerPlugged - Netzteil angeschlossen? 0=NEIN, 1|2=JA&lt;br /&gt;
* screen - on locked/unlocked, off locked/unlocked gibt an ob der Bildschirm an oder aus ist und gleichzeitig gesperrt oder nicht gesperrt&lt;br /&gt;
* screenBrightness - Bildschirmhelligkeit von 0-255&lt;br /&gt;
* screenFullscreen - on/off, Vollbildmodus (An,Aus)&lt;br /&gt;
* screenOrientation - Landscape,Portrait, Bildschirmausrichtung (Horizontal,Vertikal)&lt;br /&gt;
* screenOrientationMode - auto/manual, Modus für die Ausrichtung (Automatisch, Manuell)&lt;br /&gt;
* state - aktueller Status&lt;br /&gt;
* userFlowState - aktueller Status eines Flows, festgelegt unter dem setUserFlowState Attribut&lt;br /&gt;
* volume - Media Lautstärkewert&lt;br /&gt;
* volumeNotification - Benachrichtigungs Lautstärke&lt;br /&gt;
&lt;br /&gt;
Beim Reading checkActivTask muß zuvor der Packagename der zu prüfenden App als Attribut checkActiveTask angegeben werden. Beispiel: attr Nexus10Wohnzimmer checkActiveTask com.android.chrome für den Chrome Browser.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Set ===&lt;br /&gt;
* activateVoiceInput - aktiviert die Spracheingabe&lt;br /&gt;
* bluetooth - on/off, aktiviert/deaktiviert Bluetooth&lt;br /&gt;
* clearNotificationBar - All,Automagic, löscht alle Meldungen oder nur die Automagic Meldungen in der Statusleiste&lt;br /&gt;
* closeCall - beendet einen laufenden Anruf&lt;br /&gt;
* currentFlowsetUpdate - fürt ein Flowsetupdate auf dem Device durch&lt;br /&gt;
* doNotDisturb - schaltet den nicht stören Modus, always immer stören, never niemals stören, alarmClockOnly nur Wecker darf stören, onlyImportant nur wichtige Störungen&lt;br /&gt;
* installFlowSource - installiert einen Flow auf dem Device, &amp;lt;u&amp;gt;das XML File muss unter /tmp/ liegen und die Endung xml haben. &amp;lt;b&amp;gt;Bsp:&amp;lt;/b&amp;gt; set TabletWohnzimmer installFlowSource WlanUebwerwachen.xml&amp;lt;/u&amp;gt;&lt;br /&gt;
* mediaAmazonMusic - play, stop, next, back ,steuert den Amazon Musik Mediaplayer&lt;br /&gt;
* mediaGoogleMusic - play, stop, next, back ,steuert den Google Play Musik Mediaplayer&lt;br /&gt;
* mediaSpotifyMusic - play, stop, next, back ,steuert den Spotify Mediaplayer&lt;br /&gt;
* mediaTuneinRadio - play, stop, next, back ,steuert den TuneIn Radio Mediaplayer&lt;br /&gt;
* mediaAldiMusic - play, stop, next, back ,steuert den Aldi Musik Mediaplayer&lt;br /&gt;
* mediaAudible - play, stop, next, back ,steuert den Audible Mediaplayer&lt;br /&gt;
* mediaYouTube - play, stop, next, back ,steuert den YouTube Mediaplayer&lt;br /&gt;
* mediaVlcPlayer - play, stop, next, back ,steuert den VLC Mediaplayer&lt;br /&gt;
* nextAlarmTime - setzt die Alarmzeit. gilt aber nur innerhalb der nächsten 24Std.&lt;br /&gt;
* openCall - ruft eine Nummer an und legt optional nach X Sekunden auf / set DEVICE openCall 01736458 10 / ruft die Nummer an und beendet den Anruf nach 10s&lt;br /&gt;
* screen - on/off/lock/unlock schaltet den Bildschirm ein/aus oder sperrt/entsperrt ihn&lt;br /&gt;
* screenBrightness - setzt die Bildschirmhelligkeit, von 0-255.&lt;br /&gt;
* screenMsg - versendet eine Bildschirmnachricht&lt;br /&gt;
* sendintent - sendet einen Intentstring Bsp: set $AMADDeviceDEVICE sendIntent org.smblott.intentradio.PLAY url http://stream.klassikradio.de/live/mp3-192/stream.klassikradio.de/play.m3u name Klassikradio, der erste Befehl ist die Aktion und der zweite das Extra. Es können immer zwei Extras mitgegeben werden.&lt;br /&gt;
* sendSMS - sendet eine SMS an eine bestimmte Telefonnummer. Bsp.: sendSMS Dies ist ein Test|555487263&lt;br /&gt;
* startDaydream - startet den Daydream&lt;br /&gt;
* statusRequest - Fordert einen neuen Statusreport beim Device an. Es können nicht von allen Readings per statusRequest die Daten geholt werden. Einige wenige geben nur bei Statusänderung ihren Status wieder.&lt;br /&gt;
* timer - setzt einen Timer innerhalb der als Standard definierten ClockAPP auf dem Device. Es können nur Sekunden angegeben werden.&lt;br /&gt;
* ttsMsg - versendet eine Nachricht welche als Sprachnachricht ausgegeben wird&lt;br /&gt;
* userFlowState - aktiviert oder deaktiviert einen oder mehrere Flows,&#039;&#039;&#039;set Nexus7Wohnzimmer Badezimmer vorheizen:inactive oder set Nexus7Wohnzimmer Badezimmer vorheizen,Nachtlicht Steven:inactive&#039;&#039;&#039;&lt;br /&gt;
* vibrate - lässt das Androidgerät vibrieren&lt;br /&gt;
* volume - setzt die Medialautstärke. Entweder die internen Lautsprecher oder sofern angeschlossen die Bluetoothlautsprecher und per Klinkenstecker angeschlossene Lautsprecher, + oder - vor dem Wert reduziert die aktuelle Lautstärke um den Wert. Der maximale Sliderwert kann über das Attribut setVolMax geregelt werden.&lt;br /&gt;
* volumeUp - erhöh;t die Lautstärke um den angegeben Wert im entsprechenden Attribut. Ist kein Attribut angegeben wird per default 2 genommen.&lt;br /&gt;
* volumeDown - reduziert die Lautstärke um den angegeben Wert im entsprechenden Attribut. Ist kein Attribut angegeben wird per default 2 genommen.&lt;br /&gt;
* volumeNotification - setzt die Benachrichtigungslautstärke.&lt;br /&gt;
&lt;br /&gt;
==== Set abhängig von gesetzten Attributen ====&lt;br /&gt;
* changetoBtDevice - wechselt zu einem anderen Bluetooth Gerät. Attribut setBluetoothDevice muß gesetzt sein. Siehe Hinweis unten!&lt;br /&gt;
* notifySndFile - spielt die angegebene Mediadatei auf dem Androidgerät ab. Die aufzurufende Mediadatei sollte sich im Ordner /storage/emulated/0/Notifications/ befinden. Ist dies nicht der Fall kann man über das Attribut setNotifySndFilePath einen Pfad vorgeben.&lt;br /&gt;
* openApp - öffnet eine ausgewählte App. Attribut setOpenApp&lt;br /&gt;
* openURL - öffnet eine URL im Standardbrowser, sofern kein anderer Browser über das Attribut setOpenUrlBrowser ausgewählt wurde. Bsp: attr Tablet setOpenUrlBrowser de.ozerov.fully|de.ozerov.fully.MainActivity, das erste ist der Package Name und das zweite der Class Name&lt;br /&gt;
* setAPSSID - setzt die AccessPoint SSID um ein WLAN sleep zu verhindern&lt;br /&gt;
* setScreenOnForTimer ändert die Zeit wie lange das Display an bleiben soll!&lt;br /&gt;
* screenFullscreen - on/off, (aktiviert/deaktiviert) den Vollbildmodus. Attribut setFullscreen&lt;br /&gt;
* screenLock - Sperrt den Bildschirm mit Pinabfrage. Attribut setScreenlockPIN - hier die Pin dafür eingeben. Erlaubt sind nur Zahlen. Es müßen mindestens 4, bis max 16 Zeichen verwendet werden.&lt;br /&gt;
* screenOrientation - Auto,Landscape,Portait, aktiviert die Bildschirmausrichtung (Automatisch,Horizontal,Vertikal). Attribut setScreenOrientation&lt;br /&gt;
* system - setzt Systembefehle ab (nur bei gerootetet Geräen). reboot,shutdown,airplanemodeON (kann nur aktiviert werden) Attribut root, in den Automagic Einstellungen muss &amp;quot;Root Funktion&amp;quot; gesetzt werden&lt;br /&gt;
* setNotifySndFilePath - setzt den korrekten Systempfad zur Notifydatei (default ist /storage/emulated/0/Notifications/&lt;br /&gt;
* setTtsMsgSpeed - setzt die Sprachgeschwindigkeit bei der Sprachausgabe(Werte zwischen 0.5 bis 4.0 in 0.5er Schritten) default ist 1.0&lt;br /&gt;
* setTtsMsgSpeed - setzt die Sprache bei der Sprachausgabe, de oder en (default ist de)&lt;br /&gt;
* setVolUpDownStep - setzt den Step für volumeUp und volumeDown&lt;br /&gt;
* setVolMax - setzt die maximale Volume Gr&amp;amp;uoml;e für den Slider&lt;br /&gt;
* setNotifyVolMax - setzt den maximalen Lautstärkewert für Benachrichtigungslautstärke für den Slider&lt;br /&gt;
* setRingSoundVolMax - setzt den maximalen Lautstärkewert für Klingellautstärke für den Slider&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Um openApp verwenden zu können, muss als Attribut der Package Name der App angegeben werden. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Um zwischen Bluetoothgeräten wechseln zu können, muß das Attribut setBluetoothDevice mit folgender Syntax gesetzt werden. attr &amp;lt;DEVICE&amp;gt; BTdeviceName1|MAC,BTDeviceName2|MAC Es muss zwingend darauf geachtet werden das beim BTdeviceName kein Leerzeichen vorhanden ist. Am besten zusammen oder mit Unterstrich. Achtet bei der MAC darauf das Ihr wirklich nach jeder zweiten Zahl auch einen : drin habt&lt;br /&gt;
&lt;br /&gt;
** &#039;&#039;&#039;Beispiel: attr Nexus10Wohnzimmer setBluetoothDevice Logitech_BT_Adapter|AB:12:CD:34:EF:32,Anker_A3565|GH:56:IJ:78:KL:76&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== state ===&lt;br /&gt;
* initialized - Ist der Status kurz nach einem define.&lt;br /&gt;
* active - die Geräteinstanz ist im aktiven Status.&lt;br /&gt;
* disabled - die Geräteinstanz wurde über das Attribut disable deaktiviert&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Anwendungsbeispiele==&lt;br /&gt;
=== Lademanagement ===&lt;br /&gt;
Ich habe die Ladegeräte für meine Androidgeräte an Funkschaltsteckdosen. ein DOIF schaltet bei unter 30% die Steckdose ein und bei über 90% wieder aus.&lt;br /&gt;
&lt;br /&gt;
Hier mal ein einfaches DOIF Beispiel für ein Lademanagment&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
... DOIF ([Nexus5Handy:powerLevel] &amp;lt; 30) (set LadenetzteilNexus5Handy:FILTER=STATE=off on) DOELSEIF ([Nexus5Handy:powerLevel] &amp;gt; 90) (set LadenetzteilNexus5Handy:FILTER=STATE=on off) DOELSE&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Wecker ===&lt;br /&gt;
Morgens lasse ich mich über mein Tablet im Schlafzimmer mit Musik wecken. Verwendet wird hierzu der wakeuptimer des RESIDENTS Modules. Das abspielen stoppe ich dann von Hand. Danach erfolgt noch eine Ansage wie das Wetter gerade ist und wird.&lt;br /&gt;
&lt;br /&gt;
=== Mediacenter ===&lt;br /&gt;
Mein 10&amp;quot; Tablet im Wohnzimmer ist Mediaplayer für das Wohnzimmer mit Bluetoothlautsprechern. Die Lautstärke wird automatisch runter gesetzt wenn die Fritzbox einen Anruf auf das Wohnzimmer Handgerät signalisiert.&lt;br /&gt;
&lt;br /&gt;
=== Sprachbefehl - Abfragen von Zuständen diverser Sensoren ===&lt;br /&gt;
Wenn ich die Spracheingabe aktiviere und nach der Temperatur im Wohnzimmer frage, bekomme ich diese angesagt.&lt;br /&gt;
&lt;br /&gt;
Der Teil im Feld Daten ist ein klassisches RadingsVal, halt nur ohne Komma und ohne Anführungszeichen&lt;br /&gt;
&lt;br /&gt;
WIRD GERADE ÜBERARBEITET&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Schaltbefehle vom Androidgerät an FHEM senden ===&lt;br /&gt;
Hierfür richte bitte einen eigen Flow ein. Wie das genau geht, verrät Dir die Hilfe.&lt;br /&gt;
Um einen Schaltbefehl für FHEM zu erstellen, folgt nach dem Trigger eine Aktion als Script (Aktion Type: Script). Hier trägst Du folgendes ein&lt;br /&gt;
&lt;br /&gt;
setcmd = &amp;quot;LichtWohnzimmerLampeRechts on&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;set&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In der ersten Zeile wird also der Schaltbefehl in der Variablem setcmd eingetragen und in der zweiten Zeile der FHEM Befehl in der Variablen fhemcmd.&lt;br /&gt;
&lt;br /&gt;
Danach müsst Ihr nur noch in einer weiteren Aktion den Flow &amp;quot;Send Data to AMADCommBridge&amp;quot; ausführen (Aktion Type: Flows ausführen). Die Aktion sollte bereits in Eurer Liste Vorhanden sein.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Screenshot_20160717-134948.png|200px]]&lt;br /&gt;
[[Datei:Screenshot 17.07.2016 1-50-27.png|200px]]&lt;br /&gt;
&lt;br /&gt;
Nun sollte Lampe1 angeschalten werden wenn der Flow ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bekannte Meldungen/Hinweise/Probleme ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn auf dem Android-Gerät die Fehlermeldung &#039;Accessibility service not running&#039; von Automagic kommt, oder im FHEM das reading state  &#039;Flow Informations mit Fehler beendet&#039; steht, dann muss der Accessibility Service auf dem Android-Device aktiviert werden: Einstellungen --&amp;gt; Bedienungshilfen --&amp;gt; Automagic Premium. Hier muss der Schalter auf &#039;an&#039; stehen. Sollte dies der Fall sein, hilft u.U. ein kurzes Aus- und wieder Einschalten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Gerät wird oft als offline angezeigt und es können keine set Befehle abgesetzt werden.&lt;br /&gt;
Mit der AMAD Version 2.2 hielt eine neue Behandlung des deviceState Readings Einzug. Das Reading stellt nun den tatsächlichen Status des Gerätes gegenüber FHEM da. Bei vielen Android 6 Geräten kommt es aber auf Grund vom DeepSleep Modus zum wegfall der WLAN Verbindung. Hier hilft die neue KeepAlive Funktion in AMAD. Dafür muß lediglich unter &lt;br /&gt;
* Einstellungen --&amp;gt; Akku --&amp;gt; oben auf die drei Punkte - Akku Leistungsoptimierung --&amp;gt; alle Apps und dann Automagic auswählen und &amp;quot;Nicht optimieren&amp;quot;&lt;br /&gt;
ausgewählt werden. Alles andere macht das Modul selbst.&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FHEM_startet_nicht_-_Tipps_zur_Fehlersuche&amp;diff=21834</id>
		<title>FHEM startet nicht - Tipps zur Fehlersuche</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FHEM_startet_nicht_-_Tipps_zur_Fehlersuche&amp;diff=21834"/>
		<updated>2017-07-20T09:58:16Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: Die Seite wurde neu angelegt: „= Kein Zugriff auf FHEMWEB / FHEM startet nicht - Was kann ich tun??? =  Deine FHEMWEB Seite ist nicht erreichbar? Ist FHEM tot, oder ist das Netzwerk kaputt?…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Kein Zugriff auf FHEMWEB / FHEM startet nicht - Was kann ich tun??? =&lt;br /&gt;
&lt;br /&gt;
Deine FHEMWEB Seite ist nicht erreichbar? Ist FHEM tot, oder ist das Netzwerk kaputt? Was kann ich machen um zu prüfen woran es genau liegt.&lt;br /&gt;
In diesem Wiki Artikel soll es darum gehen wir Du für Dich prüfen kannst ob ein FHEM / Netzwerk oder ein anderes Problem vorliegt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Prüfen in wie fern der FHEM Prozess tatsächlich nicht läuft ==&lt;br /&gt;
Man kann sich unter einem Linuxsystem sämtliche laufende Prozesse auflisten lassen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ps ax&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der ps Befehl listet je nach Argument alle laufende Prozesse auf. Die Liste kann man nun noch nach einem bestimmten Prozess filtern.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ps ax | grep perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
cooltux@fhem01-cluster:~&amp;gt; ps ax | grep perl&lt;br /&gt;
&lt;br /&gt;
11320 pts/0    S+     0:00 grep --color=auto perl&lt;br /&gt;
&lt;br /&gt;
cooltux@fhem01-cluster:~&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die obrige Ausgabe zeigt ein Prozesslisting mit einem Filter nach perl. Wie wir sehen wird hier lediglich der ps Befehl an sich gefunden. Es ist also kein weiterer Perlprozess gelistet. Hier läuft also definitiv kein FHEM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[11:31 root@fhem01-cluster cooltux] &amp;gt; ps ax | grep perl&lt;br /&gt;
&lt;br /&gt;
15852 ?        R    2119:09 /usr/bin/perl fhem.pl configDB&lt;br /&gt;
&lt;br /&gt;
21447 pts/0    S+     0:00 grep perl&lt;br /&gt;
&lt;br /&gt;
[11:31 root@fhem01-cluster cooltux] &amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sehen wie nun wie ein Prozesslisting mit einem laufenden FHEM Prozess aussehen kann.&lt;br /&gt;
&lt;br /&gt;
FHEM ist also aktiv, doch wie sehr ist es aktiv? Eventuell zu aktiv?&lt;br /&gt;
&lt;br /&gt;
Wie kann ich mir anschauen ob der FHEM Prozess vielleicht zu sehr ausgelastet ist, der Prozess also 100 Prozent CPU Auslastung produziert?&lt;br /&gt;
&lt;br /&gt;
Ein weiterer Linuxbefehl wird uns hierbei behilflich sein. &amp;lt;code&amp;gt;top&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 top - 11:38:18 up 11 days, 18:58,  1 user,  load average: 1,07, 1,03, 1,00&lt;br /&gt;
 Tasks: 125 total,   2 running, 123 sleeping,   0 stopped,   0 zombie&lt;br /&gt;
 %Cpu(s): 24,9 us,  0,9 sy,  0,0 ni, 74,1 id,  0,0 wa,  0,0 hi,  0,1 si,  0,0 st&lt;br /&gt;
 KiB Mem:    945524 total,   833532 used,   111992 free,    41552 buffers&lt;br /&gt;
 KiB Swap:   102396 total,    46564 used,    55832 free.   496240 cached Mem&lt;br /&gt;
 PID   USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND&lt;br /&gt;
 15852 fhem      20   0  103652  82160   5068 R 100,0  8,7   2125:41 perl                                                                                                               &lt;br /&gt;
 21683 root      20   0    5740   2560   2092 R   1,0  0,3   0:00.37 top                                                                                                                &lt;br /&gt;
 19129 cooltux   20   0   86204  22348   3668 S   0,3  2,4  64:16.90 insync-portable                                                                                                    &lt;br /&gt;
 21350 cooltux   20   0   11436   2848   2248 S   0,3  0,3   0:00.10 sshd                                                                                                               &lt;br /&gt;
     1 root      20   0   23292   2368   1380 S   0,0  0,3   0:54.23 systemd                                                                                                            &lt;br /&gt;
     2 root      20   0       0      0      0 S   0,0  0,0   0:01.09 kthreadd                                                                                                           &lt;br /&gt;
     3 root      20   0       0      0      0 S   0,0  0,0   3:37.20 ksoftirqd/0                                                                                                        &lt;br /&gt;
     5 root       0 -20       0      0      0 S   0,0  0,0   0:00.00 kworker/0:0H                                                                                                       &lt;br /&gt;
     7 root      20   0       0      0      0 S   0,0  0,0   8:20.71 rcu_sched                                                                                                          &lt;br /&gt;
     8 root      20   0       0      0      0 S   0,0  0,0   0:00.00 rcu_bh                                                                                                             &lt;br /&gt;
     9 root      rt   0       0      0      0 S   0,0  0,0   0:05.45 migration/0&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Hier können wir nun eindeutig erkennen, das unser FHEM die CPU mit 100 Prozent auslastet. FHEM hat also ein Problem&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zum Vergleich ein FHEM/Perl Prozess ohne Probleme&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 top - 11:50:33 up 11 days, 19:10,  1 user,  load average: 0,84, 1,03, 1,00&lt;br /&gt;
 Tasks: 133 total,   1 running, 132 sleeping,   0 stopped,   0 zombie&lt;br /&gt;
 %Cpu(s):  0,6 us,  0,8 sy,  0,0 ni, 98,6 id,  0,0 wa,  0,0 hi,  0,0 si,  0,0 st&lt;br /&gt;
 KiB Mem:    945524 total,   818344 used,   127180 free,    43748 buffers&lt;br /&gt;
 KiB Swap:   102396 total,    46820 used,    55576 free.   489652 cached Mem&lt;br /&gt;
   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND&lt;br /&gt;
 22074 fhem      20   0   86424  68516   7200 S   1,3  7,2   0:47.64 perl&lt;br /&gt;
 22294 root      20   0    5740   2564   2092 R   1,3  0,3   0:00.19 top&lt;br /&gt;
 22296 fhem      20   0   86424  63556   2240 S   1,3  6,7   0:00.04 perl&lt;br /&gt;
 22297 fhem      20   0    2088    408    328 S   0,7  0,0   0:00.02 ping&lt;br /&gt;
     7 root      20   0       0      0      0 S   0,3  0,0   8:21.23 rcu_sched&lt;br /&gt;
  1366 mysql     20   0  620608 157132   5736 S   0,3 16,6  70:12.59 mysqld&lt;br /&gt;
 19481 root      20   0       0      0      0 S   0,3  0,0   0:02.35 kworker/3:0&lt;br /&gt;
     1 root      20   0   23292   2408   1420 S   0,0  0,3   0:54.27 systemd&lt;br /&gt;
     2 root      20   0       0      0      0 S   0,0  0,0   0:01.09 kthreadd&lt;br /&gt;
     3 root      20   0       0      0      0 S   0,0  0,0   3:37.42 ksoftirqd/0&lt;br /&gt;
     5 root       0 -20       0      0      0 S   0,0  0,0   0:00.00 kworker/0:0H&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Was tun wenn sich gar nichts mehr tut? ==&lt;br /&gt;
=== Fehleranalyse mit: &amp;quot; fhem mit &amp;quot;attr global logfile -&amp;quot; in der command-Fenster starten, und diesen Fenster nicht schliessen.&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
* erstelle eine Kopie Deiner fhem.cfg / Bsp.: fhem.cfg.debug&lt;br /&gt;
* fhem.cfg.debug editieren, und in der &amp;quot;attr global logfile&amp;quot; Zeile den Dateinamen gegen - (Minuszeichen) tauschen. Dadurch werden die FHEM Ausgaben auf STDOUT (in die Konsole) geschrieben, und FHEM geht nicht in den Hintergrund.&lt;br /&gt;
* Terminal/Terminal-Emulator/cmd/etc (das Ding, um Kommandozeilenbefehle einzugeben) öffnen, nach /opt/fhem (bzw. Installationspfad) wechseln (cd /opt/fhem) und FHEM starten (perl fhem.pl fhem.cfg.debug).&lt;br /&gt;
* Terminal nicht schliessen, die Meldungen tauchen hier auf.&lt;br /&gt;
* Wenn man genug von FHEM hat, dann mit CTRL-C stoppen (d.h. erst CTRL druecken, nicht loslassen, dann C druecken, dann beide loslassen).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Auf die Art ist es Möglich ein wirklich nicht startendes FHEM zu debuggen.&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Anwesenheitserkennung&amp;diff=21790</id>
		<title>Anwesenheitserkennung</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Anwesenheitserkennung&amp;diff=21790"/>
		<updated>2017-07-04T04:54:57Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: /* Problemlösungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Viele Benutzer führen bereits eine eigene &#039;&#039;&#039;Anwesenheitserkennung&#039;&#039;&#039; durch. Diese basiert in den meisten Fällen auf Ping Checks oder bei [[AVM Fritz!Box|FritzBoxen]] auf dem Befehl &#039;&#039;ctlmgr_ctl&#039;&#039;. Diese Lösungen können aber je nach Aufbau und Funktion FHEM massiv beeinträchtigen. Aufgrund des Aufbaus vom FHEM kann dieses dadurch für mehrere Sekunden zum völligen Stillstand gebracht werden.&lt;br /&gt;
&lt;br /&gt;
In FHEM gibt es mittlerweile mehrere Module, die eine zuverlässige Anwesenheitserkennung bieten, ohne dabei FHEM bei der Ausführung zu beeinträchtigen.&lt;br /&gt;
&lt;br /&gt;
Eine erweiterte Funktion der Anwesenheitserkennung ist die Standortverfolgung, die sich nicht nur auf ein oder sehr wenige mit (eigenem) WLAN versorgte Gebiete beschränkt.&lt;br /&gt;
&lt;br /&gt;
== Vorüberlegungen ==&lt;br /&gt;
Generell gibt es mehrere Ansätze um Anwesenheitserkennung mit Handys/Smartphones durchzuführen.&lt;br /&gt;
&lt;br /&gt;
* via PING Checks im gesamten WLAN&lt;br /&gt;
* Aktivitätsprüfung auf einer FritzBox&lt;br /&gt;
* Bluetooth Checks in der gesamten Wohnung&lt;br /&gt;
* eigene Perl-Funktion&lt;br /&gt;
* aktive Benachrichtigung des Smartphones, ausgelöst z.B. über Geo-Lokation/Geofence&lt;br /&gt;
&lt;br /&gt;
Dabei gilt bei der Auswahl der Art darauf zu achten wie sich das jeweilige Device verhält. Aufgrund der Vielfältigkeit kann man hier keine allgemeine Vorgehensweise empfehlen. Als einfacher Start (zumindest für Nicht-Apfel Telefone) eignet sich die Ping-Überprüfung und die FritzBox-Abfrage sehr gut.&lt;br /&gt;
&lt;br /&gt;
=== Randbedingungen ===&lt;br /&gt;
Es gibt Geräte, die ihr WLAN/Bluetooth auch im Standby ständig aktiv haben und auf Anfragen antworten können (fast alle Android-Geräte). Gerade bei Tests über WLAN kann sich das aber signifikant auf die Akku Leistung auswirken.&lt;br /&gt;
&lt;br /&gt;
Andere Geräte wiederum schalten WLAN im Standby Betrieb aus, um Akkukapazität zu sparen. Bluetooth hingegen bleibt weiterhin aktiviert und kann auf Anfragen reagieren. (iPhone)&lt;br /&gt;
&lt;br /&gt;
Wenn man bei einem iPhone die Funktion &amp;quot;über WLAN synchronisieren&amp;quot; aktiviert hat, so ist dies auch im Standby jederzeit pingbar, wenn der Recher auf dem iTunes zum synchroniseren läuft auch an ist. Ansonsten ist bei iPhone Geräten nur die Aktivitätsprüfung mit einer FritzBox oder das überwachen der DHCP Lease auf einer Airport Basestation wirklich zuverlässig.&lt;br /&gt;
&lt;br /&gt;
Auch wenn Bluetooth aktiviert ist, so bleiben einige Mobiltelefone erst dann empfangsbereit, wenn sie bereits zu irgend einem Bluetoothgerät gekoppelt wurden. Sind diese Geräte noch nie gekoppelt worden, deaktivieren diese ihren Bluetooth Empfänger beim verlassen des Bluetooth-Menüs im Gerät (iPhone).&lt;br /&gt;
&lt;br /&gt;
Hier gilt es vor allem auszuprobieren, wie stark der Akku durch eine Anwesenheitserkennung belastet wird. Entscheidend ist hier, in welchem Abstand man eine Anwesenheitserkennung durchführt. Viele Abfragen wirken sich stärker auf den Akku aus als wenige. Wenige Abfragen bieten aber keine zuverlässige und zeitnahe Erkennung.&lt;br /&gt;
&lt;br /&gt;
Als Alternative, unabhängig vom WLAN und der Erkennung, ob ein Gerät dort eingebucht ist oder nicht, bzw. unabhängig von Bluetooth kann zumindest bei einem iPhone die seit iOS 7 nochmals stark verbesserte Geo-Lokation (Geofencing) genutzt werden. Die iPhone Apps [http://geofency.com/ Geofency] oder [http://geofancy.com/ Geofancy] werden über das FHEM-Modul GEOFANCY angebunden und übertragen ihren Status immer dann, wenn ein definierter Standort betreten oder verlassen wird. Gekoppelt mit entsprechenden Notify und/oder Watchdog Kommandos ist so ebenfalls eine sehr zuverlässige Anwesenheitserkennung möglich (und das nicht nur für das eigene Zuhause).&lt;br /&gt;
&lt;br /&gt;
== Das PRESENCE Modul ==&lt;br /&gt;
Das [[PRESENCE]] Modul bietet für die Anwesenheitserkennung mehrere Varianten an. Diese sind aktuell folgende:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;lan-ping&#039;&#039;&#039; - Das Überwachen via PING Checks, die durch den FHEM Server versandt werden.&lt;br /&gt;
* &#039;&#039;&#039;fritzbox&#039;&#039;&#039; - Das Überwachen von Geräten auf einer FritzBox via ctlmgr_ctl (Nur auf einer FritzBox möglich)&lt;br /&gt;
* &#039;&#039;&#039;local-bluetooth&#039;&#039;&#039; - Das Überwachen via Bluetooth Checks, die vom FHEM Server direkt durchgeführt werden (angeschlossener Bluetooth-Stick und die Software bluez voraussgesetzt)&lt;br /&gt;
* &#039;&#039;&#039;lan-bluetooth&#039;&#039;&#039; - Das Überwachen von Bluetoothgeräte, über Netzwerk. Auf einer oder mehreren Maschinen im Netzwerk (z.B. [[:Kategorie:Raspberry Pi|Raspberry Pi]]) läuft ein Presence-Daemon, der nach Bluetooth-Geräten sucht. Um mehrere Presence-Daemon mit FHEM zu verbinden, gibt es den Collector-Daemon, der sich zu allen Presence-Damons im Netzwerk verbindet und das Ergebnis von allen zusammenfasst.&lt;br /&gt;
* &#039;&#039;&#039;function&#039;&#039;&#039; - Das Überwachen mithilfe einer selbst geschrieben Perl-Funktion, die den Anwesenheitsstatus zurückgibt (0 oder 1)&lt;br /&gt;
* &#039;&#039;&#039;shell-script&#039;&#039;&#039; - Das Überwachen mithilfe eines selbst geschriebenen Shell-Programms/Skript, das eine 0 oder 1 ausgibt, um den Anwesenheitsstatus mitzuteilen.&lt;br /&gt;
&lt;br /&gt;
=== Ping-Überwachung von Geräten im WLAN/LAN ===&lt;br /&gt;
{{Randnotiz|RNText=Um diese Methode auf einer FritzBox nutzen zu können, muss FHEM mit root-Rechten laufen. Dies ist standardmäßig nicht der Fall. Bitte dazu den Wiki Artikel [[FritzBox: fhem unter root starten]] beachten.}}&lt;br /&gt;
Um ein Gerät via Ping zu überwachen, muss folgende Definition durchgeführt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;define Handy PRESENCE lan-ping 192.168.0.30&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dadurch wird die IP-Addresse 192.168.0.30 alle 30&amp;amp;nbsp;Sekunden geprüft, ob sie erreichbar ist. Wenn sie erreichbar ist, ist der Status &amp;quot;present&amp;quot; (anwesend), ansonsten &amp;quot;absent&amp;quot; (abwesend).&lt;br /&gt;
&lt;br /&gt;
Der Timeout kann verändert werden, indem ein Wert (in Sekunden) an das Define anhängt wird:&lt;br /&gt;
:&amp;lt;code&amp;gt;define Handy PRESENCE lan-ping 192.168.0.30 &#039;&#039;&#039;60&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun würde das Handy alle 60 Sekunden geprüft werden.&lt;br /&gt;
&lt;br /&gt;
Nur wenn bei einem iPhone/iPad die Funktion &amp;quot;über WLAN synchronisieren&amp;quot; aktiviert ist, ist es auch im Standby zuverlässig pingbar. Standardmäßig deaktivieren Apple-Geräte ihr WLAN im Standby-Betrieb um die Akkulaufzeit zu verlängern.&lt;br /&gt;
&lt;br /&gt;
Sollte die Fehlermeldung &lt;br /&gt;
:&amp;lt;code&amp;gt; PRESENCE (Handy) - ping command returned with output: ping: icmp open socket: Operation not permitted &amp;lt;/code&amp;gt; &lt;br /&gt;
im Log auftauchen und lan-ping dadurch nicht funktionieren, liegt ein Berechtigungsproblem vor. Kein Grund den User fhem zu root zu machen!&lt;br /&gt;
Prüfe zu erst als User root ob die Capabilities gesetzt sind.&lt;br /&gt;
:&amp;lt;code&amp;gt;getcap /bin/ping&amp;lt;/code&amp;gt;&lt;br /&gt;
Sollte folgendes Ergeben zu Tage fördern.&lt;br /&gt;
:&amp;lt;code&amp;gt;/bin/ping = cap_net_raw+ep&amp;lt;/code&amp;gt;&lt;br /&gt;
Ist dem nicht so, setzen wir die benötigten Capabilities&lt;br /&gt;
:&amp;lt;code&amp;gt;setcap cap_net_raw+ep /bin/ping&amp;lt;/code&amp;gt;&lt;br /&gt;
Mehr Informationen zum Thema Capabilities [https://manpages.debian.org/jessie/manpages-de/capabilities.7.de.html].&lt;br /&gt;
&lt;br /&gt;
=== FritzBox: direktes Abfragen der Aktivität via ctlmgr_ctl ===&lt;br /&gt;
{{Randnotiz|RNText=Um diese Methode auf einer FritzBox nutzen zu können, muss FHEM mit root-Rechten laufen. Dies ist standardmäßig nicht der Fall. Bitte dazu den Wiki Artikel [[FritzBox: fhem unter root starten]] beachten.}}&lt;br /&gt;
Eine sehr häufige und auch zuverlässige Methode ist auf einer FritzBox die Abfrage mittels ctlmgr_ctl Befehl. Über diesen lassen sich alle Geräte abfragen ob sie aktiv sind. Ist ein Gerät aktiv, so gilt es als anwesend.&lt;br /&gt;
&lt;br /&gt;
Dieser Modus kann allerdings nur in FHEM Installationen direkt auf einer FritzBox verwendet werden. Des weiteren muss FHEM unter dem User root laufen. Um ein Gerät zu überwachen, wird lediglich der Gerätename benötigt, so wie er unter dem Menüpunkt &amp;quot;Heimnetz&amp;quot; auftaucht. &lt;br /&gt;
&lt;br /&gt;
Die erforderliche Definition:&lt;br /&gt;
:&amp;lt;code&amp;gt;define Handy PRESENCE fritzbox iPhone-4S&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bluetooth-Überwachung von Geräten durch den FHEM Server ===&lt;br /&gt;
[[Datei:Bluetooth-Adresse-iPhone.png|thumb|Bluetooth-Adresse eines iPhones]]&lt;br /&gt;
Jenach Aufstellungsort des FHEM Servers kann es sinnvoll sein, eine Bluetooth-Überwachung direkt durch den FHEM Server durchzuführen. Hierbei gilt allerdings zu beachten, dass Bluetooth nicht für große Reichweiten gedacht ist und in den meisten Fällen keine Wände überwinden kann. Das heisst, dass in den meisten Fällen damit nur ein Raum überwacht werden kann.&lt;br /&gt;
&lt;br /&gt;
Je nach Einsatzzweck kann das auch so gewollt sein. Bluetooth USB Sticks, die bereits Bluetooth 4.0 unterstützen, können höhere Reichweiten über Zimmerwände hinaus erreichen. Vorausgesetzt, das Mobilgerät unterstützt Bluetooth 4.0.&lt;br /&gt;
&lt;br /&gt;
Um eine Überwachung per Bluetooth durchführen zu können, benötigt man die Bluetooth-Adresse eines Gerätes. Diese ähnelt vom Aufbau einer MAC-Adresse. Generell wird die Adresse in den Telefon-Informationen bei Smartphones angezeigt.&lt;br /&gt;
&lt;br /&gt;
Um eine Anwesenheitserkennung via Bluetooth durchzuführen, wird folgende Definition in der [[Konfiguration]] benötigt:&lt;br /&gt;
:&amp;lt;code&amp;gt;define Handy PRESENCE local-bluetooth XX:XX:XX:XX:XX:XX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bluetooth-Überwachung von Geräten durch verteilte Agenten in der Wohnung (presenced/collectord) ===&lt;br /&gt;
[[Datei:Raspberry-Pi-mit-WLAN-und-Bluetooth-Stick.jpg|thumb|left|Raspberry Pi mit Bluetooth- und WLAN-USB-Stick]]&lt;br /&gt;
Um eine zuverlässige und flächendeckende Bluetooth-Anwesenheitserkennung durchzuführen, ist es unerlässlich, mehrere Bluetooth-Empfänger zu verwenden, die auf mehrere oder alle Räume verteilt sind.&lt;br /&gt;
&lt;br /&gt;
Hierfür bietet sich zum Beispiel ein [[Raspberry Pi]] mit einem Mini-Bluetooth-USB-Stick und evtl. einem WLAN-USB-Stick an. Jeder Raum wird mit solch einem Raspberry ausgestattet und ist im WLAN Netz verfügbar.&lt;br /&gt;
&lt;br /&gt;
Dieses Netz aus Raspberrys wird mit dem presenced (Download-Link ist in der [http://fhem.de/commandref_DE.html#PRESENCE Commandref] zum Modul enthalten) ausgestattet. Es stehen bereits entsprechende Pakete für den Raspberry zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Beide Programme (presenced/collectord) sind Perl-Skripte, die als Daemon im Hintergrund laufen und auf Anfragen via Netzwerk warten. Es wird lediglich eine vollständige Perl-Grundinstallation mit Standardmodulen benötigt. Nach Installation der *.deb Pakete sollten diese noch angewiesen werden, automatisch beim Rechner-Neustart gestartet zu werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo update-rc.d presenced defaults&lt;br /&gt;
sudo update-rc.d collectord defaults&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine detaillierte Benutzung von presenced ist in der [http://fhem.de/commandref_DE.html#PRESENCE Commandref] Beschreibung zum PRESENCE Modul enthalten.&lt;br /&gt;
&lt;br /&gt;
==== Jeden Raum einzeln ansprechen (presenced) ====&lt;br /&gt;
Nun kann zuallererst jeder Raum einzeln angesprochen werden. Dabei ist zu beachten, dass pro Definition in der Konfiguration nur ein Gerät in einem Raum spezifisch überwacht werden kann.&lt;br /&gt;
&lt;br /&gt;
Eine Definition sieht dabei folgendermaßen aus:&lt;br /&gt;
:&amp;lt;code&amp;gt;define Handy_Wohnzimmer PRESENCE lan-bluetooth XX:XX:XX:XX:XX:XX 192.168.0.10:5111&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit wird nun das Gerät nur im Wohnzimmer (Raspberry mit IP 192.168.0.10) überwacht.&lt;br /&gt;
&lt;br /&gt;
==== Alle Räume gemeinsam ansprechen (collectord) ====&lt;br /&gt;
Um jedoch alle Räume gemeinsam zu verwenden, gibt es den Collector-Daemon. Dieser kennt alle presenced-Installationen im Netzwerk und führt eine koordinierte Suche nach den gewünschten Geräten durch. Sobald ein Gerät in einem Raum erkannt wurde, meldet der collectord den Status einschließlich der Angabe des Raumes, in dem das Gerät erkannt wurde.&lt;br /&gt;
&lt;br /&gt;
Um alle Räume zu kennen, müssen diese mit einem Config-File dem collectord mitgeteilt werden. Dieses sieht folgendermaßen aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Schlafzimmer]           # Name des Raumes (wird in FHEM als Reading angezeigt)&lt;br /&gt;
address=192.168.179.31   # IP-Adresse oder Hostname des presenced&lt;br /&gt;
port=5111                # TCP Port, der verwendet werden soll (standardmäßig Port 5111)&lt;br /&gt;
presence_timeout=120     # Prüfinterval, das verwendet werden soll, wenn ein Gerät anwesend ist&lt;br /&gt;
absence_timeout=20       # Prüfinterval, das verwendet werden soll, wenn ein Gerät abwesend ist&lt;br /&gt;
&lt;br /&gt;
[Wohnzimmer]&lt;br /&gt;
address=192.168.179.34&lt;br /&gt;
port=5111&lt;br /&gt;
presence_timeout=180&lt;br /&gt;
absence_timeout=20&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Standardmäßig ist dieses Config-File unter /etc/collectord.conf zu finden. Mit dieser Konfiguration kann der Collectord gestartet werden. Es empfiehlt sich diesen mit auf dem FHEM Server zu betreiben. Die erforderliche Definition in der FHEM-Konfiguration:&lt;br /&gt;
:&amp;lt;code&amp;gt;define Handy PRESENCE lan-bluetooth XX:XX:XX:XX:XX:XX 127.0.0.1:5222&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sobald das Handy irgendwo in der Wohnung erkannt wurde, meldet der Collectord dies sofort an FHEM und teilt den Raum mit.&lt;br /&gt;
&lt;br /&gt;
Eine detaillierte Benutzung von collectord findet man in der [http://fhem.de/commandref.html#PRESENCE Commandref zum PRESENCE Modul].&lt;br /&gt;
&lt;br /&gt;
=== Überwachung von Geräten mit Perl-Code ===&lt;br /&gt;
Es ist möglich zum Überwachen von Geräten eine eigene Perl-Funktion zu verwenden die dann vom PRESENCE Modul im Hintergrund aufgerufen wird.&lt;br /&gt;
&lt;br /&gt;
 define &amp;lt;name&amp;gt; PRESENCE function {...} [ &amp;lt;check-interval&amp;gt; [ &amp;lt;present-check-interval&amp;gt; ] ]&lt;br /&gt;
&lt;br /&gt;
Sobald die Funktion den Rückgabewert 1 hat, ist das Gerät anwesend, bei 0 abwesend.&lt;br /&gt;
&lt;br /&gt;
==== Beispiel DHCP Überwachung auf Airport Basestation ====&lt;br /&gt;
Die hier vorgestellte Überwachung der DHCP Lease auf Airport Basestations per SNMP ist absolut robust gegenüber dem Ruhezustand von iOS und setzt keine weitere Konfiguration auf dem iPhone voraus. Das Abmelden beim Verlassen des Empfangsbereiches der Basestation geschieht mit etwa 5-10 Minuten Verzögerung und ist somit auch vor kurzzeitigen Empfangsproblemen sicher. Das nebenstehende Bild (???) verdeutlicht noch mal die Unterschiede zwischen einer IP-Basierten Ping-Überwachung und der Überwachung auf Ebene der Basestation oder FritzBox.&lt;br /&gt;
&lt;br /&gt;
Bevor der folgende Code verwendet werden kann ist das Perl Modul Net:SNMP zu installieren (z.&amp;amp;nbsp;B. mit: &amp;lt;code&amp;gt;cpan install use Net::SNMP&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Zuerst ist folgender Code in 99_myUtils.pm einzufügen, sollte diese noch nicht vorhanden sein muss diese aus dem Template welches unter Edit Files zu finden ist erzeugt werden.&lt;br /&gt;
&#039;&#039;&#039;Achtung, das ist nicht der komplette Inhalt der 99_myUtils!&#039;&#039;&#039; Das ist nur die einzelne Routine&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
use Net::SNMP;&lt;br /&gt;
sub&lt;br /&gt;
snmpCheck($$)&lt;br /&gt;
{&lt;br /&gt;
  my ($airport,$client)= @_;&lt;br /&gt;
&lt;br /&gt;
  my $community = &amp;quot;public&amp;quot;;&lt;br /&gt;
  my $host = $airport;&lt;br /&gt;
  my $oid = &amp;quot;.1.3.6.1.2.1.3.1.1.2&amp;quot;;&lt;br /&gt;
  #my $oid = &amp;quot;.1.3.6.1.2.1.3.1.1.2.25.1.10.0.1&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  my ( $session, $error ) = Net::SNMP-&amp;gt;session(&lt;br /&gt;
    -hostname =&amp;gt; $host,&lt;br /&gt;
    -community =&amp;gt; $community,&lt;br /&gt;
    -port =&amp;gt; 161,&lt;br /&gt;
    -version =&amp;gt; 1&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  if( !defined($session) ) {&lt;br /&gt;
    return 0;&lt;br /&gt;
    return &amp;quot;Can&#039;t connect to host $host.&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  my @snmpoids = ();&lt;br /&gt;
&lt;br /&gt;
  my $response = $session-&amp;gt;get_next_request($oid);&lt;br /&gt;
  my @nextid = keys %$response;&lt;br /&gt;
  while ( @nextid &amp;amp;&amp;amp; $nextid[0] &amp;amp;&amp;amp; $nextid[0] =~ m/^$oid/ ) {&lt;br /&gt;
    push( @snmpoids, $nextid[0] );&lt;br /&gt;
&lt;br /&gt;
    $response = $session-&amp;gt;get_next_request( $nextid[0] );&lt;br /&gt;
    @nextid = keys %$response;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if( !defined($response = $session-&amp;gt;get_request( @snmpoids ) ) ) {&lt;br /&gt;
    return 0;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  foreach my $value (values %$response) {&lt;br /&gt;
    return 1 if( $value eq $client )&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach lässt sich das Mobilgerät so überwachen:&lt;br /&gt;
:&amp;lt;code&amp;gt;define iPhone PRESENCE function {snmpCheck(&amp;quot;10.0.1.1&amp;quot;,&amp;quot;0x44d77429f35c&amp;quot;)} 30 30&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wobei 10.0.1.1 durch die IP-Adresse der Basestation und 0x44d77429f35c durch die MAC Adresse des Geräts als HEX-Zahl ersetzt werden muss.&lt;br /&gt;
&lt;br /&gt;
==== Beispiel Anwesenheitserkennung mittels UniFi Controller ====&lt;br /&gt;
&lt;br /&gt;
Die Anwesenheitserkennung bei Geräten in Verbindung mit UniFi-Produkten funktioniert selbst dann, wenn sich die Geräte im PowerSave-Modus befinden. &lt;br /&gt;
&lt;br /&gt;
Beachte: Die Geräte werden erst ungefähr nach 5 Minuten, nachdem das Gerät das WLAN verlassen hat als disconnected angezeigt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;NAME&amp;gt; PRESENCE function {ReadingsVal(&amp;quot;&amp;lt;UniFi&amp;gt;&amp;quot;,&amp;quot;&amp;lt;NamedDevice&amp;gt;&amp;quot;,&amp;quot;&amp;quot;) eq &amp;quot;connected&amp;quot; ? 1:0}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eventbasierte Anwesenheitserkennung am Beispiel mittels UniFi Controller ===&lt;br /&gt;
Der Vorteil gegenüber der Function-Variante ist, dass diese Variante ohne Blocking.pm-Overhead direkt ausgeführt werden kann und in &amp;quot;Echtzeit&amp;quot; abläuft (siehe {{Link2Forum|Topic=40287|Message=562823}}).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;NAME&amp;gt; PRESENCE event UniFi:NamedDevice:.disconnected UniFi:NamedDevice:.connected&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Das GEOFANCY Modul ==&lt;br /&gt;
Das Modul ermöglicht über einen sogenannten Webhook Mechanismus (umgangssprachlich oft auch als &amp;quot;Push&amp;quot; benannt) das aktive Melden des aktuellen Standortes. Die iPhone Apps  [http://geofency.com/ Geofency] und [http://geofancy.com/ Geofancy] können dann aktiv und quasi in dem Moment, wo man den Wohnbereich betritt oder verlässt, benachrichtigen. Android Nutzern können [https://play.google.com/store/apps/details?id=de.egi.geofence.geozone&amp;amp;hl=de EgiGeoZone Geofence] nutzen. Das geht nochmals um einiges schneller, als die Erkennung im WLAN, bei der die Anwesenheit nur in (engen) Zyklen aktiv geprüft werden muss. Gleichzeitig werden Ressourcen in FHEM geschont. Die aktuelle Implementierung im iPhone 5S mit dediziert für das Tracking zuständigem Chip ist so gut, dass der Akku ebenfalls sehr geschont wird.&lt;br /&gt;
&lt;br /&gt;
=== Modul in FHEM einrichten ===&lt;br /&gt;
Das Modul ist mit einer einfachen Definition sofort betriebsbereit:&lt;br /&gt;
:&amp;lt;code&amp;gt;define geofancy GEOFANCY geo&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit nimmt FHEM unter &amp;lt;nowiki&amp;gt;http://192.168.178.1:8083/fhem/geo&amp;lt;/nowiki&amp;gt; entsprechende Meldungen des iPhones entgegen. Damit das nicht nur über das lokale WLAN funktioniert, bedarf es allerdings noch einiger zusätzlicher Maßnahmen. FHEM muss vom Internet erreichbar gemacht werden, dabei sollte unbedingt an die Absicherung des Zugriffs gedacht werden.&lt;br /&gt;
&lt;br /&gt;
Zunächst einmal habe ich bei mir eine eigene FHEMWEB Instanz dafür angelegt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define WEBhook FHEMWEB 8088 global&lt;br /&gt;
attr WEBhook column Alarms: Apartment: Living: Bedroom: Kitchen: Sonos: Residents: Weather: Bathroom: Logs: Statistics: DashboardRoom: System: hidden: all:&lt;br /&gt;
attr WEBhook hiddenroom input,detail,save,Unsorted,Everything,CUL_HM,FS20,Commandref,style,Edit files,Select style,Logfile,Floorplans,Remote doc,FileLogs,Apartment,Bathroom,Bedroom,Kitchen,Living,Residents,System,Weather,Event monitor,NEW&lt;br /&gt;
attr WEBhook room hidden&lt;br /&gt;
attr WEBhook webname webhook&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit ist unter der URL &amp;lt;nowiki&amp;gt;http://192.168.178.1:8088/webhook/geo&amp;lt;/nowiki&amp;gt; das GEOFANCY Modul erreichbar. Ich verstecke in dieser Ansicht noch alle Räume, die ich so habe. Wer die Raumnamen allerdings kennt, kann sie trotzdem aufrufen. Die Anzeige in den Räumen kann man mit dem Attribut column und entsprechend leeren Definitionen verstecken. Nun muss man explizit den Devicenamen kennen, um noch etwas über die Konfiguration in Erfahrung bringen zu können.&lt;br /&gt;
Auch wenn das Security-by-Obscurity ist - ich fühle mich wohler damit.&lt;br /&gt;
&lt;br /&gt;
=== Webhook weiter absichern ===&lt;br /&gt;
Mit Hilfe eines [http://fhem.de/commandref.html#allowed allowed]-Devices lässt sich die FHEMWEB Instanz noch weiter absichern indem nur die tatsächlich benötigten Kommandos erlaubt werden (in diesem Fall keine) und damit alle anderen nicht erlaubten (attr,define,get,set,...) automatisch nicht mehr zur Verfügung stehen: &lt;br /&gt;
 &amp;lt;pre&amp;gt;&lt;br /&gt;
define allowedWEBhook allowed&lt;br /&gt;
attr allowedWEBhook allowedCommands ,&lt;br /&gt;
attr allowedWEBhook allowedDevices ,&lt;br /&gt;
attr allowedWEBhook validFor WEBhook&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Außerdem ist dringend zu empfehlen, den Zugriff über TLS/SSL und HTTP Basic-Authentication weiter abzusichern. Läuft FHEM auf einem Raspberry&amp;amp;nbsp;Pi, dann empfehle ich dazu die Konfiguration eines ReverseProxy (vorzugsweise HAproxy, Pound oder Varnish, notfalls auch Nginx oder Apache); damit ist man am flexibelsten und kann auch alle FHEMWEB Instanzen direkt über einen einzigen Port (meist 443, der HTTPS Standard Port) zusammenfassen. Ich möchte hier allerdings beschreiben, wie weit man mit FHEM Bordmitteln kommt und nehme das Beispiel einer Installation auf einer Fritzbox.&lt;br /&gt;
&lt;br /&gt;
Wie TLS aktiviert wird, steht in der Commandref für [[FHEMWEB]]. Um die Kommandos auf der Fritzbox ausführen zu können, muss zuerst Telnet aktiviert werden (bitte Google benutzen). Anschließend wechselt man auf der Fritzbox ins Verzeichnis /var/media/ftp/fhem und kann dann den Hinweisen aus der [http://fhem.de/commandref.html#FHEMWEB Commandref] unter dem Punkt HTTPS folgen. Letztlich fehlt noch das entsprechende Attribut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr WEBhook HTTPS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als nächstes aktivieren wir Benutzername+Passwort für den Zugriff. Die commandref für allowed gibt auch hier unter dem Punkt basicAuth entsprechende Hinweise. Wir fügen hier einfach mal einen Benutzer &amp;quot;webhook&amp;quot; mit dem Passwort &amp;quot;Geofancy&amp;quot; hinzu, das sieht dann so aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr allowedWEBhook basicAuth { &amp;quot;$user:$password&amp;quot; eq &amp;quot;webhook:Geofancy&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Infos zur Absicherung gibt auch [[FritzBox Webzugriff absichern]].&lt;br /&gt;
&lt;br /&gt;
Um zu testen, ob unsere Absicherung erfolgreich war, kann man die URL &amp;lt;nowiki&amp;gt;https://192.168.178.1:8088/webhook/geo&amp;lt;/nowiki&amp;gt; aufrufen (wichtig ist, dass man jetzt https und nicht mehr http eingibt; ansonsten bekommt man keine Antwort). Eine Zertifikatswarnung kann getrost ignoriert werden, verschlüsselt wird trotzdem. Es sollte auch eine Passwort Abfrage kommen und die Eingabe der entsprechenden Daten sollte dann zu einer entsprechenden Meldung vom GEOFANCY Modul führen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
NOK No data received, see API information on http://wiki.geofancy.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das ist ok, schließlich sind wir keine App, sondern der Mensch, der nur mal eben prüfen will :-)&lt;br /&gt;
&lt;br /&gt;
=== Zugriff vom Internet ermöglichen ===&lt;br /&gt;
Das ist je nach Fritzbox und Software Version unterschiedlich. Grundsätzlich gilt: Eine Weiterleitung des ports 8088 vom Internet auf das laufende FHEM auf Port 8088 intern ist von AVM so nicht vorgesehen.&lt;br /&gt;
Bei mir führte folgendes zum Erfolg:&lt;br /&gt;
&lt;br /&gt;
* Einloggen per Telnet auf der Fritzbox (ich habe FritzOS 6 installiert)&lt;br /&gt;
* Konfiguration editieren mittels &amp;quot;nvi /var/flash/ar7.cfg&amp;quot;&lt;br /&gt;
* Suchen nach richtiger Zeile durch Eingabe von &amp;quot;/internet_forwardrules&amp;quot; und Enter&lt;br /&gt;
* Hinzufügen einer weiteren Zeile (Vorsicht, die bestehende Zeile endet mit ; und das muss in , umgeändert werden, so dass das ; schließlich am Ende der Zeile steht.&lt;br /&gt;
&lt;br /&gt;
So sieht es bei mir vorher aus:&lt;br /&gt;
:&amp;lt;code&amp;gt;internet_forwardrules = &amp;quot;tcp 0.0.0.0:488 0.0.0.0:488 0&amp;quot;;&amp;lt;/code&amp;gt;&lt;br /&gt;
Hinterher:&lt;br /&gt;
:&amp;lt;code&amp;gt;internet_forwardrules = &amp;quot;tcp 0.0.0.0:488 0.0.0.0:488 0&amp;quot;, &amp;quot;tcp 0.0.0.0:8088 0.0.0.0:8088 0&amp;quot;;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach mittels &amp;quot;:x&amp;quot; abspeichern und sofort per &amp;quot;reboot&amp;quot; die Box neu starten, um diese Änderungen zu aktivieren. Das ist wichtig; ansonsten zeigt die Erfahrung, dass die Änderung nicht dauerhaft erhalten bleibt und die gerade gemachten Änderungen verloren gehen.&lt;br /&gt;
&lt;br /&gt;
Wer die Einstellungen zu &amp;quot;internet_forwardrules&amp;quot; bei sich nicht finden kann, hat womöglich eine andere Version als ich oder ein leicht anderes Gerät und bemüht am besten Google, was er tun kann, um das Gleiche zu erreichen. Möglicherweise tauchen die Einträge auch erst auf, wenn man mal über das Webinterface ein Forwarding eingerichtet hatte.&lt;br /&gt;
&lt;br /&gt;
Hat man einen DynDNS Dienst oder myFritz auf der Fritzbox aktiviert, so kann man jetzt auch von draußen auf den Webhook zugreifen. Das kann man prüfen, indem man das iPhone aus dem WLAN ausbucht und einmal die externe Adresse eingibt, also z.B. https://meindyndns.org:8088/webhook/geo.&lt;br /&gt;
&lt;br /&gt;
=== Weitere Alternativen für den Zugriff aus dem Internet ===&lt;br /&gt;
Als Alternative zum Port Forwarding kann man sich auch per VPN in das lokale Netzwerk einwählen. iOS bietet dazu auch eine automatische Aktivierung des VPN (VPN on Demand), wie z.B. [http://forum.loxone.com/dede/netzwerk-firewall-and-security/8121-vpn-demand-ios-8-1-1-fritz-box-kleine-how.html hier] beschrieben wird.&lt;br /&gt;
&lt;br /&gt;
Auch eine Alternative ist, das Portforwarding nicht direkt an FHEM einzurichten, sondern an einem im Netzwerk laufenden Reverse-Proxy, der dann seinerseits die Anfragen an FHEM weiterleitet. Dies kann z.B. Apache, Nginx oder am besten HAproxy sein.&lt;br /&gt;
Letzterer ist dabei sehr flexibel, allerdings nicht unbedingt einfach zu konfigurieren. Ein paar Inspirationen diesbezüglich gibt es z.B. [https://github.com/Hoanoho/HSE/tree/develop/lib/cfg/any/stat/etc/haproxy hier] und [https://github.com/Hoanoho/HSE/tree/develop/lib/cfg/any/dyn/etc/haproxy hier]. Wer pfSense nutzt, findet [http://loredo.me/post/116633549315/geeking-out-with-haproxy-on-pfsense-the-ultimate diesen Artikel] womöglich auch interessant. Er zeigt auch, dass mit HAproxy noch weit mehr möglich ist.&lt;br /&gt;
Der Reverse-Proxy sollte dabei auch unbedingt der TLS Termination Point sein (TLS Offloading). Nicht nur spart man sich dann die Aktivierung von TLS in FHEM, sondern man hat auch mehr Einfluss darauf, wie TLS arbeitet (z.B. Deaktivierung von SSLv3, forcieren von TLSv1.2, nur als sicher eingestufte Cipher Suite... siehe auch Infos auf der [https://wiki.mozilla.org/Security/Server_Side_TLS Mozilla Website]).&lt;br /&gt;
&lt;br /&gt;
=== Einrichten in der Geof[e|a]ncy.app ===&lt;br /&gt;
Hat das alles soweit geklappt, können endlich in der Geofency.app bzw. Geofancy.app am iPhone die gewünschten Bereiche definiert werden. Am Besten zuvor in den Global Settings die folgenden Einstellungen hinterlegen:&lt;br /&gt;
&lt;br /&gt;
* URL: https://meindyndns.org:8088/webhook/geo&lt;br /&gt;
* POST (oder GET, ist egal - das FHEM Modul kann beides)&lt;br /&gt;
* HTTP Basic Authentication: EIN (entsprechend Username und Password eintragen)&lt;br /&gt;
&lt;br /&gt;
Anfänglich ist es empfehlenswert noch &amp;quot;Notification on success&amp;quot; und &amp;quot;Notification on Failure&amp;quot; einzuschalten. Ersteres kann man ausmachen wenn man weiß, dass es soweit funktioniert. Über &amp;quot;Send Test-Request&amp;quot; kann man einmal einen Test schicken und erhält das Ergebnis entsprechend dargestellt. Es sollte sowas kommen wie&lt;br /&gt;
:&amp;lt;code&amp;gt;POST Success: test OK&amp;lt;/code&amp;gt;. In Geofancy.app gibt es keine Rückmeldung über den Erfolg des Testrequests. In FHEM sollten sich durch den Testrequest jedoch die Readings sofort aktualisieren (Ggf. ist ein Reload der FHEMWEB-Seite nötig da zusätzliche Tabellenzeilen nicht via Longpoll ergänzt werden). &lt;br /&gt;
&lt;br /&gt;
Funktioniert das soweit, kann man eine neue Lokation als sein Zuhause anlegen. Es empfiehlt sich einen ID-Namen zu setzen; dieser ist dann in FHEM als Name für die Lokation sichtbar. Für die eigene Wohnung empfiehlt sich hier &amp;quot;home&amp;quot; (da dies auch direkt vom RESIDENTS Modul so verwendet werden kann). Man kann auch Trigger für andere Standorte anlegen. FHEM weiß dann sogar, wenn ihr im Büro seid und könnte sich dabei auch unterschiedlich verhalten, als wenn ihr &amp;quot;auf Achse&amp;quot; seid. Bei letzterem ist der Status im GEOFANCY Modul &amp;quot;underway&amp;quot;, was so viel heißt wie &amp;quot;unbekannter Aufenthaltsort&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Hinweis: Zumindest für Geofancy.app liefert ein Testrequest wohl zufällige Locations zurück. Die eigenen Location-IDs werden also nicht übergeben, selbst wenn man sich in einem Geofence befindet. Um zu testen muss man sich wohl oder übel selbst bewegen ;-).&lt;br /&gt;
&lt;br /&gt;
=== GEOFANCY Modul individualisieren ===&lt;br /&gt;
Die im GEOFANCY Modul dargestellten Readings sind nun in etwa so, wenn ihr euch bewegt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Readings:&lt;br /&gt;
     2014-01-18 14:37:42   lastDevice      -&lt;br /&gt;
     2014-01-18 14:37:42   lastDeviceUUID      51F23894-AAAA-BBBB-CCCC-0123456789AB&lt;br /&gt;
     2014-01-18 14:37:42   state           dev:51F23894-AAAA-BBBB-CCCC-0123456789AB trig:test id:home lat:48.9999 long:11.9999&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer genauer hinschaut sieht: Mein iPhone heißt wohl 51F23894-AAAA-BBBB-CCCC-0123456789AB.&lt;br /&gt;
Damit nun die Readings für mein iPhone richtig angelegt werden, muss ein Device Alias gesetzt werden. Sinnvoll erscheint mir der Vorname des Besitzers:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr geofancy devAlias 51F23894-AAAA-BBBB-CCCC-0123456789AB:Julian&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Alias-Namen können mit Leerzeichen einfach angehängt werden.&lt;br /&gt;
Jetzt werden weitere Readings angelegt, sobald GEOFANCY entsprechende Daten vom Mobilgerät empfängt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Readings:&lt;br /&gt;
     2014-01-18 14:37:42   Julian          arrived home&lt;br /&gt;
     2014-01-18 14:37:42   currLocLat_Julian 48.9999&lt;br /&gt;
     2014-01-18 14:37:42   currLocLong_Julian 11.9999&lt;br /&gt;
     2014-01-18 14:37:42   currLocTime_Julian 2014-01-18 14:37:42&lt;br /&gt;
     2014-01-18 14:37:42   currLoc_Julian  home&lt;br /&gt;
     2014-01-17 19:18:23   lastArr         Julian home&lt;br /&gt;
     2014-01-17 18:41:46   lastDep         Julian Office&lt;br /&gt;
     2014-01-18 14:37:42   lastDevice      Julian&lt;br /&gt;
     2014-01-18 14:37:42   lastDeviceUUID      51F23894-AAAA-BBBB-CCCC-0123456789AB&lt;br /&gt;
     2014-01-17 18:41:46   lastLocArr_Julian 2014-01-17 08:58:37&lt;br /&gt;
     2014-01-17 18:41:46   lastLocDep_Julian 2014-01-17 18:41:46&lt;br /&gt;
     2014-01-17 18:41:46   lastLocLat_Julian 48.1111&lt;br /&gt;
     2014-01-17 18:41:46   lastLocLong_Julian 11.1111&lt;br /&gt;
     2014-01-17 18:41:46   lastLoc_Julian  Office&lt;br /&gt;
     2014-01-18 14:37:42   state           dev:Julian trig:test id:home lat:48.9999 long:11.9999&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Möchte man nun etwas bestimmtes tun, wenn man nach Hause kommt oder das Heim verlässt, kann man am Besten ein entsprechendes Notify auf das Reading currLoc_Name setzen. Ich aktualisiere lediglich zwei Dummies, durch die dann alle weiteren Notifies ausgelöst werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define n_Julian.Presence notify geofancy:currLoc_Julian:.home set Julian.homestatus:FILTER=STATE!=home home&lt;br /&gt;
attr n_Julian.Presence room Residents&lt;br /&gt;
define n_Julian.absence notify geofancy:currLoc_Julian:.underway {\&lt;br /&gt;
if (Value(&amp;quot;Julian.homestatus&amp;quot;) ne &amp;quot;gone&amp;quot;) {\&lt;br /&gt;
  fhem(&amp;quot;set Julian.homestatus:FILTER=STATE!=absent absent&amp;quot;);;\&lt;br /&gt;
}\&lt;br /&gt;
}&lt;br /&gt;
define n_Julian.whereabout notify geofancy:currLoc_Julian:.* set Julian.whereabout:FILTER=STATE!=$EVTPART1 $EVTPART1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer es noch einfacher möchte (bzw. auch noch mehr Features) schaut sich einmal die neue Modulfamilie aus RESIDENTS[http://fhem.de/commandref_DE.html#RESIDENTS], ROOMMATE[http://fhem.de/commandref_DE.html#ROOMMATE] und GUEST[http://fhem.de/commandref_DE.html#GUEST] an. Diese sind direkt auf GEOFANCY abgestimmt. Dabei kann das devAlias Attribut entfallen und man hinterlegt die UUID stattdessen direkt im ROOMMATE oder GUEST Device (Attribut r*_geofenceUUIDs). Das erspart es für jeden Bewohner und jedes Device zig unterschiedliche Devices der Typen Notify, DOIF oder Watchdog anlegen und pflegen zu müssen.&lt;br /&gt;
&lt;br /&gt;
Wer mehr Kontrolle möchte kann natürlich bei notify, DOIF und Co. bleiben: &amp;lt;code&amp;gt;define n_rr_Julian.location notify geofancy:currLoc_Julian:.* set rr_Julian:FILTER=location!=$EVTPART1 location $EVTPART1&amp;lt;/code&amp;gt;. Wobei &amp;quot;Julian&amp;quot; dabei als devAlias in GEOFANCY eingtragen wurde, rr_Julian der Name des ROOMMATE aus RESIDENTS ist. Außerdem wurden die Location-IDs in der Geofency.app bzw. Geofancy.app so gewählt, dass diese direkt einem ROOMMATE-Status entsprechen (also z.B. home, wayhome...).&lt;br /&gt;
&lt;br /&gt;
== Beispiele für die Nutzung der Anwesenheitserkennung ==&lt;br /&gt;
Hier sollen Beispiele für den Nutzen von Anwesenheitserkennung aufgezeigt werden.&lt;br /&gt;
&lt;br /&gt;
=== Abschalten aller Verbraucher (Licht, Musikanlage) beim Verlassen der Wohnung ===&lt;br /&gt;
Typisches Szenario: Man geht ausser Haus, aber hat vergessen im Bad das Licht aus zu machen. Allerdings geht man heutzutage fast garnicht mehr ohne Handy aus dem Haus.&lt;br /&gt;
&lt;br /&gt;
Nun soll FHEM in der gesamten Wohnung das Licht, sowie sonstige Verbraucher ausschalten, wenn ich länger als 15 Minuten ausser Haus bin. Dazu benötigt man zuerst eine structure, die alle Verbraucher und sonstigen Devices, die das betrifft, zusammenfasst.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Gesamte_Wohnung structure Gesamtes_Licht Licht_Wohnzimmer Licht_Kueche LED_Kueche Licht_Bad Licht_Schlafzimmer AV_Receiver TV_Steckdose&lt;br /&gt;
attr Gesamte_Wohnung room Wohnung&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun kann man mittels eines watchdogs eine Überwachung für sein Handy anlegen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Überwachen der gesamten Wohnung mittels collectord sowie presenced in jedem Raum&lt;br /&gt;
define Handy PRESENCE lan-bluetooth XX:XX:XX:XX:XX:XX 127.0.0.1:5222&lt;br /&gt;
attr Handy event-on-change-reading state  # Ein Event soll nur bei der Änderung des Anwesenheitsstatus (Reading: status) erfolgen. Wichtig für den watchdog!!!&lt;br /&gt;
&lt;br /&gt;
# Nach 15 Minuten Abwesenheit (Handy im Status &amp;quot;absent&amp;quot;) soll die gesamte Wohnung ausgeschaltet werden.&lt;br /&gt;
define watchdog_Anwesenheit watchdog Handy:absent 00:15 Handy:present set Gesamte_Wohnung off ; trigger watchdog_Anwesenheit .&lt;br /&gt;
attr watchdog_Anwesenheit regexp1WontReactivate 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Benachrichtigung bei Batteriewechsel ===&lt;br /&gt;
Mit Hilfe des PRESENCE-Moduls kann man auch bei batteriebetriebenen Geräten eine Meldung ausgeben, sobald ein Batteriewechsel ansteht. Hier im Beispiel wird der Eve-Room-Sensor von Elgato eingebunden und anschließend mit einer DOIF-Nachricht ausgestattet.&lt;br /&gt;
Die Bluetooth-Adresse des Sensors kann mittels eines BLE-Scanners ermittelt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# PRESENCE-Modul für Elgato Eve Room Sensor mit Aktualisierung aller 6 Minuten&lt;br /&gt;
define Eve_Room_BLE lan-bluetooth &amp;lt;Bluetooth-Adresse&amp;gt; 127.0.0.1:5333 360&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend wird eine DOIF-Regel definiert, die eine Nachricht an die installiere [[FHEM_APP|FHEM App]] absendet:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Eve_Room_BLE_Battery_Msg DOIF ([Eve_Room_BLE] eq &amp;quot;absent&amp;quot;) (set Msg_iPhone message &#039;Batteriewechsel beim Eve Room Sensor im Wohnzimmer.&#039;)&lt;br /&gt;
attr Eve_Room_BLE_Battery_Msg wait 600&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Aktualisierung des PRESENCE-Eintrages sollte nicht größer sein als das WAIT-Attribut der DOIF-Regel. Ansonsten könnte eine kurze Systemstörung zum Fehlalarm führen.&lt;br /&gt;
&lt;br /&gt;
== Anwesenheitserkennung Bluetooth PebbleBee mit PRESENCE Modul ==&lt;br /&gt;
Im Forum gibt es einen {{Link2Forum|Topic=28753|LinkText=langen Beitrag}} über die Einrichtung eines BT-Tag an einem RaspberryPI mit FHEM. Dabei werden Skripte wie blescan.pl und lepresenced genannt.&lt;br /&gt;
Da mittlerweile viele neue Informationen zusammen gekommen sind wurde der Wiki Eintrag erstellt.&lt;br /&gt;
&lt;br /&gt;
Im Folgenden wird die Konfiguration für &#039;&#039;&#039;LE Deviced (z.B. Gtags,Pebbles etc.)&#039;&#039;&#039; und &#039;&#039;&#039;NICHT LE Device (z.B. IPhone)&#039;&#039;&#039; beschreiben.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=Beide hier beschriebenen Wege (presenced/lepresenced) können parallel auf dem selben BT-Dongle laufen, da sich die Ports unterscheiden! }} &lt;br /&gt;
&#039;&#039;&#039;Wo finde ich denn lepresenced?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
lepresenced kann über Github heruntergeladen werden (Link weiter unten)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Was ist der Vorteil gegenüber blescan.pl?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
blescan.pl hat u. a. das Problem, dass dank der wundervollen Bluetooth-Implementierung unter Linux ab und zu der Scan fehlschlägt und das Interface resettet werden muss. Das tut blescan.pl auch mit aller Gewalt. Dazu kommt, dass bei längeren Scanzeiten und vielen Tags sich die Prozesse anstauen, weil immer nur auf einen Tag &amp;quot;gewartet&amp;quot; wird. Außerdem wurden mit der Einführung von lepresenced sämtliche Supportverträge gekündigt lepresenced läuft dauerhaft und merkt sich bei allen sendenden Tags den Zeitstempel des letzten Empfangs. &lt;br /&gt;
&lt;br /&gt;
=== Getestete Hardware/Software===&lt;br /&gt;
* &#039;&#039;&#039;Raspbian System&#039;&#039;&#039; - wheezy, Jessie&lt;br /&gt;
* &#039;&#039;&#039;BT-Dongle&#039;&#039;&#039; - CSL NET BT USB2.0 Stick, Bluetooth V4.0, Nano &amp;lt;br /&amp;gt;&#039;&#039;&#039;Achtung&#039;&#039;&#039;: Es muss ein BT V4.0 oder höher verwendet werden. Nur dieser unterstützt &#039;&#039;LowEnergy&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;BT-TAG&#039;&#039;&#039; - Gtag von Gigaset, TrackR, UDOO Neo, PebbleBee, iTag von Unitec, X4-LIFE Multifunkti BL-Anhänger, iTag Wireless Anti, Trackr bravo&lt;br /&gt;
&lt;br /&gt;
===  BT Dongel am PI installieren ===&lt;br /&gt;
&lt;br /&gt;
Um den BT Dongle &#039;&#039;(hier: CSL NET BT USB2.0)&#039;&#039; am PI verwenden zu können, müssen die notwendigen Pakete über die Paketverwaltung von debain nachinstalliert werden.&lt;br /&gt;
Wer bereits ein BT-Dongle installiert hat, kann diesen Schritt überspringen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install bluetooth&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nach erfolgreicher Installation der Pakete sollte der RaspberryPI neu gestartet werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo reboot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem erfolgten Reboot bitte das Log des Raspberry auf folgende Einträge prüfen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Feb 12 19:52:55 fhem kernel: [    4.773600] Bluetooth: Core ver 2.20&lt;br /&gt;
Feb 12 19:52:55 fhem kernel: [    4.773748] NET: Registered protocol family 31&lt;br /&gt;
Feb 12 19:52:55 fhem kernel: [    4.773765] Bluetooth: HCI device and connection manager initialized&lt;br /&gt;
Feb 12 19:52:55 fhem kernel: [    4.773797] Bluetooth: HCI socket layer initialized&lt;br /&gt;
Feb 12 19:52:55 fhem kernel: [    4.773821] Bluetooth: L2CAP socket layer initialized&lt;br /&gt;
Feb 12 19:52:55 fhem kernel: [    4.773890] Bluetooth: SCO socket layer initialized&lt;br /&gt;
Feb 12 19:52:55 fhem kernel: [    4.797531] usbcore: registered new interface driver btusb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Sobald der BT-Dongle erkannt wurde &#039;&#039;leuchtet&#039;&#039; (wenn vorhanden) auch die &#039;&#039;blaue/gelbe&#039;&#039; LED am Dongle auf.&lt;br /&gt;
&lt;br /&gt;
=== BT-Tags aktivieren ===&lt;br /&gt;
Jetzt kann der BT-Tag aktiviert werden. Bei einigen Tags muss dafür die &#039;&#039;&#039;Batteriesicherung&#039;&#039;&#039; gezogen werden.&lt;br /&gt;
&lt;br /&gt;
Einen Tag wird mit folgendem Befehl auf der Konsole gesucht:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo hcitool lescan&lt;br /&gt;
&lt;br /&gt;
Ausgabe z.B.:&lt;br /&gt;
LE Scan ...&lt;br /&gt;
7C:2F:80:A1:XA:XD (unknown)&lt;br /&gt;
7C:2F:80:A1:XA:XD Gigaset G-tag&lt;br /&gt;
7C:2F:80:A1:X4:X1 (unknown)&amp;lt;/source&amp;gt;&lt;br /&gt;
Eine Übersicht über die möglichen Befehle von hcitool gibt es mit der Eingabe von:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo hcitool&lt;br /&gt;
&lt;br /&gt;
Ausgabe z.B.:&lt;br /&gt;
hcitool - HCI Tool ver 5.23&lt;br /&gt;
Usage:&lt;br /&gt;
        hcitool [options] &amp;lt;command&amp;gt; [command parameters]&lt;br /&gt;
Options:&lt;br /&gt;
        --help  Display help&lt;br /&gt;
        -i dev  HCI device&lt;br /&gt;
Commands:&lt;br /&gt;
        dev     Display local devices&lt;br /&gt;
        inq     Inquire remote devices&lt;br /&gt;
        scan    Scan for remote devices&lt;br /&gt;
        name    Get name from remote device&lt;br /&gt;
        info    Get information from remote device&lt;br /&gt;
        spinq   Start periodic inquiry&lt;br /&gt;
        epinq   Exit periodic inquiry&lt;br /&gt;
        cmd     Submit arbitrary HCI commands&lt;br /&gt;
        con     Display active connections&lt;br /&gt;
        cc      Create connection to remote device&lt;br /&gt;
        dc      Disconnect from remote device&lt;br /&gt;
        sr      Switch master/slave role&lt;br /&gt;
        cpt     Change connection packet type&lt;br /&gt;
        rssi    Display connection RSSI&lt;br /&gt;
        lq      Display link quality&lt;br /&gt;
        tpl     Display transmit power level&lt;br /&gt;
        afh     Display AFH channel map&lt;br /&gt;
        lp      Set/display link policy settings&lt;br /&gt;
        lst     Set/display link supervision timeout&lt;br /&gt;
        auth    Request authentication&lt;br /&gt;
        enc     Set connection encryption&lt;br /&gt;
        key     Change connection link key&lt;br /&gt;
        clkoff  Read clock offset&lt;br /&gt;
        clock   Read local or remote clock&lt;br /&gt;
        lescan  Start LE scan&lt;br /&gt;
        lewladd Add device to LE White List&lt;br /&gt;
        lewlrm  Remove device from LE White List&lt;br /&gt;
        lewlsz  Read size of LE White List&lt;br /&gt;
        lewlclr Clear LE White list&lt;br /&gt;
        lecc    Create a LE Connection&lt;br /&gt;
        ledc    Disconnect a LE Connection&lt;br /&gt;
        lecup   LE Connection Update &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Falls beim SCAN kein Tag gefunden wird, sollte das BT Interface neu gestartet werden. Dazu ist kein Reboot des PI notwendig.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo hciconfig hci0 down&lt;br /&gt;
sudo hciconfig hci0 up&lt;br /&gt;
sudo hcitool dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Anleitung für ein  LE Device (z.B. Gtags,Pebbles etc.) ===&lt;br /&gt;
&lt;br /&gt;
Die Software lepresenced kann aktuell über drei Varianten installiert werden. Dabei ist die bevorzugte Variante (Variante 1) die Installation über das bereitgestellte .deb-Paket.&lt;br /&gt;
Die Variante 2 setzt voraus, dass im FHEM contrib Verzeichnis (/opt/fhem/contrib) die aktuelle Version des .deb-Pakets liegt. Die Variante 3 ist dafür gedacht, wenn man keine .deb-Pakete installieren kann/will oder es aus anderen Gründen nicht funktioniert. Es wird davon abgeraten die Variante 3 zu verwenden. Vollständigkeithalber wird sie aber aufgeführt.&lt;br /&gt;
&lt;br /&gt;
====Installation per .deb-Paket====&lt;br /&gt;
&lt;br /&gt;
Die bevorzugte Variante ist die Installation von lepresenced durch die passenden .deb Pakete.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.Variante:&#039;&#039;&#039;&lt;br /&gt;
Herunterladen der aktuellen lepresenced-0.81-1.deb Datei über den Webbrowser &lt;br /&gt;
[https://svn.fhem.de/trac/export/HEAD/trunk/fhem/contrib/PRESENCE/deb/ SVN-Repository]. Im SVN die passende Datei auswählen und in der folgende Webseite den Link unter:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Download in other formats:&lt;br /&gt;
    Original Format &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
anklicken und die Datei herunterladen.&lt;br /&gt;
Die Datei kann jetzt auf den RPi kopiert und mit folgenden Befehlen ausgeführt werden (ggf. Berechtigungen anpassen). &lt;br /&gt;
&lt;br /&gt;
Alternativ per wget Befehl direkt auf den RPi&lt;br /&gt;
 https://svn.fhem.de/trac/export/13992/trunk/fhem/contrib/PRESENCE/deb/lepresenced-0.81-1.deb&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2.Variante:&#039;&#039;&#039;&lt;br /&gt;
Herunterladen aus dem fhem contrib Verzeichnis:&lt;br /&gt;
Hierzu muss das contrib auf dem aktuellen Stand sein. Dazu wird die Installation von subversion (normal bereits vorhanden) benötigt.&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install subversion&lt;br /&gt;
&lt;br /&gt;
Danach kann per &lt;br /&gt;
 sudo svn checkout https://svn.fhem.de/fhem/trunk/fhem/contrib svnrepo&lt;br /&gt;
&lt;br /&gt;
Das aktuelle Repository auf den Pi heruntergeladen werden. Danach sollte im gewählten Verzeichnis die eingecheckten Dateien verfügbar sein.&lt;br /&gt;
 /opt/fhem/svnrepo/PRESENCE/deb  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Installation der Variante 1 oder 2 &#039;&#039;&#039;&lt;br /&gt;
Egal welche Variante gewählt wurde, kann nun mit folgenden Befehlen das Paket installiert werden. Bitte Pfade ggf. anpassen.&lt;br /&gt;
&lt;br /&gt;
 sudo dpkg -i lepresenced-0.81-1.deb&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get -f install&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe der Installation sollte am Ende ein [ ok ] Starting lepresenced (via systemctl): lepresenced.service. ausgeben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Paketlisten werden gelesen... Fertig&lt;br /&gt;
Abhängigkeitsbaum wird aufgebaut.       &lt;br /&gt;
Statusinformationen werden eingelesen.... Fertig&lt;br /&gt;
Abhängigkeiten werden korrigiert ... Fertig&lt;br /&gt;
Die folgenden zusätzlichen Pakete werden installiert:&lt;br /&gt;
  bluez-hcidump&lt;br /&gt;
Die folgenden NEUEN Pakete werden installiert:&lt;br /&gt;
  bluez-hcidump&lt;br /&gt;
0 aktualisiert, 1 neu installiert, 0 zu entfernen und 0 nicht aktualisiert.&lt;br /&gt;
1 nicht vollständig installiert oder entfernt.&lt;br /&gt;
Es müssen 157 kB an Archiven heruntergeladen werden.&lt;br /&gt;
Nach dieser Operation werden 490 kB Plattenplatz zusätzlich benutzt.&lt;br /&gt;
Möchten Sie fortfahren? [J/n]&lt;br /&gt;
Holen: 1 http://archive.raspberrypi.org/debian/ jessie/main bluez-hcidump armhf 5.23-2+rpi2 [157 kB]&lt;br /&gt;
Es wurden 157 kB in 0 s geholt (921 kB/s).&lt;br /&gt;
Vormals nicht ausgewähltes Paket bluez-hcidump wird gewählt.&lt;br /&gt;
(Lese Datenbank ... 42033 Dateien und Verzeichnisse sind derzeit installiert.)&lt;br /&gt;
Vorbereitung zum Entpacken von .../bluez-hcidump_5.23-2+rpi2_armhf.deb ...&lt;br /&gt;
Entpacken von bluez-hcidump (5.23-2+rpi2) ...&lt;br /&gt;
Trigger für man-db (2.7.0.2-5) werden verarbeitet ...&lt;br /&gt;
bluez-hcidump (5.23-2+rpi2) wird eingerichtet ...&lt;br /&gt;
lepresenced (0.81-1) wird eingerichtet ...&lt;br /&gt;
[ ok ] Starting lepresenced (via systemctl): lepresenced.service.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ab hier kann, wenn alles problemlos funktioniert hat mit der [[Einrichtung der G-Tags über FHEM]] weitergemacht werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3.Variante:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Bei dieser Variante wird das aktuellste lepresenced Skript aus github heruntergeladen. Das bedeutet, dass jegliche Konfiguration wie automatischer Start, Berechtigungen etc. &lt;br /&gt;
manuell konfiguriert werden muss. Diese Variante eignet sich nur für diejenigen, die keine .deb-Pakete installieren wollen/können oder die genau Wissen, was sie tun!&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
https://github.com/mhop/fhem-mirror/blob/master/fhem/contrib/PRESENCE/lepresenced&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zur &amp;quot;Installation&amp;quot; des Skripts folgendermaßen vorgehen:&lt;br /&gt;
Unter /fhem manuell den Ordner „script“ anlegen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir script&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Datei lepresenced reinkopieren und ausführbar machen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo chmod +x /opt/fhem/script/lepresenced&lt;br /&gt;
sudo chgrp -cR dialout lepresenced&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Skript erstmalig starten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ./lepresenced --loglevel LOG_EMERG -d&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kommt beim Starten des Skript eine Fehlermeldung, müssen die Abhängigkeiten aufgelöst werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Can&#039;t locate Net/Server/Daemonize.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.14.2 /usr/local/share/perl/5.14.2 /usr/lib/perl5 /usr/share/perl5 / usr/lib/perl/5.14 /usr/share/perl/5.14 /usr/local/lib/site_perl .) at /opt/fhem/lepresenced line 17.&lt;br /&gt;
BEGIN failed--compilation aborted at /opt/fhem/lepresenced line 17.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Um die Abhängigkeiten aufzulösen muss folgendes nachinstalliert werden und anschließend ein Reboot durchgeführt werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libnet-server-*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Einrichtung der G-Tags über FHEM====&lt;br /&gt;
&lt;br /&gt;
Nach dem letzten Schritt sind alle Bedingungen für eine abschließende Konfiguration der BT-Tags in FHEM abgeschlossen worden.&lt;br /&gt;
Jetzt kann der Tag dem FHEM-Server bekannt gemacht werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   --   Name       Modul    Modus         MAC vom Gtag  IP vom PI Port    Abfragezeit in Sekunden&lt;br /&gt;
define MeinGtAG PRESENCE lan-bluetooth xx:xx:xx:xx:xx:xx 127.0.0.1:5333    120&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Den absent und present Mode kann man einfach testen, in dem man den Gtag mit Alufolie einwickelt.&lt;br /&gt;
&lt;br /&gt;
=== Anleitung für ein NICHT LE Device (z.B. IPhone) ===&lt;br /&gt;
Die Installation kann (wie in der commanref beschrieben) über Debian Pakete erfolgen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.deb package for Debian (noarch): presenced-1.4.deb https://svn.fhem.de/fhem/trunk/fhem/contrib/PRESENCE/deb/presenced-1.4.deb&lt;br /&gt;
&lt;br /&gt;
.deb package for Raspberry Pi (raspbian): presenced-rpi-1.4.deb https://svn.fhem.de/fhem/trunk/fhem/contrib/PRESENCE/deb/presenced-rpi-1.4.deb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo dpkg -i presenced-rpi-1.4.de&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Installation perl script file (Auszug commanref)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
direct perl script file: presenced https://svn.fhem.de/fhem/trunk/fhem/contrib/PRESENCE/presenced&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
Nach dem letzten Schritt sind alle Bedingungen für eine abschließende Konfiguration der BT-Tags in FHEM abgeschlossen worden.&lt;br /&gt;
Jetzt kann der Tag dem FHEM-Server bekannt gemacht werden.&lt;br /&gt;
{{Randnotiz|RNText=Wenn man mit collectord arbeitet muß man die Erkennung bei allen Devices auf port 5222 setzen.&lt;br /&gt;
  lan-bluetooth xx:xx:80:xx:xx:AC 127.0.0.1:5222 20 120}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    --   Name       Modul    Modus         MAC vom Gtag  IP vom PI Port    Abfragezeit in Sekunden&lt;br /&gt;
define MeinGtAG PRESENCE lan-bluetooth xx:xx:xx:xx:xx:xx 127.0.0.1:5333    120&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Automatischer Start ===&lt;br /&gt;
&lt;br /&gt;
Wurde leprecend mit der oben genannten Variante 1 oder 2 installiert worden sein, wird per systemctl der automatische Start direkt eingerichtet. Es ist somit keine extra Konfiguration per Cron oder init.d notwendig.&lt;br /&gt;
&lt;br /&gt;
Wurde die Variante 3 - die manuelle Installation - durchgeführt; bitte folgende Schritte für den automatischen Start befolgen:&lt;br /&gt;
 &lt;br /&gt;
Damit das leprecend Skript beim Systemstart mitgestartet wird, sollte eine Crontab Eintrag gesetzt werden. Alternativ die rc.local anpassen.&lt;br /&gt;
Ersteres würde so aussehen:&lt;br /&gt;
&lt;br /&gt;
Ein sh-Skript mit dem Inhalt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo start-stop-daemon -d /opt/fhem/script -S -x /opt/fhem/script/lepresenced &amp;amp;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
unter dem Verzeichnis /home/pi ablegen, welches sich init_start.sh nennt.&lt;br /&gt;
&lt;br /&gt;
Das Skript dann unter: sudo crontab -e einhängen mit folgender Folge:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@reboot        /home/pi/init_start.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zweiteres so:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo nano /etc/rc.local&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Datei rc.local, freie Stelle suchen, vor &amp;quot;exit 0&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Start lepresenced&lt;br /&gt;
/opt/fhem/script/lepresenced --loglevel LOG_EMERG -d&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Batterieüberwachung (aktuell nur G-Tags) ===&lt;br /&gt;
&lt;br /&gt;
Leider überträgt der G-Tag nach der Einrichtung als Device in FHEM kein Reading mit seinem aktuellen Batteriestatus.&lt;br /&gt;
Dem wurde mit Hilfe des Forum Abhilfe geschaffen.&lt;br /&gt;
Im Folgenden wird erläutert wie die Batterieüberwachung eingerichtet werden kann.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Voraussetzung:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
bc - Basiscalculator [https://packages.debian.org/de/sid/bc Bc-Paket]&lt;br /&gt;
&amp;lt;pre&amp;gt; sudo apt-get install bc &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anlegen eines Shellskript auf dem Raspberry System. &lt;br /&gt;
Die Parameter &amp;lt;&amp;lt;MAC-Adresse&amp;gt;&amp;gt; und &amp;lt;&amp;lt;TagName&amp;gt;&amp;gt; müssen durch die Werte des auszulesenden G-Tags ersetzt werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
stringZ=$(sudo gatttool -b 5C:2B:80:C1:14:41 --char-read --handle=0x001b)&lt;br /&gt;
stringZ=${stringZ:33:2}&lt;br /&gt;
stringZ=$(echo &amp;quot;$stringZ&amp;quot; | tr a-f A-F)&lt;br /&gt;
decimal=$(echo &amp;quot;ibase=16; $stringZ&amp;quot; | bc)&lt;br /&gt;
perl /opt/fhem/fhem.pl 7072 &amp;quot;setreading MeinGtag Batterie $decimal&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dem Device in FHEM (hier MeinGtag) ein userReading mit dem Namen &#039;&#039;&#039;Batterie&#039;&#039;&#039; hinzufügen.&lt;br /&gt;
Das Shellskript mit folgendem Befehl starten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./GtagBatterie.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Wichtig ist hierbei,&#039;&#039;&#039; dass Skript mit &amp;quot;./&amp;quot; und nicht mit &amp;quot;sh&amp;quot; aufzurufen. Beim Aufruf mit &amp;quot;sh GtagBatterie.sh&amp;quot; produziert es einen Fehler&lt;br /&gt;
&amp;lt;pre&amp;gt;GtagBatterie.sh: 3: GtagBatterie.sh: Bad substitution &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Reading wird auf den ausgelesenen Wert der Batterie gesetzt. &lt;br /&gt;
&lt;br /&gt;
Hinweis: Es sollte für jeden G-Tag ein eigenes Skript abgelegt werden. Das Skript kann per crontab oder fhem Kommando (system) regelmäßig aufgerufen werden.&lt;br /&gt;
&lt;br /&gt;
=== Batterieüberwachung (alle Devices vom Typ &amp;quot;MODE=lan-bluetooth&amp;quot;) ===&lt;br /&gt;
&lt;br /&gt;
Es gibt eine weitere Möglichkeit um den Batteriestatus von LE Devices abzurufen und in FHEM als Reading darzustellen.&lt;br /&gt;
Dabei wird der Batteriezustand für alle LE Devices, die bereits in FHEM konfiguriert sind und per lepresenced überwacht werden, automatisch in einem shell-Script ermittelt.&lt;br /&gt;
Näheres dazu im Forumartikel {{Link2Forum|Topic=56960|LinkText=Erweiterung: Anwesenheitserkennung/Batterieüberwachung}}.&lt;br /&gt;
&lt;br /&gt;
Vorteile:&lt;br /&gt;
* Automatische Ermittlung aller in FHEM konfigurierten LE Devices&lt;br /&gt;
* Möglichkeit, diese Devices alternativ manuell im Script einzutragen&lt;br /&gt;
* Es werden nur Devices abgefragt, die im Status &amp;quot;present&amp;quot; sind, also mit ziemlicher Sicherheit auch verfügbar sind&lt;br /&gt;
* Ein eventuell auf dem FHEM telnet-Port gesetztes Passwort kann im Script hinterlegt werden&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Voraussetzung:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Funktionierendes lepresenced&#039;&#039;&#039; - siehe [[Anwesenheitserkennung#Anleitung_f.C3.BCr_ein_LE_Device_.28z.B._Gtags.2CPebbles_etc..29|Anleitung für ein LE Device (z.B. Gtags,Pebbles etc.)]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;socat&#039;&#039;&#039; - TCP port forwarder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get update &amp;amp;&amp;amp; sudo apt-get install socat&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gawk&#039;&#039;&#039; - Zum extrahieren der Daten&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get update &amp;amp;&amp;amp; sudo apt-get install gawk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gatttool&#039;&#039;&#039; - Bestandteil von bluez &lt;br /&gt;
&lt;br /&gt;
gatttool ist auf den meisten Distributionen im bluez-Paket, allerdings nicht bei Opensuse. Dort muss man das Sourcepaket von bluez installieren und selbst kompilieren.&lt;br /&gt;
gatttool sollte dann nach /usr/bin oder /usr/local/bin kopiert werden,&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zusätzlich zu den notwendigen Erweiterungen werden für die Ausführung von gatttool &#039;&#039;&#039;Root-Rechte benötigt&#039;&#039;&#039;!&lt;br /&gt;
&lt;br /&gt;
Das Script selbst gibt es hier: [https://raw.githubusercontent.com/micky0867/lebattery/master/lebattery lebattery]&lt;br /&gt;
&lt;br /&gt;
Am Besten unter /opt/fhem/script/lebattery speichern und ausführbar machen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo su -&lt;br /&gt;
mkdir /opt/fhem/script&lt;br /&gt;
cd /opt/fhem/script&lt;br /&gt;
wget https://raw.githubusercontent.com/micky0867/lebattery/master/lebattery&lt;br /&gt;
chmod 755 lebattery&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je nach Bedarf können im Script noch die folgenden 3 Parameter angepasst werden:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# If allowed_telnetPort is protected by a password, add the password here&lt;br /&gt;
TELNETPASSWORD=&amp;quot;&amp;quot;&lt;br /&gt;
# Attribute for batterylevel in FHEM&lt;br /&gt;
ATTRIBUT=&amp;quot;batterylevel&amp;quot;&lt;br /&gt;
# Use this, if you dont want the script to determine the tags on its own&lt;br /&gt;
LETAGS=&amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Skript wird dann unter root folgendermaßen gestartet:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/opt/fhem/script/lebattery -v&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ausgabe des Skripts, wenn es mit dem Verbose Parameter -v gestartet wird.&lt;br /&gt;
&lt;br /&gt;
Beide Devices sind vom Typ NUT mini, das Device mit dem FHEM-Namen &#039;&#039;&#039;nut_Micky&#039;&#039;&#039; ist im Status &#039;&#039;&#039;absent&#039;&#039;&#039;. Das zweite Device ist im Status &#039;&#039;&#039;present&#039;&#039;&#039;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Determining address for nut_Micky ...&lt;br /&gt;
nut_Micky is in state absent, no further action required&lt;br /&gt;
&lt;br /&gt;
Determining address for nut_Test ...&lt;br /&gt;
Fetching batterylevel for nut_Test (F3:44:04:81:54:89) ...&lt;br /&gt;
Setting batterylevel for nut_Test to 100%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mein crontab-Eintrag (User root) sieht so aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3 3  * * * /opt/fhem/script/lebattery -v &amp;gt;/opt/fhem/script/lebattery.log 2&amp;gt;&amp;amp;1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Damit wird jeden Morgen um 3 Minuten nach 3 Uhr der Zustand der Batterien aller Devices ermittelt und in FHEM abgespeichert.&amp;lt;br&amp;gt; &lt;br /&gt;
Bevor man das mit crontab macht, sollte man allerdings zunächst sicher stellen, dass es auch ohne crontab funktioniert....&lt;br /&gt;
&lt;br /&gt;
Bei Problemen kann man auch erstmal schauen, ob das mit dem gattool überhaupt funktioniert:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gatttool -t &amp;lt;Typ&amp;gt; -b &amp;lt;MAC-Adresse&amp;gt; --char-read --uuid 0x2a19&lt;br /&gt;
&lt;br /&gt;
handle: 0x0017 	 value: 64&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In diesem Fall hat die Batterie noch 100% (hex 64).&amp;lt;br&amp;gt;&lt;br /&gt;
Der Typ ist abhängig vom Hersteller und kann public (G-Tags) bzw. random (Nut) sein. Im Zweifelsfall beides ausprobieren.&lt;br /&gt;
&lt;br /&gt;
===  Anwesenheitserkennung / Anwesenheitsbenachrichtigung mit G-Tags ===&lt;br /&gt;
&lt;br /&gt;
Ein Skript zur Nutzung der Gigaset G-TAGs zur Alarmierung bei öffnen und schließen von Türen und zur Anwesenheitserkennung, um die Alarmierung zu aktivieren bzw. deaktivieren. &lt;br /&gt;
Es kann verwendet werden um die Anwesenheit von mehrern Personen im Haushalt zu erkennen. Dabei wird eingeschränkt, dass nur bestimmte Personen die Alarmierung aktivieren können ( Eltern/Kind -Beziehung ).&lt;br /&gt;
Des Weiteren werden im Beispiel die Eltern benachrichtigt wenn eins der Kinder das Haus verlässt und die Eltern nicht anwesend sind.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText= Namen der G-Tags in den Skripten bitte Anpassen!}}&lt;br /&gt;
&lt;br /&gt;
Für die &#039;&#039;Notify&#039;&#039; und die &#039;&#039;RESIDENTS-Erweiterung&#039;&#039; wird ein Dummy benötigt.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Alarm dummy&lt;br /&gt;
attr Alarm devStateIcon aktiv:secur_locked@red inaktiv:secur_open@lightgreen&lt;br /&gt;
attr Alarm eventMap on:aktiv off:inaktiv&lt;br /&gt;
attr Alarm setList on off&lt;br /&gt;
attr Alarm webCmd aktiv:inaktiv&lt;br /&gt;
attr Alarm room Alarm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Mit Notify ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gtag.*.presence:.* {Anwesenheit_check(&amp;quot;$EVTPART1&amp;quot;, &amp;quot;$NAME&amp;quot;)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Code für die 99_myUtils.pm&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### GTAG ANWESENHEITS CHECK&lt;br /&gt;
sub Anwesenheit_check($$) {&lt;br /&gt;
my ($EVENT, $NAME) = @_;&lt;br /&gt;
&lt;br /&gt;
# gtag_rot	-	Alias Marco&lt;br /&gt;
# gtag_schwarz	-	Alias Ulli&lt;br /&gt;
# gtag_gruen	-	Alias Frida&lt;br /&gt;
# gtag_orange	-	Alias Hannah&lt;br /&gt;
&lt;br /&gt;
my $RESIDENT = &amp;quot;rr_&amp;quot;; # Alle GTAGs sind Standardmäßig Residents Roommate&lt;br /&gt;
# $RESIDENT = &amp;quot;rg_&amp;quot; if (($NAME eq &amp;quot;gtag_orange&amp;quot;) xor ($NAME eq &amp;quot;gtag_weis&amp;quot;)); # Hier nur Gäste (Roomguest) Auskommentiert, da ich es so nicht brauche&lt;br /&gt;
my $ROOMMATE = (&amp;quot;$RESIDENT&amp;quot; . &amp;quot;$NAME&amp;quot;); # Residentsname zusammenbauen&lt;br /&gt;
my $ALIASNAME = AttrVal($ROOMMATE,&#039;alias&#039;,$ROOMMATE); # ALIAS des Roommates auslesen&lt;br /&gt;
&lt;br /&gt;
my $GTAG1 = Value(&#039;gtag_rot&#039;); # ELTERN&lt;br /&gt;
my $GTAG2 = Value(&#039;gtag_schwarz&#039;); # ELTERN&lt;br /&gt;
&lt;br /&gt;
my $STATUS = &amp;quot;wahrscheinlich gerade los&amp;quot;;&lt;br /&gt;
$STATUS = &amp;quot;anwesend&amp;quot; if ($EVENT eq &amp;quot;present&amp;quot;); # Status: anwesend&lt;br /&gt;
$STATUS = &amp;quot;unterwegs&amp;quot; if ($EVENT eq &amp;quot;absent&amp;quot;); # Status: unterwegs&lt;br /&gt;
&lt;br /&gt;
Log 1, &amp;quot;$ALIASNAME ist $STATUS.&amp;quot;; # LOG Eintrag erzeugen&lt;br /&gt;
&lt;br /&gt;
if (($EVENT eq &amp;quot;present&amp;quot; &amp;amp;&amp;amp; Value(&amp;quot;Alarm&amp;quot;) eq &amp;quot;aktiv&amp;quot;) &amp;amp;&amp;amp; ($NAME eq &amp;quot;gtag_gruen&amp;quot; xor $NAME eq &amp;quot;gtag_orange&amp;quot;)) {&lt;br /&gt;
 fhem(&amp;quot;set teleBot send ALARMIERUNG BLEIBT AKTIV: $ALIASNAME ist da...&amp;quot;); # Telegram&lt;br /&gt;
# fhem(&amp;quot;set Infopush msg &#039;ALARMIERUNG BLEIBT AKTIV&#039; &#039;$ALIASNAME ist da...&#039;&amp;quot;); # Pushover&lt;br /&gt;
 }&lt;br /&gt;
 elsif (($EVENT eq &amp;quot;present&amp;quot; &amp;amp;&amp;amp; Value(&amp;quot;Alarm&amp;quot;) eq &amp;quot;aktiv&amp;quot;) &amp;amp;&amp;amp; ($NAME eq &amp;quot;gtag_rot&amp;quot; xor $NAME eq &amp;quot;gtag_schwarz&amp;quot;)) {&lt;br /&gt;
 fhem(&amp;quot;set teleBot send ALARMIERUNG INAKTIV: $ALIASNAME ist da...; set Alarm inaktiv&amp;quot;); # Telegram&lt;br /&gt;
# fhem(&amp;quot;set Infopush msg &#039;ALARMIERUNG INAKTIV&#039; &#039;$ALIASNAME ist da...&#039;; set Alarm inaktiv&amp;quot;); # Pushover&lt;br /&gt;
 }&lt;br /&gt;
 elsif (($EVENT eq &amp;quot;absent&amp;quot; &amp;amp;&amp;amp; Value(&amp;quot;Alarm&amp;quot;) eq &amp;quot;aktiv&amp;quot;) &amp;amp;&amp;amp; ($NAME eq &amp;quot;gtag_gruen&amp;quot; xor $NAME eq &amp;quot;gtag_orange&amp;quot;)) {&lt;br /&gt;
 fhem(&amp;quot;set teleBot send ALARMIERUNG BLEIBT AKTIV: $ALIASNAME hat das Haus verlassen.&amp;quot;); # Telegram&lt;br /&gt;
# fhem(&amp;quot;set Infopush msg &#039;ALARMIERUNG BLEIBT AKTIV&#039; &#039;$ALIASNAME hat das Haus verlassen.&#039;&amp;quot;); # Pushover&lt;br /&gt;
 } 		&lt;br /&gt;
 elsif (($EVENT eq &amp;quot;absent&amp;quot; &amp;amp;&amp;amp; Value(&amp;quot;Alarm&amp;quot;) eq &amp;quot;inaktiv&amp;quot;) &amp;amp;&amp;amp; ($GTAG1 eq &amp;quot;absent&amp;quot; &amp;amp;&amp;amp; $GTAG2 eq &amp;quot;absent&amp;quot;)) {&lt;br /&gt;
 fhem(&amp;quot;set Alarm aktiv; set teleBot send ALARMIERUNG AKTIV: $ALIASNAME hat das Haus verlassen.&amp;quot;); # Telegram&lt;br /&gt;
# fhem(&amp;quot;set Alarm aktiv; set Infopush msg &#039;ALARMIERUNG AKTIV&#039; &#039;$ALIASNAME hat das Haus verlassen.&#039; &#039;&#039; 0 &#039;&#039;&amp;quot;); # Pushover&lt;br /&gt;
 }&lt;br /&gt;
}&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;
====Mit Notify und Integration des RESIDENTS-MODUL====&lt;br /&gt;
&lt;br /&gt;
Der hier beschriebene Code erweitert die Funktionen unter dem Punkt 5.93.&lt;br /&gt;
Das Notify muss daher mit der folgenden Zeile erweitert werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Alarm_AnwesenheitCheck notify gtag.*.presence:.* { Anwesenheit_check(&amp;quot;$EVTPART1&amp;quot;, &amp;quot;$NAME&amp;quot;), Anwesenheit_check_resi(&amp;quot;$NAME&amp;quot;) }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusätzlicher Code für die 99_myUtils.pm um die RESIDENTS Funktion nutzen zu können:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### RESIDENTS&lt;br /&gt;
sub Anwesenheit_check_resi($) {&lt;br /&gt;
my ($NAME) = @_;&lt;br /&gt;
my $ALIASNAME = AttrVal($NAME,&#039;alias&#039;,$NAME); # ALIASNAME des GTAGs auslesen&lt;br /&gt;
&lt;br /&gt;
my $RESIDENT = &amp;quot;rr_&amp;quot;; # Als Standard sind alle GTAGs Roommates&lt;br /&gt;
$RESIDENT = &amp;quot;rg_&amp;quot; if (($NAME eq &amp;quot;gtag_orange&amp;quot;) xor ($NAME eq &amp;quot;gtag_weis&amp;quot;)); # Hier nur GTAG Namen der Gäste (Roomguest)&lt;br /&gt;
my $ROOMMATE = (&amp;quot;$RESIDENT&amp;quot; . &amp;quot;$ALIASNAME&amp;quot;); # Residentsname zusammenbauen&lt;br /&gt;
&lt;br /&gt;
if (ReadingsVal($NAME,&#039;presence&#039;,$NAME) eq &amp;quot;absent&amp;quot;) {&lt;br /&gt;
 fhem(&amp;quot;set $ROOMMATE absent&amp;quot;); # Resisents Status von Roommates setzen&lt;br /&gt;
 }&lt;br /&gt;
 elsif(ReadingsVal($NAME,&#039;presence&#039;,$NAME) eq &amp;quot;present&amp;quot;) {&lt;br /&gt;
 fhem(&amp;quot;set $ROOMMATE home&amp;quot;); # Resisents Status von Roommates setzen&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Mit Notify und Fenster/Tür. -Kontakt Überwachung====&lt;br /&gt;
&lt;br /&gt;
Erweiterung für die Überwachung von  Fenster/Tür. -Kontakten. Dazu sind zwei weitere Notifys notwendig die auf die Trigger der Kontakte regagieren&lt;br /&gt;
und so eine weitere Funktion in der 99_myUtils.pm ansprechen. Die Notifys triggern auf Kontakte die mit dem Namen Kontakt* beginnen.&lt;br /&gt;
Sollten die eigenen Fenster/Tür. -Kontakt anderen Namen besitzen, müssen die Skripte dementsprechend angepasst werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Alarm_Kontaktmeldung notify Kontakt.*:contact:.* {Kontakt_Meldung(&amp;quot;$EVTPART1&amp;quot;, &amp;quot;$NAME&amp;quot;)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Alarm_Sabotagealarm notify Kontakt.*.sabotageError:.on {Kontakt_Sabotage(&amp;quot;$EVTPART1&amp;quot;, &amp;quot;$NAME&amp;quot;)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusätzlicher Code für die 99_myUtils.pm um die TÜRKONTAKTE-Meldung nutzen zu können:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### TÜRKONTAKTE-Meldung/Zustand&lt;br /&gt;
sub Kontakt_Meldung($$) {&lt;br /&gt;
my ($EVENT, $NAME) = @_;&lt;br /&gt;
my $ALIASNAME = AttrVal($NAME,&#039;alias&#039;,$NAME);&lt;br /&gt;
Log 1, &amp;quot;$ALIASNAME wurde $EVENT&amp;quot;;&lt;br /&gt;
if (ReadingsVal(&amp;quot;Alarm&amp;quot;, &amp;quot;state&amp;quot;, &amp;quot;on&amp;quot;) eq &amp;quot;on&amp;quot;) {&lt;br /&gt;
fhem(&amp;quot;set teleBot send $ALIASNAME wurde $EVENT&amp;quot;); # Nachricht über Telegram&lt;br /&gt;
# fhem(&amp;quot;set Infopush msg &#039;$ALIASNAME&#039; &#039;$ALIASNAME wurde $EVENT&#039;&amp;quot;); # Nachricht über Pushover&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
### TÜRKONTAKTE-Sabotagealarm&lt;br /&gt;
&lt;br /&gt;
sub Kontakt_Sabotage($$) {&lt;br /&gt;
my ($EVENT, $NAME) = @_;&lt;br /&gt;
my $ALIASNAME = AttrVal($NAME,&#039;alias&#039;,$NAME);&lt;br /&gt;
Log 1, &amp;quot;$ALIASNAME meldet Sabotagealarm&amp;quot;;&lt;br /&gt;
fhem(&amp;quot;set teleBot send Alarm: $ALIASNAME meldet Sabotagealarm&amp;quot;); # Nachricht über Telegram&lt;br /&gt;
# fhem(&amp;quot;set Infopush msg &#039;Alarmanlage&#039; &#039;$ALIASNAME meldet Sabotagealarm&#039; &#039;&#039; 2 &#039; &#039; 60 600 &amp;quot;); # Nachricht über Pushover&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Hinweis zur Benutzung / Fehlerhandling ====&lt;br /&gt;
&lt;br /&gt;
Der Alarm dummy hat den Zustand on:off.  Die Bezeichnungen und Namen müssen 1:1 übernommen werden damit das Script funktioniert.&lt;br /&gt;
Andernfalls müssen die Bezeichnungen für z.B. absent:unterwegs und present:anwesend - angepasst werden.&lt;br /&gt;
Die Benachrichtigung kann aktuell per &#039;&#039;Telegram&#039;&#039; sowie &#039;&#039;Pushover&#039;&#039; (&#039;&#039;&#039;Achtung mit zweiterem sind Abokosten verbunden!&#039;&#039;&#039;) realisiert werden.&lt;br /&gt;
Diskussion zum Thema im Forum unter: {{Link2Forum|Topic=64080}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Verwendung von Collectord bei mehreren PRESENCE Installationen mit LE-Devices ===&lt;br /&gt;
&lt;br /&gt;
Um zwei presence Installation zu verbinden wird der collectored Daemon von Markus Bloch benötigt.&lt;br /&gt;
Hierfür gibt es im Wiki auch eine kurze Erläuterung sowie die Commandref.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Aufbau:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
RPi1 (Hautpinstanz): fhem nebst presence Installation sowie collectord&lt;br /&gt;
RPi2 (Zweitsystem): fhem nebst presence Installation&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installation:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
auf RPi1 wird wie in der Commandref und im Wiki beschriebendas Presence Paket (https://svn.fhem.de/trac/export/HEAD/trunk/fhem/contrib/PRESENCE/deb/) heruntergeladen, installiert und konfiguriert.&lt;br /&gt;
Alle BT-Tags werden dann wie im Wiki beschrieben konfiguriert.&lt;br /&gt;
&lt;br /&gt;
auf RPi2 wird wie in der Commandref und im Wiki beschriebendas Presence Paket (https://svn.fhem.de/trac/export/HEAD/trunk/fhem/contrib/PRESENCE/deb/) heruntergeladen, installiert und konfiguriert.&lt;br /&gt;
Alle BT-Tags werden dann wie im Wiki beschrieben konfiguriert.&lt;br /&gt;
&lt;br /&gt;
Somit sollte auf beiden Systemen eine identische Konfiguration vorliegen.&lt;br /&gt;
&lt;br /&gt;
Jetzt wird das collectord heruntergeladen und installiert:&lt;br /&gt;
https://svn.fhem.de/trac/export/HEAD/trunk/fhem/contrib/PRESENCE/deb/collectord-1.7.deb&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install collectord-1.7.deb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach der Installation befindet sich im Verzeichnis: /etc/collectord.conf die Konfigurationsdatei für das collectord.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Konfiguration Shell:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo vi /etc/collectord.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Datei muss jetzt nach folgender Vorlage angepasst werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# room definition&lt;br /&gt;
#[room-name]           # name of the room&lt;br /&gt;
#address=192.168.0.10   # ip-address or hostname&lt;br /&gt;
#port=5111                # tcp port which should be used (5111 is default)&lt;br /&gt;
#presence_timeout=120     # timeout in seconds for each check when devices are present&lt;br /&gt;
#absence_timeout=20       # timeout in secondsfor each check when devices are absent&lt;br /&gt;
&lt;br /&gt;
[RPi1] 			          # Name (wird als Reading room bei den BT-Tags angezeigt) der presence Instanze&lt;br /&gt;
address=127.0.0.1 	          # Lokale Adresse RPi1 , da hier das Collectord später laufen soll!&lt;br /&gt;
port=5111		          # Port der Presence Installation &lt;br /&gt;
presence_timeout=60		  # Selbstgewaelte Pruefintervalle&lt;br /&gt;
absence_timeout=60		  # Selbstgewaelte Pruefintervalle&lt;br /&gt;
&lt;br /&gt;
[RPi2]  		          # Name (wird als Reading room bei den BT-Tags angezeigt) der presence Instanze&lt;br /&gt;
address=192.168.178.127	          # IP-Adresse der Instanz, wo nur das Presence laueft, also RPi2&lt;br /&gt;
port=5111		          # Port der Presence Installation &lt;br /&gt;
presence_timeout=60		  # Selbstgewaelte Pruefintervalle&lt;br /&gt;
absence_timeout=60		  # Selbstgewaelte Pruefintervalle&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hinweis: Es dürfen keine [Namen] mit Leerzeichen verwendet werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Konfiguration FHEM:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
RPi1&lt;br /&gt;
define Gtag PRESENCE lan-bluetooth XX:XX:XX:XX:XX:XX 127.0.0.1:5222 60&lt;br /&gt;
Hinweis: Der Port ist der, des Collectord!! Also hier, Standard 5222&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
RPi2&lt;br /&gt;
define Gtag PRESENCE lan-bluetooth XX:XX:XX:XX:XX:XX 192.168.178.27:5222 60&lt;br /&gt;
Hinweis: Der Port ist der, des Collectord!! Also hier, Standard 5222 die IP-Adresse von RPi1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach der Konfiguration kann der Daemon gestartet werden. Um eine visuelle Log-Ausgabe mit dem Aufruf:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo /usr/bin/perl /usr/sbin/collectord -vv -c /etc/collectord.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2017-04-02 17:52:55 - =================================================&lt;br /&gt;
2017-04-02 17:52:55 - started with PID 15554&lt;br /&gt;
2017-04-02 17:52:55 - reading configuration file&lt;br /&gt;
2017-04-02 17:52:55 - no config errors found&lt;br /&gt;
2017-04-02 17:52:55 - forked with PID 15556&lt;br /&gt;
2017-04-02 17:52:56 - created socket on 0.0.0.0 with port 5111&lt;br /&gt;
2017-04-02 17:53:20 - new connection from 127.0.0.1:48656&lt;br /&gt;
2017-04-02 17:53:20 - created thread 1 for processing device 7C:2F:80:E1:14:31 in room RPi2 for peer 127.0.0.1 (UUID: d0beb79dd4771532eb5e207c7bf31788)&lt;br /&gt;
2017-04-02 17:53:20 - created thread 2 for processing device 7C:2F:80:E1:14:31 in room RPi1 for peer 127.0.0.1 (UUID: d0beb79dd4771532eb5e207c7bf31788)&lt;br /&gt;
2017-04-02 17:53:20 - new connection from 127.0.0.1:48662&lt;br /&gt;
2017-04-02 17:53:20 - new connection from 127.0.0.1:48664&lt;br /&gt;
2017-04-02 17:53:20 - created thread 3 for processing device 7C:2F:80:ED:BC:F7 in room RPi2 for peer 127.0.0.1 (UUID: 7495a112063d5db45e6335d3fe305e36)&lt;br /&gt;
2017-04-02 17:53:20 - created thread 4 for processing device 7C:2F:80:ED:BC:F7 in room RPi1 for peer 127.0.0.1 (UUID: 7495a112063d5db45e6335d3fe305e36)&lt;br /&gt;
2017-04-02 17:53:20 - created thread 5 for processing device 7C:2F:80:E1:2A:4D in room RPi2 for peer 127.0.0.1 (UUID: c228f8d4d33b06787f995c7903c02760)&lt;br /&gt;
2017-04-02 17:53:20 - created thread 6 for processing device 7C:2F:80:E1:2A:4D in room RPi1 for peer 127.0.0.1 (UUID: c228f8d4d33b06787f995c7903c02760)&lt;br /&gt;
2017-04-02 17:53:22 - new connection from 192.168.xxx.xxx:51638&lt;br /&gt;
2017-04-02 17:53:22 - created thread 7 for processing device 7C:2F:80:E1:14:31 in room RPi2 for peer 192.168.xxx.xxx (UUID: 5db7012e709d6dc2fcd8159fc0344e40)&lt;br /&gt;
2017-04-02 17:53:22 - created thread 8 for processing device 7C:2F:80:E1:14:31 in room RPi1 for peer 192.168.xxx.xxx (UUID: 5db7012e709d6dc2fcd8159fc0344e40)&lt;br /&gt;
2017-04-02 17:53:22 - new connection from 192.168.xxx.xxx:51640&lt;br /&gt;
2017-04-02 17:53:22 - created thread 9 for processing device 7C:2F:80:ED:BC:F7 in room RPi2 for peer 192.168.xxx.xxx (UUID: c4b4d7c654132cf88e8c1fec3a956d3d)&lt;br /&gt;
2017-04-02 17:53:23 - created thread 10 for processing device 7C:2F:80:ED:BC:F7 in room RPi1 for peer 192.168.xxx.xxx (UUID: c4b4d7c654132cf88e8c1fec3a956d3d)&lt;br /&gt;
2017-04-02 17:53:29 - new connection from 192.168.xxx.xxx:51642&lt;br /&gt;
2017-04-02 17:53:29 - created thread 11 for processing device 7C:2F:80:E1:2A:4D in room RPi2 for peer 192.168.xxx.xxx (UUID: ecd7081e5ae3a0d8e735c8750cb116a1)&lt;br /&gt;
2017-04-02 17:53:29 - created thread 12 for processing device 7C:2F:80:E1:2A:4D in room RPi1 for peer 192.168.xxx.xxx (UUID: ecd7081e5ae3a0d8e735c8750cb116a1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn das Log wie oben abgebildet aussieht wurde alles richtig gemacht und unter dem Device in fhem erscheint ein neues Reading &amp;quot;rooms&amp;quot; mit dem Wert der Erkannten PRESENCE Installation.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Automatischer Start:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn das Collectord per .deb Paket installiert wurde, startet es automatisch bei einem Reboot mit.&lt;br /&gt;
Manuell Starten als Daemon mit:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo /usr/bin/perl /usr/sbin/collectord -c /etc/collectord.conf -d -v -l /var/log/collectord.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Problemlösungen ===&lt;br /&gt;
Falls es &#039;&#039;&#039;Probleme beim Starten des Skripts&#039;&#039;&#039; gibt bzw. man das Skript ohne Reboot des Systems neustarten möchte, kann man dies per kill Befehl erledigen.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps -ef | grep lepresenced&lt;br /&gt;
sudo kill &amp;lt;pid&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Debuglevel lepresenced setzen:&lt;br /&gt;
{{Randnotiz|RNText=Um Debug-Meldungen zu bekommen (Vorsicht bei SD-Karten-Systemen wie dem RPi) - Hierbei werden die Schreibzyklen auf die SD-Karte erhöht.}}&lt;br /&gt;
&lt;br /&gt;
Der Log Level muss im lepresenced-Skript selbst verändert werden. Um den Log-Level auf INFO/WARNING/DEBUG zu setzen, dass Skript lepresenced mit einem Editor öffnen und die Stellen, wo LOG_WARNING zu finden sind durch den nötigen LOG-Eintrag ersetzen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lepresenced --loglevel LOG_DEBUG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nur das wichtigste Loggen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lepresenced --loglevel LOG_WARNING&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Keinerlei LOG-Einträge&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lepresenced --loglevel LOG_EMERG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei &#039;&#039;&#039;Problemen mit der Batterieüberwachung&#039;&#039;&#039; der Tags kann die Pi Firmeware mit folgenden Befehl auf eine ältere Version zurückgesetzt werden.&lt;br /&gt;
Fehlermeldung beim Aufruf des lebattery oder anderen Batterietestskripten:&lt;br /&gt;
&amp;lt;pre&amp;gt;connect: Connection refused (111)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lösung (vorübergehend) &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo rpi-update 8521fd34c8f66b6d109acce943f6e25ec93ec005&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mehr dazu unter: {{Link2Forum|Topic=56960|Message=589165}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Das BT-Device ist ständig &amp;quot;absent&amp;quot;&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Eine Mögliche Lösung kann sein, dass Paket bluez-hcidump zu installieren. Das Werkzeug hcidump erlaubt die Beobachtung von Bluetooth-Aktivität.&lt;br /&gt;
Dies ist nicht notwendig, wenn bereits bluez installiert ist, da dies Teil des bluez Paketes ist&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install bluez-hcidump&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fehler in Logdateien /var/log/syslog und /var/log/kernel&#039;&#039;&#039;&lt;br /&gt;
 Jul 29 15:08:11 raspberrypi kernel: [ 4905.634211] bt_err_ratelimited: 1 callbacks suppressed&lt;br /&gt;
 Jul 29 15:08:11 raspberrypi kernel: [ 4905.634231] Bluetooth: hci0 advertising data length corrected&lt;br /&gt;
 Jul 29 15:08:12 raspberrypi kernel: [ 4906.647350] Bluetooth: hci0 advertising data length corrected&lt;br /&gt;
 Jul 29 15:08:13 raspberrypi kernel: [ 4907.532081] Bluetooth: hci0 advertising data length corrected&lt;br /&gt;
 Jul 29 15:08:13 raspberrypi kernel: [ 4907.655564] Bluetooth: hci0 advertising data length corrected&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Ursache des Problems ist noch nicht ergründet, allerdings betrifft dies aktuell nur den RPi3. Die Fehlermeldungen werden in verschiedene log&#039;s geschrieben. Darunter maßgeblich &amp;quot;syslog&amp;quot; und &amp;quot;kern.log&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Lösung (vorübergehend)&lt;br /&gt;
Unterbinden der Einträge durch Anlage eines blocklist Eintrag:&lt;br /&gt;
&lt;br /&gt;
 1. Unter &amp;quot;/etc/rsyslog.d&amp;quot; eine Datei erzeugen mit dem Namen &amp;quot;01-blocklist.conf&amp;quot;&lt;br /&gt;
 2. Inhalt: (Die Ausdrücke in den &amp;quot;&amp;quot; sind diejenigen, die aus dem log verschwinden sollen. - bei mir waren es die unten stehenden&amp;quot;)&lt;br /&gt;
    :msg,contains,&amp;quot;Bluetooth: hci0 advertising data length corrected&amp;quot; stop&lt;br /&gt;
    :msg,contains,&amp;quot;bt_err_ratelimited:&amp;quot; stop&lt;br /&gt;
 3. Dienst neu starten &amp;quot;sudo service rsyslog restart&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Weiter Infos werden im offiziellen Thema [[https://forum.fhem.de/index.php/topic,28753.msg499184/topicseen.html#msg499184]] diskutiert.&lt;br /&gt;
&lt;br /&gt;
==== Ansprechpartner ====&lt;br /&gt;
# {{Link2FU|5068|PatrikR}} (Patrick) für lepresenced &lt;br /&gt;
# [[Benutzer Diskussion:Devender|Devender]] ({{Link2FU|20043|Dirk}}) für Wiki und Doku&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:Glossary]]&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Anwesenheitserkennung&amp;diff=21749</id>
		<title>Anwesenheitserkennung</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Anwesenheitserkennung&amp;diff=21749"/>
		<updated>2017-06-23T18:39:48Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: /* Das PRESENCE Modul */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Viele Benutzer führen bereits eine eigene &#039;&#039;&#039;Anwesenheitserkennung&#039;&#039;&#039; durch. Diese basiert in den meisten Fällen auf Ping Checks oder bei [[AVM Fritz!Box|FritzBoxen]] auf dem Befehl &#039;&#039;ctlmgr_ctl&#039;&#039;. Diese Lösungen können aber je nach Aufbau und Funktion FHEM massiv beeinträchtigen. Aufgrund des Aufbaus vom FHEM kann dieses dadurch für mehrere Sekunden zum völligen Stillstand gebracht werden.&lt;br /&gt;
&lt;br /&gt;
In FHEM gibt es mittlerweile mehrere Module, die eine zuverlässige Anwesenheitserkennung bieten, ohne dabei FHEM bei der Ausführung zu beeinträchtigen.&lt;br /&gt;
&lt;br /&gt;
Eine erweiterte Funktion der Anwesenheitserkennung ist die Standortverfolgung, die sich nicht nur auf ein oder sehr wenige mit (eigenem) WLAN versorgte Gebiete beschränkt.&lt;br /&gt;
&lt;br /&gt;
== Vorüberlegungen ==&lt;br /&gt;
Generell gibt es mehrere Ansätze um Anwesenheitserkennung mit Handys/Smartphones durchzuführen.&lt;br /&gt;
&lt;br /&gt;
* via PING Checks im gesamten WLAN&lt;br /&gt;
* Aktivitätsprüfung auf einer FritzBox&lt;br /&gt;
* Bluetooth Checks in der gesamten Wohnung&lt;br /&gt;
* eigene Perl-Funktion&lt;br /&gt;
* aktive Benachrichtigung des Smartphones, ausgelöst z.B. über Geo-Lokation/Geofence&lt;br /&gt;
&lt;br /&gt;
Dabei gilt bei der Auswahl der Art darauf zu achten wie sich das jeweilige Device verhält. Aufgrund der Vielfältigkeit kann man hier keine allgemeine Vorgehensweise empfehlen. Als einfacher Start (zumindest für Nicht-Apfel Telefone) eignet sich die Ping-Überprüfung und die FritzBox-Abfrage sehr gut.&lt;br /&gt;
&lt;br /&gt;
=== Randbedingungen ===&lt;br /&gt;
Es gibt Geräte, die ihr WLAN/Bluetooth auch im Standby ständig aktiv haben und auf Anfragen antworten können (fast alle Android-Geräte). Gerade bei Tests über WLAN kann sich das aber signifikant auf die Akku Leistung auswirken.&lt;br /&gt;
&lt;br /&gt;
Andere Geräte wiederum schalten WLAN im Standby Betrieb aus, um Akkukapazität zu sparen. Bluetooth hingegen bleibt weiterhin aktiviert und kann auf Anfragen reagieren. (iPhone)&lt;br /&gt;
&lt;br /&gt;
Wenn man bei einem iPhone die Funktion &amp;quot;über WLAN synchronisieren&amp;quot; aktiviert hat, so ist dies auch im Standby jederzeit pingbar, wenn der Recher auf dem iTunes zum synchroniseren läuft auch an ist. Ansonsten ist bei iPhone Geräten nur die Aktivitätsprüfung mit einer FritzBox oder das überwachen der DHCP Lease auf einer Airport Basestation wirklich zuverlässig.&lt;br /&gt;
&lt;br /&gt;
Auch wenn Bluetooth aktiviert ist, so bleiben einige Mobiltelefone erst dann empfangsbereit, wenn sie bereits zu irgend einem Bluetoothgerät gekoppelt wurden. Sind diese Geräte noch nie gekoppelt worden, deaktivieren diese ihren Bluetooth Empfänger beim verlassen des Bluetooth-Menüs im Gerät (iPhone).&lt;br /&gt;
&lt;br /&gt;
Hier gilt es vor allem auszuprobieren, wie stark der Akku durch eine Anwesenheitserkennung belastet wird. Entscheidend ist hier, in welchem Abstand man eine Anwesenheitserkennung durchführt. Viele Abfragen wirken sich stärker auf den Akku aus als wenige. Wenige Abfragen bieten aber keine zuverlässige und zeitnahe Erkennung.&lt;br /&gt;
&lt;br /&gt;
Als Alternative, unabhängig vom WLAN und der Erkennung, ob ein Gerät dort eingebucht ist oder nicht, bzw. unabhängig von Bluetooth kann zumindest bei einem iPhone die seit iOS 7 nochmals stark verbesserte Geo-Lokation (Geofencing) genutzt werden. Die iPhone Apps [http://geofency.com/ Geofency] oder [http://geofancy.com/ Geofancy] werden über das FHEM-Modul GEOFANCY angebunden und übertragen ihren Status immer dann, wenn ein definierter Standort betreten oder verlassen wird. Gekoppelt mit entsprechenden Notify und/oder Watchdog Kommandos ist so ebenfalls eine sehr zuverlässige Anwesenheitserkennung möglich (und das nicht nur für das eigene Zuhause).&lt;br /&gt;
&lt;br /&gt;
== Das PRESENCE Modul ==&lt;br /&gt;
Das [[PRESENCE]] Modul bietet für die Anwesenheitserkennung mehrere Varianten an. Diese sind aktuell folgende:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;lan-ping&#039;&#039;&#039; - Das Überwachen via PING Checks, die durch den FHEM Server versandt werden.&lt;br /&gt;
* &#039;&#039;&#039;fritzbox&#039;&#039;&#039; - Das Überwachen von Geräten auf einer FritzBox via ctlmgr_ctl (Nur auf einer FritzBox möglich)&lt;br /&gt;
* &#039;&#039;&#039;local-bluetooth&#039;&#039;&#039; - Das Überwachen via Bluetooth Checks, die vom FHEM Server direkt durchgeführt werden (angeschlossener Bluetooth-Stick und die Software bluez voraussgesetzt)&lt;br /&gt;
* &#039;&#039;&#039;lan-bluetooth&#039;&#039;&#039; - Das Überwachen von Bluetoothgeräte, über Netzwerk. Auf einer oder mehreren Maschinen im Netzwerk (z.B. [[:Kategorie:Raspberry Pi|Raspberry Pi]]) läuft ein Presence-Daemon, der nach Bluetooth-Geräten sucht. Um mehrere Presence-Daemon mit FHEM zu verbinden, gibt es den Collector-Daemon, der sich zu allen Presence-Damons im Netzwerk verbindet und das Ergebnis von allen zusammenfasst.&lt;br /&gt;
* &#039;&#039;&#039;function&#039;&#039;&#039; - Das Überwachen mithilfe einer selbst geschrieben Perl-Funktion, die den Anwesenheitsstatus zurückgibt (0 oder 1)&lt;br /&gt;
* &#039;&#039;&#039;shell-script&#039;&#039;&#039; - Das Überwachen mithilfe eines selbst geschriebenen Shell-Programms/Skript, das eine 0 oder 1 ausgibt, um den Anwesenheitsstatus mitzuteilen.&lt;br /&gt;
&lt;br /&gt;
=== Ping-Überwachung von Geräten im WLAN/LAN ===&lt;br /&gt;
{{Randnotiz|RNText=Um diese Methode auf einer FritzBox nutzen zu können, muss FHEM mit root-Rechten laufen. Dies ist standardmäßig nicht der Fall. Bitte dazu den Wiki Artikel [[FritzBox: fhem unter root starten]] beachten.}}&lt;br /&gt;
Um ein Gerät via Ping zu überwachen, muss folgende Definition durchgeführt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;define Handy PRESENCE lan-ping 192.168.0.30&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dadurch wird die IP-Addresse 192.168.0.30 alle 30&amp;amp;nbsp;Sekunden geprüft, ob sie erreichbar ist. Wenn sie erreichbar ist, ist der Status &amp;quot;present&amp;quot; (anwesend), ansonsten &amp;quot;absent&amp;quot; (abwesend).&lt;br /&gt;
&lt;br /&gt;
Der Timeout kann verändert werden, indem ein Wert (in Sekunden) an das Define anhängt wird:&lt;br /&gt;
:&amp;lt;code&amp;gt;define Handy PRESENCE lan-ping 192.168.0.30 &#039;&#039;&#039;60&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun würde das Handy alle 60 Sekunden geprüft werden.&lt;br /&gt;
&lt;br /&gt;
Nur wenn bei einem iPhone/iPad die Funktion &amp;quot;über WLAN synchronisieren&amp;quot; aktiviert ist, ist es auch im Standby zuverlässig pingbar. Standardmäßig deaktivieren Apple-Geräte ihr WLAN im Standby-Betrieb um die Akkulaufzeit zu verlängern.&lt;br /&gt;
&lt;br /&gt;
Sollte die Fehlermeldung &lt;br /&gt;
:&amp;lt;code&amp;gt; PRESENCE (Handy) - ping command returned with output: ping: icmp open socket: Operation not permitted &amp;lt;/code&amp;gt; &lt;br /&gt;
im Log auftauchen und lan-ping dadurch nicht funktionieren, liegt ein Berechtigungsproblem vor. Kein Grund den User fhem zu root zu machen!&lt;br /&gt;
Prüfe zu erst als User root ob die Capabilities gesetzt sind.&lt;br /&gt;
:&amp;lt;code&amp;gt;getcap /bin/ping&amp;lt;/code&amp;gt;&lt;br /&gt;
Sollte folgendes Ergeben zu Tage fördern.&lt;br /&gt;
:&amp;lt;code&amp;gt;/bin/ping = cap_net_raw+ep&amp;lt;/code&amp;gt;&lt;br /&gt;
Ist dem nicht so, setzen wir die benötigten Capabilities&lt;br /&gt;
:&amp;lt;code&amp;gt;setcap cap_net_raw+ep /bin/ping&amp;lt;/code&amp;gt;&lt;br /&gt;
Mehr Informationen zum Thema Capabilities [https://manpages.debian.org/jessie/manpages-de/capabilities.7.de.html].&lt;br /&gt;
&lt;br /&gt;
=== FritzBox: direktes Abfragen der Aktivität via ctlmgr_ctl ===&lt;br /&gt;
{{Randnotiz|RNText=Um diese Methode auf einer FritzBox nutzen zu können, muss FHEM mit root-Rechten laufen. Dies ist standardmäßig nicht der Fall. Bitte dazu den Wiki Artikel [[FritzBox: fhem unter root starten]] beachten.}}&lt;br /&gt;
Eine sehr häufige und auch zuverlässige Methode ist auf einer FritzBox die Abfrage mittels ctlmgr_ctl Befehl. Über diesen lassen sich alle Geräte abfragen ob sie aktiv sind. Ist ein Gerät aktiv, so gilt es als anwesend.&lt;br /&gt;
&lt;br /&gt;
Dieser Modus kann allerdings nur in FHEM Installationen direkt auf einer FritzBox verwendet werden. Des weiteren muss FHEM unter dem User root laufen. Um ein Gerät zu überwachen, wird lediglich der Gerätename benötigt, so wie er unter dem Menüpunkt &amp;quot;Heimnetz&amp;quot; auftaucht. &lt;br /&gt;
&lt;br /&gt;
Die erforderliche Definition:&lt;br /&gt;
:&amp;lt;code&amp;gt;define Handy PRESENCE fritzbox iPhone-4S&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bluetooth-Überwachung von Geräten durch den FHEM Server ===&lt;br /&gt;
[[Datei:Bluetooth-Adresse-iPhone.png|thumb|Bluetooth-Adresse eines iPhones]]&lt;br /&gt;
Jenach Aufstellungsort des FHEM Servers kann es sinnvoll sein, eine Bluetooth-Überwachung direkt durch den FHEM Server durchzuführen. Hierbei gilt allerdings zu beachten, dass Bluetooth nicht für große Reichweiten gedacht ist und in den meisten Fällen keine Wände überwinden kann. Das heisst, dass in den meisten Fällen damit nur ein Raum überwacht werden kann.&lt;br /&gt;
&lt;br /&gt;
Je nach Einsatzzweck kann das auch so gewollt sein. Bluetooth USB Sticks, die bereits Bluetooth 4.0 unterstützen, können höhere Reichweiten über Zimmerwände hinaus erreichen. Vorausgesetzt, das Mobilgerät unterstützt Bluetooth 4.0.&lt;br /&gt;
&lt;br /&gt;
Um eine Überwachung per Bluetooth durchführen zu können, benötigt man die Bluetooth-Adresse eines Gerätes. Diese ähnelt vom Aufbau einer MAC-Adresse. Generell wird die Adresse in den Telefon-Informationen bei Smartphones angezeigt.&lt;br /&gt;
&lt;br /&gt;
Um eine Anwesenheitserkennung via Bluetooth durchzuführen, wird folgende Definition in der [[Konfiguration]] benötigt:&lt;br /&gt;
:&amp;lt;code&amp;gt;define Handy PRESENCE local-bluetooth XX:XX:XX:XX:XX:XX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bluetooth-Überwachung von Geräten durch verteilte Agenten in der Wohnung (presenced/collectord) ===&lt;br /&gt;
[[Datei:Raspberry-Pi-mit-WLAN-und-Bluetooth-Stick.jpg|thumb|left|Raspberry Pi mit Bluetooth- und WLAN-USB-Stick]]&lt;br /&gt;
Um eine zuverlässige und flächendeckende Bluetooth-Anwesenheitserkennung durchzuführen, ist es unerlässlich, mehrere Bluetooth-Empfänger zu verwenden, die auf mehrere oder alle Räume verteilt sind.&lt;br /&gt;
&lt;br /&gt;
Hierfür bietet sich zum Beispiel ein [[Raspberry Pi]] mit einem Mini-Bluetooth-USB-Stick und evtl. einem WLAN-USB-Stick an. Jeder Raum wird mit solch einem Raspberry ausgestattet und ist im WLAN Netz verfügbar.&lt;br /&gt;
&lt;br /&gt;
Dieses Netz aus Raspberrys wird mit dem presenced (Download-Link ist in der [http://fhem.de/commandref_DE.html#PRESENCE Commandref] zum Modul enthalten) ausgestattet. Es stehen bereits entsprechende Pakete für den Raspberry zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Beide Programme (presenced/collectord) sind Perl-Skripte, die als Daemon im Hintergrund laufen und auf Anfragen via Netzwerk warten. Es wird lediglich eine vollständige Perl-Grundinstallation mit Standardmodulen benötigt. Nach Installation der *.deb Pakete sollten diese noch angewiesen werden, automatisch beim Rechner-Neustart gestartet zu werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo update-rc.d presenced defaults&lt;br /&gt;
sudo update-rc.d collectord defaults&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine detaillierte Benutzung von presenced ist in der [http://fhem.de/commandref_DE.html#PRESENCE Commandref] Beschreibung zum PRESENCE Modul enthalten.&lt;br /&gt;
&lt;br /&gt;
==== Jeden Raum einzeln ansprechen (presenced) ====&lt;br /&gt;
Nun kann zuallererst jeder Raum einzeln angesprochen werden. Dabei ist zu beachten, dass pro Definition in der Konfiguration nur ein Gerät in einem Raum spezifisch überwacht werden kann.&lt;br /&gt;
&lt;br /&gt;
Eine Definition sieht dabei folgendermaßen aus:&lt;br /&gt;
:&amp;lt;code&amp;gt;define Handy_Wohnzimmer PRESENCE lan-bluetooth XX:XX:XX:XX:XX:XX 192.168.0.10:5111&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit wird nun das Gerät nur im Wohnzimmer (Raspberry mit IP 192.168.0.10) überwacht.&lt;br /&gt;
&lt;br /&gt;
==== Alle Räume gemeinsam ansprechen (collectord) ====&lt;br /&gt;
Um jedoch alle Räume gemeinsam zu verwenden, gibt es den Collector-Daemon. Dieser kennt alle presenced-Installationen im Netzwerk und führt eine koordinierte Suche nach den gewünschten Geräten durch. Sobald ein Gerät in einem Raum erkannt wurde, meldet der collectord den Status einschließlich der Angabe des Raumes, in dem das Gerät erkannt wurde.&lt;br /&gt;
&lt;br /&gt;
Um alle Räume zu kennen, müssen diese mit einem Config-File dem collectord mitgeteilt werden. Dieses sieht folgendermaßen aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Schlafzimmer]           # Name des Raumes (wird in FHEM als Reading angezeigt)&lt;br /&gt;
address=192.168.179.31   # IP-Adresse oder Hostname des presenced&lt;br /&gt;
port=5111                # TCP Port, der verwendet werden soll (standardmäßig Port 5111)&lt;br /&gt;
presence_timeout=120     # Prüfinterval, das verwendet werden soll, wenn ein Gerät anwesend ist&lt;br /&gt;
absence_timeout=20       # Prüfinterval, das verwendet werden soll, wenn ein Gerät abwesend ist&lt;br /&gt;
&lt;br /&gt;
[Wohnzimmer]&lt;br /&gt;
address=192.168.179.34&lt;br /&gt;
port=5111&lt;br /&gt;
presence_timeout=180&lt;br /&gt;
absence_timeout=20&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Standardmäßig ist dieses Config-File unter /etc/collectord.conf zu finden. Mit dieser Konfiguration kann der Collectord gestartet werden. Es empfiehlt sich diesen mit auf dem FHEM Server zu betreiben. Die erforderliche Definition in der FHEM-Konfiguration:&lt;br /&gt;
:&amp;lt;code&amp;gt;define Handy PRESENCE lan-bluetooth XX:XX:XX:XX:XX:XX 127.0.0.1:5222&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sobald das Handy irgendwo in der Wohnung erkannt wurde, meldet der Collectord dies sofort an FHEM und teilt den Raum mit.&lt;br /&gt;
&lt;br /&gt;
Eine detaillierte Benutzung von collectord findet man in der [http://fhem.de/commandref.html#PRESENCE Commandref zum PRESENCE Modul].&lt;br /&gt;
&lt;br /&gt;
=== Überwachung von Geräten mit Perl-Code ===&lt;br /&gt;
Es ist möglich zum Überwachen von Geräten eine eigene Perl-Funktion zu verwenden die dann vom PRESENCE Modul im Hintergrund aufgerufen wird.&lt;br /&gt;
&lt;br /&gt;
 define &amp;lt;name&amp;gt; PRESENCE function {...} [ &amp;lt;check-interval&amp;gt; [ &amp;lt;present-check-interval&amp;gt; ] ]&lt;br /&gt;
&lt;br /&gt;
Sobald die Funktion den Rückgabewert 1 hat, ist das Gerät anwesend, bei 0 abwesend.&lt;br /&gt;
&lt;br /&gt;
==== Beispiel DHCP Überwachung auf Airport Basestation ====&lt;br /&gt;
Die hier vorgestellte Überwachung der DHCP Lease auf Airport Basestations per SNMP ist absolut robust gegenüber dem Ruhezustand von iOS und setzt keine weitere Konfiguration auf dem iPhone voraus. Das Abmelden beim Verlassen des Empfangsbereiches der Basestation geschieht mit etwa 5-10 Minuten Verzögerung und ist somit auch vor kurzzeitigen Empfangsproblemen sicher. Das nebenstehende Bild (???) verdeutlicht noch mal die Unterschiede zwischen einer IP-Basierten Ping-Überwachung und der Überwachung auf Ebene der Basestation oder FritzBox.&lt;br /&gt;
&lt;br /&gt;
Bevor der folgende Code verwendet werden kann ist das Perl Modul Net:SNMP zu installieren (z.&amp;amp;nbsp;B. mit: &amp;lt;code&amp;gt;cpan install use Net::SNMP&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Zuerst ist folgender Code in 99_myUtils.pm einzufügen, sollte diese noch nicht vorhanden sein muss diese aus dem Template welches unter Edit Files zu finden ist erzeugt werden.&lt;br /&gt;
&#039;&#039;&#039;Achtung, das ist nicht der komplette Inhalt der 99_myUtils!&#039;&#039;&#039; Das ist nur die einzelne Routine&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
use Net::SNMP;&lt;br /&gt;
sub&lt;br /&gt;
snmpCheck($$)&lt;br /&gt;
{&lt;br /&gt;
  my ($airport,$client)= @_;&lt;br /&gt;
&lt;br /&gt;
  my $community = &amp;quot;public&amp;quot;;&lt;br /&gt;
  my $host = $airport;&lt;br /&gt;
  my $oid = &amp;quot;.1.3.6.1.2.1.3.1.1.2&amp;quot;;&lt;br /&gt;
  #my $oid = &amp;quot;.1.3.6.1.2.1.3.1.1.2.25.1.10.0.1&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  my ( $session, $error ) = Net::SNMP-&amp;gt;session(&lt;br /&gt;
    -hostname =&amp;gt; $host,&lt;br /&gt;
    -community =&amp;gt; $community,&lt;br /&gt;
    -port =&amp;gt; 161,&lt;br /&gt;
    -version =&amp;gt; 1&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  if( !defined($session) ) {&lt;br /&gt;
    return 0;&lt;br /&gt;
    return &amp;quot;Can&#039;t connect to host $host.&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  my @snmpoids = ();&lt;br /&gt;
&lt;br /&gt;
  my $response = $session-&amp;gt;get_next_request($oid);&lt;br /&gt;
  my @nextid = keys %$response;&lt;br /&gt;
  while ( @nextid &amp;amp;&amp;amp; $nextid[0] &amp;amp;&amp;amp; $nextid[0] =~ m/^$oid/ ) {&lt;br /&gt;
    push( @snmpoids, $nextid[0] );&lt;br /&gt;
&lt;br /&gt;
    $response = $session-&amp;gt;get_next_request( $nextid[0] );&lt;br /&gt;
    @nextid = keys %$response;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if( !defined($response = $session-&amp;gt;get_request( @snmpoids ) ) ) {&lt;br /&gt;
    return 0;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  foreach my $value (values %$response) {&lt;br /&gt;
    return 1 if( $value eq $client )&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach lässt sich das Mobilgerät so überwachen:&lt;br /&gt;
:&amp;lt;code&amp;gt;define iPhone PRESENCE function {snmpCheck(&amp;quot;10.0.1.1&amp;quot;,&amp;quot;0x44d77429f35c&amp;quot;)} 30 30&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wobei 10.0.1.1 durch die IP-Adresse der Basestation und 0x44d77429f35c durch die MAC Adresse des Geräts als HEX-Zahl ersetzt werden muss.&lt;br /&gt;
&lt;br /&gt;
==== Beispiel Anwesenheitserkennung mittels UniFi Controller ====&lt;br /&gt;
&lt;br /&gt;
Die Anwesenheitserkennung bei Geräten in Verbindung mit UniFi-Produkten funktioniert selbst dann, wenn sich die Geräte im PowerSave-Modus befinden. &lt;br /&gt;
&lt;br /&gt;
Beachte: Die Geräte werden erst ungefähr nach 5 Minuten, nachdem das Gerät das WLAN verlassen hat als disconnected angezeigt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;NAME&amp;gt; PRESENCE function {ReadingsVal(&amp;quot;&amp;lt;UniFi&amp;gt;&amp;quot;,&amp;quot;&amp;lt;NamedDevice&amp;gt;&amp;quot;,&amp;quot;&amp;quot;) eq &amp;quot;connected&amp;quot; ? 1:0}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eventbasierte Anwesenheitserkennung am Beispiel mittels UniFi Controller ===&lt;br /&gt;
Der Vorteil gegenüber der Function-Variante ist, dass diese Variante ohne Blocking.pm-Overhead direkt ausgeführt werden kann und in &amp;quot;Echtzeit&amp;quot; abläuft (siehe {{Link2Forum|Topic=40287|Message=562823}}).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;NAME&amp;gt; PRESENCE event UniFi:NamedDevice:.disconnected UniFi:NamedDevice:.connected&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Das GEOFANCY Modul ==&lt;br /&gt;
Das Modul ermöglicht über einen sogenannten Webhook Mechanismus (umgangssprachlich oft auch als &amp;quot;Push&amp;quot; benannt) das aktive Melden des aktuellen Standortes. Die iPhone Apps  [http://geofency.com/ Geofency] und [http://geofancy.com/ Geofancy] können dann aktiv und quasi in dem Moment, wo man den Wohnbereich betritt oder verlässt, benachrichtigen. Android Nutzern können [https://play.google.com/store/apps/details?id=de.egi.geofence.geozone&amp;amp;hl=de EgiGeoZone Geofence] nutzen. Das geht nochmals um einiges schneller, als die Erkennung im WLAN, bei der die Anwesenheit nur in (engen) Zyklen aktiv geprüft werden muss. Gleichzeitig werden Ressourcen in FHEM geschont. Die aktuelle Implementierung im iPhone 5S mit dediziert für das Tracking zuständigem Chip ist so gut, dass der Akku ebenfalls sehr geschont wird.&lt;br /&gt;
&lt;br /&gt;
=== Modul in FHEM einrichten ===&lt;br /&gt;
Das Modul ist mit einer einfachen Definition sofort betriebsbereit:&lt;br /&gt;
:&amp;lt;code&amp;gt;define geofancy GEOFANCY geo&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit nimmt FHEM unter &amp;lt;nowiki&amp;gt;http://192.168.178.1:8083/fhem/geo&amp;lt;/nowiki&amp;gt; entsprechende Meldungen des iPhones entgegen. Damit das nicht nur über das lokale WLAN funktioniert, bedarf es allerdings noch einiger zusätzlicher Maßnahmen. FHEM muss vom Internet erreichbar gemacht werden, dabei sollte unbedingt an die Absicherung des Zugriffs gedacht werden.&lt;br /&gt;
&lt;br /&gt;
Zunächst einmal habe ich bei mir eine eigene FHEMWEB Instanz dafür angelegt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define WEBhook FHEMWEB 8088 global&lt;br /&gt;
attr WEBhook column Alarms: Apartment: Living: Bedroom: Kitchen: Sonos: Residents: Weather: Bathroom: Logs: Statistics: DashboardRoom: System: hidden: all:&lt;br /&gt;
attr WEBhook hiddenroom input,detail,save,Unsorted,Everything,CUL_HM,FS20,Commandref,style,Edit files,Select style,Logfile,Floorplans,Remote doc,FileLogs,Apartment,Bathroom,Bedroom,Kitchen,Living,Residents,System,Weather,Event monitor,NEW&lt;br /&gt;
attr WEBhook room hidden&lt;br /&gt;
attr WEBhook webname webhook&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit ist unter der URL &amp;lt;nowiki&amp;gt;http://192.168.178.1:8088/webhook/geo&amp;lt;/nowiki&amp;gt; das GEOFANCY Modul erreichbar. Ich verstecke in dieser Ansicht noch alle Räume, die ich so habe. Wer die Raumnamen allerdings kennt, kann sie trotzdem aufrufen. Die Anzeige in den Räumen kann man mit dem Attribut column und entsprechend leeren Definitionen verstecken. Nun muss man explizit den Devicenamen kennen, um noch etwas über die Konfiguration in Erfahrung bringen zu können.&lt;br /&gt;
Auch wenn das Security-by-Obscurity ist - ich fühle mich wohler damit.&lt;br /&gt;
&lt;br /&gt;
=== Webhook weiter absichern ===&lt;br /&gt;
Mit Hilfe eines [http://fhem.de/commandref.html#allowed allowed]-Devices lässt sich die FHEMWEB Instanz noch weiter absichern indem nur die tatsächlich benötigten Kommandos erlaubt werden (in diesem Fall keine) und damit alle anderen nicht erlaubten (attr,define,get,set,...) automatisch nicht mehr zur Verfügung stehen: &lt;br /&gt;
 &amp;lt;pre&amp;gt;&lt;br /&gt;
define allowedWEBhook allowed&lt;br /&gt;
attr allowedWEBhook allowedCommands ,&lt;br /&gt;
attr allowedWEBhook allowedDevices ,&lt;br /&gt;
attr allowedWEBhook validFor WEBhook&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Außerdem ist dringend zu empfehlen, den Zugriff über TLS/SSL und HTTP Basic-Authentication weiter abzusichern. Läuft FHEM auf einem Raspberry&amp;amp;nbsp;Pi, dann empfehle ich dazu die Konfiguration eines ReverseProxy (vorzugsweise HAproxy, Pound oder Varnish, notfalls auch Nginx oder Apache); damit ist man am flexibelsten und kann auch alle FHEMWEB Instanzen direkt über einen einzigen Port (meist 443, der HTTPS Standard Port) zusammenfassen. Ich möchte hier allerdings beschreiben, wie weit man mit FHEM Bordmitteln kommt und nehme das Beispiel einer Installation auf einer Fritzbox.&lt;br /&gt;
&lt;br /&gt;
Wie TLS aktiviert wird, steht in der Commandref für [[FHEMWEB]]. Um die Kommandos auf der Fritzbox ausführen zu können, muss zuerst Telnet aktiviert werden (bitte Google benutzen). Anschließend wechselt man auf der Fritzbox ins Verzeichnis /var/media/ftp/fhem und kann dann den Hinweisen aus der [http://fhem.de/commandref.html#FHEMWEB Commandref] unter dem Punkt HTTPS folgen. Letztlich fehlt noch das entsprechende Attribut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr WEBhook HTTPS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als nächstes aktivieren wir Benutzername+Passwort für den Zugriff. Die commandref für allowed gibt auch hier unter dem Punkt basicAuth entsprechende Hinweise. Wir fügen hier einfach mal einen Benutzer &amp;quot;webhook&amp;quot; mit dem Passwort &amp;quot;Geofancy&amp;quot; hinzu, das sieht dann so aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr allowedWEBhook basicAuth { &amp;quot;$user:$password&amp;quot; eq &amp;quot;webhook:Geofancy&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Infos zur Absicherung gibt auch [[FritzBox Webzugriff absichern]].&lt;br /&gt;
&lt;br /&gt;
Um zu testen, ob unsere Absicherung erfolgreich war, kann man die URL &amp;lt;nowiki&amp;gt;https://192.168.178.1:8088/webhook/geo&amp;lt;/nowiki&amp;gt; aufrufen (wichtig ist, dass man jetzt https und nicht mehr http eingibt; ansonsten bekommt man keine Antwort). Eine Zertifikatswarnung kann getrost ignoriert werden, verschlüsselt wird trotzdem. Es sollte auch eine Passwort Abfrage kommen und die Eingabe der entsprechenden Daten sollte dann zu einer entsprechenden Meldung vom GEOFANCY Modul führen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
NOK No data received, see API information on http://wiki.geofancy.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das ist ok, schließlich sind wir keine App, sondern der Mensch, der nur mal eben prüfen will :-)&lt;br /&gt;
&lt;br /&gt;
=== Zugriff vom Internet ermöglichen ===&lt;br /&gt;
Das ist je nach Fritzbox und Software Version unterschiedlich. Grundsätzlich gilt: Eine Weiterleitung des ports 8088 vom Internet auf das laufende FHEM auf Port 8088 intern ist von AVM so nicht vorgesehen.&lt;br /&gt;
Bei mir führte folgendes zum Erfolg:&lt;br /&gt;
&lt;br /&gt;
* Einloggen per Telnet auf der Fritzbox (ich habe FritzOS 6 installiert)&lt;br /&gt;
* Konfiguration editieren mittels &amp;quot;nvi /var/flash/ar7.cfg&amp;quot;&lt;br /&gt;
* Suchen nach richtiger Zeile durch Eingabe von &amp;quot;/internet_forwardrules&amp;quot; und Enter&lt;br /&gt;
* Hinzufügen einer weiteren Zeile (Vorsicht, die bestehende Zeile endet mit ; und das muss in , umgeändert werden, so dass das ; schließlich am Ende der Zeile steht.&lt;br /&gt;
&lt;br /&gt;
So sieht es bei mir vorher aus:&lt;br /&gt;
:&amp;lt;code&amp;gt;internet_forwardrules = &amp;quot;tcp 0.0.0.0:488 0.0.0.0:488 0&amp;quot;;&amp;lt;/code&amp;gt;&lt;br /&gt;
Hinterher:&lt;br /&gt;
:&amp;lt;code&amp;gt;internet_forwardrules = &amp;quot;tcp 0.0.0.0:488 0.0.0.0:488 0&amp;quot;, &amp;quot;tcp 0.0.0.0:8088 0.0.0.0:8088 0&amp;quot;;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach mittels &amp;quot;:x&amp;quot; abspeichern und sofort per &amp;quot;reboot&amp;quot; die Box neu starten, um diese Änderungen zu aktivieren. Das ist wichtig; ansonsten zeigt die Erfahrung, dass die Änderung nicht dauerhaft erhalten bleibt und die gerade gemachten Änderungen verloren gehen.&lt;br /&gt;
&lt;br /&gt;
Wer die Einstellungen zu &amp;quot;internet_forwardrules&amp;quot; bei sich nicht finden kann, hat womöglich eine andere Version als ich oder ein leicht anderes Gerät und bemüht am besten Google, was er tun kann, um das Gleiche zu erreichen. Möglicherweise tauchen die Einträge auch erst auf, wenn man mal über das Webinterface ein Forwarding eingerichtet hatte.&lt;br /&gt;
&lt;br /&gt;
Hat man einen DynDNS Dienst oder myFritz auf der Fritzbox aktiviert, so kann man jetzt auch von draußen auf den Webhook zugreifen. Das kann man prüfen, indem man das iPhone aus dem WLAN ausbucht und einmal die externe Adresse eingibt, also z.B. https://meindyndns.org:8088/webhook/geo.&lt;br /&gt;
&lt;br /&gt;
=== Weitere Alternativen für den Zugriff aus dem Internet ===&lt;br /&gt;
Als Alternative zum Port Forwarding kann man sich auch per VPN in das lokale Netzwerk einwählen. iOS bietet dazu auch eine automatische Aktivierung des VPN (VPN on Demand), wie z.B. [http://forum.loxone.com/dede/netzwerk-firewall-and-security/8121-vpn-demand-ios-8-1-1-fritz-box-kleine-how.html hier] beschrieben wird.&lt;br /&gt;
&lt;br /&gt;
Auch eine Alternative ist, das Portforwarding nicht direkt an FHEM einzurichten, sondern an einem im Netzwerk laufenden Reverse-Proxy, der dann seinerseits die Anfragen an FHEM weiterleitet. Dies kann z.B. Apache, Nginx oder am besten HAproxy sein.&lt;br /&gt;
Letzterer ist dabei sehr flexibel, allerdings nicht unbedingt einfach zu konfigurieren. Ein paar Inspirationen diesbezüglich gibt es z.B. [https://github.com/Hoanoho/HSE/tree/develop/lib/cfg/any/stat/etc/haproxy hier] und [https://github.com/Hoanoho/HSE/tree/develop/lib/cfg/any/dyn/etc/haproxy hier]. Wer pfSense nutzt, findet [http://loredo.me/post/116633549315/geeking-out-with-haproxy-on-pfsense-the-ultimate diesen Artikel] womöglich auch interessant. Er zeigt auch, dass mit HAproxy noch weit mehr möglich ist.&lt;br /&gt;
Der Reverse-Proxy sollte dabei auch unbedingt der TLS Termination Point sein (TLS Offloading). Nicht nur spart man sich dann die Aktivierung von TLS in FHEM, sondern man hat auch mehr Einfluss darauf, wie TLS arbeitet (z.B. Deaktivierung von SSLv3, forcieren von TLSv1.2, nur als sicher eingestufte Cipher Suite... siehe auch Infos auf der [https://wiki.mozilla.org/Security/Server_Side_TLS Mozilla Website]).&lt;br /&gt;
&lt;br /&gt;
=== Einrichten in der Geof[e|a]ncy.app ===&lt;br /&gt;
Hat das alles soweit geklappt, können endlich in der Geofency.app bzw. Geofancy.app am iPhone die gewünschten Bereiche definiert werden. Am Besten zuvor in den Global Settings die folgenden Einstellungen hinterlegen:&lt;br /&gt;
&lt;br /&gt;
* URL: https://meindyndns.org:8088/webhook/geo&lt;br /&gt;
* POST (oder GET, ist egal - das FHEM Modul kann beides)&lt;br /&gt;
* HTTP Basic Authentication: EIN (entsprechend Username und Password eintragen)&lt;br /&gt;
&lt;br /&gt;
Anfänglich ist es empfehlenswert noch &amp;quot;Notification on success&amp;quot; und &amp;quot;Notification on Failure&amp;quot; einzuschalten. Ersteres kann man ausmachen wenn man weiß, dass es soweit funktioniert. Über &amp;quot;Send Test-Request&amp;quot; kann man einmal einen Test schicken und erhält das Ergebnis entsprechend dargestellt. Es sollte sowas kommen wie&lt;br /&gt;
:&amp;lt;code&amp;gt;POST Success: test OK&amp;lt;/code&amp;gt;. In Geofancy.app gibt es keine Rückmeldung über den Erfolg des Testrequests. In FHEM sollten sich durch den Testrequest jedoch die Readings sofort aktualisieren (Ggf. ist ein Reload der FHEMWEB-Seite nötig da zusätzliche Tabellenzeilen nicht via Longpoll ergänzt werden). &lt;br /&gt;
&lt;br /&gt;
Funktioniert das soweit, kann man eine neue Lokation als sein Zuhause anlegen. Es empfiehlt sich einen ID-Namen zu setzen; dieser ist dann in FHEM als Name für die Lokation sichtbar. Für die eigene Wohnung empfiehlt sich hier &amp;quot;home&amp;quot; (da dies auch direkt vom RESIDENTS Modul so verwendet werden kann). Man kann auch Trigger für andere Standorte anlegen. FHEM weiß dann sogar, wenn ihr im Büro seid und könnte sich dabei auch unterschiedlich verhalten, als wenn ihr &amp;quot;auf Achse&amp;quot; seid. Bei letzterem ist der Status im GEOFANCY Modul &amp;quot;underway&amp;quot;, was so viel heißt wie &amp;quot;unbekannter Aufenthaltsort&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Hinweis: Zumindest für Geofancy.app liefert ein Testrequest wohl zufällige Locations zurück. Die eigenen Location-IDs werden also nicht übergeben, selbst wenn man sich in einem Geofence befindet. Um zu testen muss man sich wohl oder übel selbst bewegen ;-).&lt;br /&gt;
&lt;br /&gt;
=== GEOFANCY Modul individualisieren ===&lt;br /&gt;
Die im GEOFANCY Modul dargestellten Readings sind nun in etwa so, wenn ihr euch bewegt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Readings:&lt;br /&gt;
     2014-01-18 14:37:42   lastDevice      -&lt;br /&gt;
     2014-01-18 14:37:42   lastDeviceUUID      51F23894-AAAA-BBBB-CCCC-0123456789AB&lt;br /&gt;
     2014-01-18 14:37:42   state           dev:51F23894-AAAA-BBBB-CCCC-0123456789AB trig:test id:home lat:48.9999 long:11.9999&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer genauer hinschaut sieht: Mein iPhone heißt wohl 51F23894-AAAA-BBBB-CCCC-0123456789AB.&lt;br /&gt;
Damit nun die Readings für mein iPhone richtig angelegt werden, muss ein Device Alias gesetzt werden. Sinnvoll erscheint mir der Vorname des Besitzers:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr geofancy devAlias 51F23894-AAAA-BBBB-CCCC-0123456789AB:Julian&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Alias-Namen können mit Leerzeichen einfach angehängt werden.&lt;br /&gt;
Jetzt werden weitere Readings angelegt, sobald GEOFANCY entsprechende Daten vom Mobilgerät empfängt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Readings:&lt;br /&gt;
     2014-01-18 14:37:42   Julian          arrived home&lt;br /&gt;
     2014-01-18 14:37:42   currLocLat_Julian 48.9999&lt;br /&gt;
     2014-01-18 14:37:42   currLocLong_Julian 11.9999&lt;br /&gt;
     2014-01-18 14:37:42   currLocTime_Julian 2014-01-18 14:37:42&lt;br /&gt;
     2014-01-18 14:37:42   currLoc_Julian  home&lt;br /&gt;
     2014-01-17 19:18:23   lastArr         Julian home&lt;br /&gt;
     2014-01-17 18:41:46   lastDep         Julian Office&lt;br /&gt;
     2014-01-18 14:37:42   lastDevice      Julian&lt;br /&gt;
     2014-01-18 14:37:42   lastDeviceUUID      51F23894-AAAA-BBBB-CCCC-0123456789AB&lt;br /&gt;
     2014-01-17 18:41:46   lastLocArr_Julian 2014-01-17 08:58:37&lt;br /&gt;
     2014-01-17 18:41:46   lastLocDep_Julian 2014-01-17 18:41:46&lt;br /&gt;
     2014-01-17 18:41:46   lastLocLat_Julian 48.1111&lt;br /&gt;
     2014-01-17 18:41:46   lastLocLong_Julian 11.1111&lt;br /&gt;
     2014-01-17 18:41:46   lastLoc_Julian  Office&lt;br /&gt;
     2014-01-18 14:37:42   state           dev:Julian trig:test id:home lat:48.9999 long:11.9999&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Möchte man nun etwas bestimmtes tun, wenn man nach Hause kommt oder das Heim verlässt, kann man am Besten ein entsprechendes Notify auf das Reading currLoc_Name setzen. Ich aktualisiere lediglich zwei Dummies, durch die dann alle weiteren Notifies ausgelöst werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define n_Julian.Presence notify geofancy:currLoc_Julian:.home set Julian.homestatus:FILTER=STATE!=home home&lt;br /&gt;
attr n_Julian.Presence room Residents&lt;br /&gt;
define n_Julian.absence notify geofancy:currLoc_Julian:.underway {\&lt;br /&gt;
if (Value(&amp;quot;Julian.homestatus&amp;quot;) ne &amp;quot;gone&amp;quot;) {\&lt;br /&gt;
  fhem(&amp;quot;set Julian.homestatus:FILTER=STATE!=absent absent&amp;quot;);;\&lt;br /&gt;
}\&lt;br /&gt;
}&lt;br /&gt;
define n_Julian.whereabout notify geofancy:currLoc_Julian:.* set Julian.whereabout:FILTER=STATE!=$EVTPART1 $EVTPART1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer es noch einfacher möchte (bzw. auch noch mehr Features) schaut sich einmal die neue Modulfamilie aus RESIDENTS[http://fhem.de/commandref_DE.html#RESIDENTS], ROOMMATE[http://fhem.de/commandref_DE.html#ROOMMATE] und GUEST[http://fhem.de/commandref_DE.html#GUEST] an. Diese sind direkt auf GEOFANCY abgestimmt. Dabei kann das devAlias Attribut entfallen und man hinterlegt die UUID stattdessen direkt im ROOMMATE oder GUEST Device (Attribut r*_geofenceUUIDs). Das erspart es für jeden Bewohner und jedes Device zig unterschiedliche Devices der Typen Notify, DOIF oder Watchdog anlegen und pflegen zu müssen.&lt;br /&gt;
&lt;br /&gt;
Wer mehr Kontrolle möchte kann natürlich bei notify, DOIF und Co. bleiben: &amp;lt;code&amp;gt;define n_rr_Julian.location notify geofancy:currLoc_Julian:.* set rr_Julian:FILTER=location!=$EVTPART1 location $EVTPART1&amp;lt;/code&amp;gt;. Wobei &amp;quot;Julian&amp;quot; dabei als devAlias in GEOFANCY eingtragen wurde, rr_Julian der Name des ROOMMATE aus RESIDENTS ist. Außerdem wurden die Location-IDs in der Geofency.app bzw. Geofancy.app so gewählt, dass diese direkt einem ROOMMATE-Status entsprechen (also z.B. home, wayhome...).&lt;br /&gt;
&lt;br /&gt;
== Beispiele für die Nutzung der Anwesenheitserkennung ==&lt;br /&gt;
Hier sollen Beispiele für den Nutzen von Anwesenheitserkennung aufgezeigt werden.&lt;br /&gt;
&lt;br /&gt;
=== Abschalten aller Verbraucher (Licht, Musikanlage) beim Verlassen der Wohnung ===&lt;br /&gt;
Typisches Szenario: Man geht ausser Haus, aber hat vergessen im Bad das Licht aus zu machen. Allerdings geht man heutzutage fast garnicht mehr ohne Handy aus dem Haus.&lt;br /&gt;
&lt;br /&gt;
Nun soll FHEM in der gesamten Wohnung das Licht, sowie sonstige Verbraucher ausschalten, wenn ich länger als 15 Minuten ausser Haus bin. Dazu benötigt man zuerst eine structure, die alle Verbraucher und sonstigen Devices, die das betrifft, zusammenfasst.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Gesamte_Wohnung structure Gesamtes_Licht Licht_Wohnzimmer Licht_Kueche LED_Kueche Licht_Bad Licht_Schlafzimmer AV_Receiver TV_Steckdose&lt;br /&gt;
attr Gesamte_Wohnung room Wohnung&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun kann man mittels eines watchdogs eine Überwachung für sein Handy anlegen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Überwachen der gesamten Wohnung mittels collectord sowie presenced in jedem Raum&lt;br /&gt;
define Handy PRESENCE lan-bluetooth XX:XX:XX:XX:XX:XX 127.0.0.1:5222&lt;br /&gt;
attr Handy event-on-change-reading state  # Ein Event soll nur bei der Änderung des Anwesenheitsstatus (Reading: status) erfolgen. Wichtig für den watchdog!!!&lt;br /&gt;
&lt;br /&gt;
# Nach 15 Minuten Abwesenheit (Handy im Status &amp;quot;absent&amp;quot;) soll die gesamte Wohnung ausgeschaltet werden.&lt;br /&gt;
define watchdog_Anwesenheit watchdog Handy:absent 00:15 Handy:present set Gesamte_Wohnung off ; trigger watchdog_Anwesenheit .&lt;br /&gt;
attr watchdog_Anwesenheit regexp1WontReactivate 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Benachrichtigung bei Batteriewechsel ===&lt;br /&gt;
Mit Hilfe des PRESENCE-Moduls kann man auch bei batteriebetriebenen Geräten eine Meldung ausgeben, sobald ein Batteriewechsel ansteht. Hier im Beispiel wird der Eve-Room-Sensor von Elgato eingebunden und anschließend mit einer DOIF-Nachricht ausgestattet.&lt;br /&gt;
Die Bluetooth-Adresse des Sensors kann mittels eines BLE-Scanners ermittelt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# PRESENCE-Modul für Elgato Eve Room Sensor mit Aktualisierung aller 6 Minuten&lt;br /&gt;
define Eve_Room_BLE lan-bluetooth &amp;lt;Bluetooth-Adresse&amp;gt; 127.0.0.1:5333 360&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend wird eine DOIF-Regel definiert, die eine Nachricht an die installiere [[FHEM_APP|FHEM App]] absendet:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Eve_Room_BLE_Battery_Msg DOIF ([Eve_Room_BLE] eq &amp;quot;absent&amp;quot;) (set Msg_iPhone message &#039;Batteriewechsel beim Eve Room Sensor im Wohnzimmer.&#039;)&lt;br /&gt;
attr Eve_Room_BLE_Battery_Msg wait 600&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Aktualisierung des PRESENCE-Eintrages sollte nicht größer sein als das WAIT-Attribut der DOIF-Regel. Ansonsten könnte eine kurze Systemstörung zum Fehlalarm führen.&lt;br /&gt;
&lt;br /&gt;
== Anwesenheitserkennung Bluetooth PebbleBee mit PRESENCE Modul ==&lt;br /&gt;
Im Forum gibt es einen {{Link2Forum|Topic=28753|LinkText=langen Beitrag}} über die Einrichtung eines BT-Tag an einem RaspberryPI mit FHEM. Dabei werden Skripte wie blescan.pl und lepresenced genannt.&lt;br /&gt;
Da mittlerweile viele neue Informationen zusammen gekommen sind wurde der Wiki Eintrag erstellt.&lt;br /&gt;
&lt;br /&gt;
Im Folgenden wird die Konfiguration für &#039;&#039;&#039;LE Deviced (z.B. Gtags,Pebbles etc.)&#039;&#039;&#039; und &#039;&#039;&#039;NICHT LE Device (z.B. IPhone)&#039;&#039;&#039; beschreiben.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText=Beide hier beschriebenen Wege (presenced/lepresenced) können parallel auf dem selben BT-Dongle laufen, da sich die Ports unterscheiden! }} &lt;br /&gt;
&#039;&#039;&#039;Wo finde ich denn lepresenced?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
lepresenced kann über Github heruntergeladen werden (Link weiter unten)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Was ist der Vorteil gegenüber blescan.pl?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
blescan.pl hat u. a. das Problem, dass dank der wundervollen Bluetooth-Implementierung unter Linux ab und zu der Scan fehlschlägt und das Interface resettet werden muss. Das tut blescan.pl auch mit aller Gewalt. Dazu kommt, dass bei längeren Scanzeiten und vielen Tags sich die Prozesse anstauen, weil immer nur auf einen Tag &amp;quot;gewartet&amp;quot; wird. Außerdem wurden mit der Einführung von lepresenced sämtliche Supportverträge gekündigt lepresenced läuft dauerhaft und merkt sich bei allen sendenden Tags den Zeitstempel des letzten Empfangs. &lt;br /&gt;
&lt;br /&gt;
=== Getestete Hardware/Software===&lt;br /&gt;
* &#039;&#039;&#039;Raspbian System&#039;&#039;&#039; - wheezy, Jessie&lt;br /&gt;
* &#039;&#039;&#039;BT-Dongle&#039;&#039;&#039; - CSL NET BT USB2.0 Stick, Bluetooth V4.0, Nano &amp;lt;br /&amp;gt;&#039;&#039;&#039;Achtung&#039;&#039;&#039;: Es muss ein BT V4.0 oder höher verwendet werden. Nur dieser unterstützt &#039;&#039;LowEnergy&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;BT-TAG&#039;&#039;&#039; - Gtag von Gigaset, TrackR, UDOO Neo, PebbleBee, iTag von Unitec, X4-LIFE Multifunkti BL-Anhänger, iTag Wireless Anti, Trackr bravo&lt;br /&gt;
&lt;br /&gt;
===  BT Dongel am PI installieren ===&lt;br /&gt;
&lt;br /&gt;
Um den BT Dongle &#039;&#039;(hier: CSL NET BT USB2.0)&#039;&#039; am PI verwenden zu können, müssen die notwendigen Pakete über die Paketverwaltung von debain nachinstalliert werden.&lt;br /&gt;
Wer bereits ein BT-Dongle installiert hat, kann diesen Schritt überspringen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install bluetooth&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nach erfolgreicher Installation der Pakete sollte der RaspberryPI neu gestartet werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo reboot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem erfolgten Reboot bitte das Log des Raspberry auf folgende Einträge prüfen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Feb 12 19:52:55 fhem kernel: [    4.773600] Bluetooth: Core ver 2.20&lt;br /&gt;
Feb 12 19:52:55 fhem kernel: [    4.773748] NET: Registered protocol family 31&lt;br /&gt;
Feb 12 19:52:55 fhem kernel: [    4.773765] Bluetooth: HCI device and connection manager initialized&lt;br /&gt;
Feb 12 19:52:55 fhem kernel: [    4.773797] Bluetooth: HCI socket layer initialized&lt;br /&gt;
Feb 12 19:52:55 fhem kernel: [    4.773821] Bluetooth: L2CAP socket layer initialized&lt;br /&gt;
Feb 12 19:52:55 fhem kernel: [    4.773890] Bluetooth: SCO socket layer initialized&lt;br /&gt;
Feb 12 19:52:55 fhem kernel: [    4.797531] usbcore: registered new interface driver btusb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Sobald der BT-Dongle erkannt wurde &#039;&#039;leuchtet&#039;&#039; (wenn vorhanden) auch die &#039;&#039;blaue/gelbe&#039;&#039; LED am Dongle auf.&lt;br /&gt;
&lt;br /&gt;
=== BT-Tags aktivieren ===&lt;br /&gt;
Jetzt kann der BT-Tag aktiviert werden. Bei einigen Tags muss dafür die &#039;&#039;&#039;Batteriesicherung&#039;&#039;&#039; gezogen werden.&lt;br /&gt;
&lt;br /&gt;
Einen Tag wird mit folgendem Befehl auf der Konsole gesucht:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo hcitool lescan&lt;br /&gt;
&lt;br /&gt;
Ausgabe z.B.:&lt;br /&gt;
LE Scan ...&lt;br /&gt;
7C:2F:80:A1:XA:XD (unknown)&lt;br /&gt;
7C:2F:80:A1:XA:XD Gigaset G-tag&lt;br /&gt;
7C:2F:80:A1:X4:X1 (unknown)&amp;lt;/source&amp;gt;&lt;br /&gt;
Eine Übersicht über die möglichen Befehle von hcitool gibt es mit der Eingabe von:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo hcitool&lt;br /&gt;
&lt;br /&gt;
Ausgabe z.B.:&lt;br /&gt;
hcitool - HCI Tool ver 5.23&lt;br /&gt;
Usage:&lt;br /&gt;
        hcitool [options] &amp;lt;command&amp;gt; [command parameters]&lt;br /&gt;
Options:&lt;br /&gt;
        --help  Display help&lt;br /&gt;
        -i dev  HCI device&lt;br /&gt;
Commands:&lt;br /&gt;
        dev     Display local devices&lt;br /&gt;
        inq     Inquire remote devices&lt;br /&gt;
        scan    Scan for remote devices&lt;br /&gt;
        name    Get name from remote device&lt;br /&gt;
        info    Get information from remote device&lt;br /&gt;
        spinq   Start periodic inquiry&lt;br /&gt;
        epinq   Exit periodic inquiry&lt;br /&gt;
        cmd     Submit arbitrary HCI commands&lt;br /&gt;
        con     Display active connections&lt;br /&gt;
        cc      Create connection to remote device&lt;br /&gt;
        dc      Disconnect from remote device&lt;br /&gt;
        sr      Switch master/slave role&lt;br /&gt;
        cpt     Change connection packet type&lt;br /&gt;
        rssi    Display connection RSSI&lt;br /&gt;
        lq      Display link quality&lt;br /&gt;
        tpl     Display transmit power level&lt;br /&gt;
        afh     Display AFH channel map&lt;br /&gt;
        lp      Set/display link policy settings&lt;br /&gt;
        lst     Set/display link supervision timeout&lt;br /&gt;
        auth    Request authentication&lt;br /&gt;
        enc     Set connection encryption&lt;br /&gt;
        key     Change connection link key&lt;br /&gt;
        clkoff  Read clock offset&lt;br /&gt;
        clock   Read local or remote clock&lt;br /&gt;
        lescan  Start LE scan&lt;br /&gt;
        lewladd Add device to LE White List&lt;br /&gt;
        lewlrm  Remove device from LE White List&lt;br /&gt;
        lewlsz  Read size of LE White List&lt;br /&gt;
        lewlclr Clear LE White list&lt;br /&gt;
        lecc    Create a LE Connection&lt;br /&gt;
        ledc    Disconnect a LE Connection&lt;br /&gt;
        lecup   LE Connection Update &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Falls beim SCAN kein Tag gefunden wird, sollte das BT Interface neu gestartet werden. Dazu ist kein Reboot des PI notwendig.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo hciconfig hci0 down&lt;br /&gt;
sudo hciconfig hci0 up&lt;br /&gt;
sudo hcitool dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Anleitung für ein  LE Device (z.B. Gtags,Pebbles etc.) ===&lt;br /&gt;
&lt;br /&gt;
Die Software lepresenced kann aktuell über drei Varianten installiert werden. Dabei ist die bevorzugte Variante (Variante 1) die Installation über das bereitgestellte .deb-Paket.&lt;br /&gt;
Die Variante 2 setzt voraus, dass im FHEM contrib Verzeichnis (/opt/fhem/contrib) die aktuelle Version des .deb-Pakets liegt. Die Variante 3 ist dafür gedacht, wenn man keine .deb-Pakete installieren kann/will oder es aus anderen Gründen nicht funktioniert. Es wird davon abgeraten die Variante 3 zu verwenden. Vollständigkeithalber wird sie aber aufgeführt.&lt;br /&gt;
&lt;br /&gt;
====Installation per .deb-Paket====&lt;br /&gt;
&lt;br /&gt;
Die bevorzugte Variante ist die Installation von lepresenced durch die passenden .deb Pakete.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.Variante:&#039;&#039;&#039;&lt;br /&gt;
Herunterladen der aktuellen lepresenced-0.81-1.deb Datei über den Webbrowser &lt;br /&gt;
[https://svn.fhem.de/trac/export/HEAD/trunk/fhem/contrib/PRESENCE/deb/ SVN-Repository]. Im SVN die passende Datei auswählen und in der folgende Webseite den Link unter:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Download in other formats:&lt;br /&gt;
    Original Format &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
anklicken und die Datei herunterladen.&lt;br /&gt;
Die Datei kann jetzt auf den RPi kopiert und mit folgenden Befehlen ausgeführt werden (ggf. Berechtigungen anpassen). &lt;br /&gt;
&lt;br /&gt;
Alternativ per wget Befehl direkt auf den RPi&lt;br /&gt;
 https://svn.fhem.de/trac/export/13992/trunk/fhem/contrib/PRESENCE/deb/lepresenced-0.81-1.deb&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2.Variante:&#039;&#039;&#039;&lt;br /&gt;
Herunterladen aus dem fhem contrib Verzeichnis:&lt;br /&gt;
Hierzu muss das contrib auf dem aktuellen Stand sein. Dazu wird die Installation von subversion (normal bereits vorhanden) benötigt.&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install subversion&lt;br /&gt;
&lt;br /&gt;
Danach kann per &lt;br /&gt;
 sudo svn checkout svn://svn.code.sf.net/p/fhem/code/trunk/fhem/contrib svnrepo&lt;br /&gt;
&lt;br /&gt;
Das aktuelle Repository auf den Pi heruntergeladen werden. Danach sollte im gewählten Verzeichnis die eingecheckten Dateien verfügbar sein.&lt;br /&gt;
 /opt/fhem/svnrepo/PRESENCE/deb  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Installation der Variante 1 oder 2 &#039;&#039;&#039;&lt;br /&gt;
Egal welche Variante gewählt wurde, kann nun mit folgenden Befehlen das Paket installiert werden. Bitte Pfade ggf. anpassen.&lt;br /&gt;
&lt;br /&gt;
 sudo dpkg -i lepresenced-0.81-1.deb&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get -f install&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe der Installation sollte am Ende ein [ ok ] Starting lepresenced (via systemctl): lepresenced.service. ausgeben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Paketlisten werden gelesen... Fertig&lt;br /&gt;
Abhängigkeitsbaum wird aufgebaut.       &lt;br /&gt;
Statusinformationen werden eingelesen.... Fertig&lt;br /&gt;
Abhängigkeiten werden korrigiert ... Fertig&lt;br /&gt;
Die folgenden zusätzlichen Pakete werden installiert:&lt;br /&gt;
  bluez-hcidump&lt;br /&gt;
Die folgenden NEUEN Pakete werden installiert:&lt;br /&gt;
  bluez-hcidump&lt;br /&gt;
0 aktualisiert, 1 neu installiert, 0 zu entfernen und 0 nicht aktualisiert.&lt;br /&gt;
1 nicht vollständig installiert oder entfernt.&lt;br /&gt;
Es müssen 157 kB an Archiven heruntergeladen werden.&lt;br /&gt;
Nach dieser Operation werden 490 kB Plattenplatz zusätzlich benutzt.&lt;br /&gt;
Möchten Sie fortfahren? [J/n]&lt;br /&gt;
Holen: 1 http://archive.raspberrypi.org/debian/ jessie/main bluez-hcidump armhf 5.23-2+rpi2 [157 kB]&lt;br /&gt;
Es wurden 157 kB in 0 s geholt (921 kB/s).&lt;br /&gt;
Vormals nicht ausgewähltes Paket bluez-hcidump wird gewählt.&lt;br /&gt;
(Lese Datenbank ... 42033 Dateien und Verzeichnisse sind derzeit installiert.)&lt;br /&gt;
Vorbereitung zum Entpacken von .../bluez-hcidump_5.23-2+rpi2_armhf.deb ...&lt;br /&gt;
Entpacken von bluez-hcidump (5.23-2+rpi2) ...&lt;br /&gt;
Trigger für man-db (2.7.0.2-5) werden verarbeitet ...&lt;br /&gt;
bluez-hcidump (5.23-2+rpi2) wird eingerichtet ...&lt;br /&gt;
lepresenced (0.81-1) wird eingerichtet ...&lt;br /&gt;
[ ok ] Starting lepresenced (via systemctl): lepresenced.service.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ab hier kann, wenn alles problemlos funktioniert hat mit der [[Einrichtung der G-Tags über FHEM]] weitergemacht werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3.Variante:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Bei dieser Variante wird das aktuellste lepresenced Skript aus github heruntergeladen. Das bedeutet, dass jegliche Konfiguration wie automatischer Start, Berechtigungen etc. &lt;br /&gt;
manuell konfiguriert werden muss. Diese Variante eignet sich nur für diejenigen, die keine .deb-Pakete installieren wollen/können oder die genau Wissen, was sie tun!&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
https://github.com/mhop/fhem-mirror/blob/master/fhem/contrib/PRESENCE/lepresenced&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zur &amp;quot;Installation&amp;quot; des Skripts folgendermaßen vorgehen:&lt;br /&gt;
Unter /fhem manuell den Ordner „script“ anlegen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir script&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Datei lepresenced reinkopieren und ausführbar machen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo chmod +x /opt/fhem/script/lepresenced&lt;br /&gt;
sudo chgrp -cR dialout lepresenced&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Skript erstmalig starten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ./lepresenced --loglevel LOG_EMERG -d&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kommt beim Starten des Skript eine Fehlermeldung, müssen die Abhängigkeiten aufgelöst werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Can&#039;t locate Net/Server/Daemonize.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.14.2 /usr/local/share/perl/5.14.2 /usr/lib/perl5 /usr/share/perl5 / usr/lib/perl/5.14 /usr/share/perl/5.14 /usr/local/lib/site_perl .) at /opt/fhem/lepresenced line 17.&lt;br /&gt;
BEGIN failed--compilation aborted at /opt/fhem/lepresenced line 17.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Um die Abhängigkeiten aufzulösen muss folgendes nachinstalliert werden und anschließend ein Reboot durchgeführt werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libnet-server-*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Einrichtung der G-Tags über FHEM====&lt;br /&gt;
&lt;br /&gt;
Nach dem letzten Schritt sind alle Bedingungen für eine abschließende Konfiguration der BT-Tags in FHEM abgeschlossen worden.&lt;br /&gt;
Jetzt kann der Tag dem FHEM-Server bekannt gemacht werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   --   Name       Modul    Modus         MAC vom Gtag  IP vom PI Port    Abfragezeit in Sekunden&lt;br /&gt;
define MeinGtAG PRESENCE lan-bluetooth xx:xx:xx:xx:xx:xx 127.0.0.1:5333    120&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Den absent und present Mode kann man einfach testen, in dem man den Gtag mit Alufolie einwickelt.&lt;br /&gt;
&lt;br /&gt;
=== Anleitung für ein NICHT LE Device (z.B. IPhone) ===&lt;br /&gt;
Die Installation kann (wie in der commanref beschrieben) über Debian Pakete erfolgen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.deb package for Debian (noarch): presenced-1.3.deb http://svn.code.sf.net/p/fhem/code/trunk/fhem/contrib/PRESENCE/deb/presenced-1.3.deb&lt;br /&gt;
&lt;br /&gt;
.deb package for Raspberry Pi (raspbian): presenced-rpi-1.3.deb http://svn.code.sf.net/p/fhem/code/trunk/fhem/contrib/PRESENCE/deb/presenced-rpi-1.3.deb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo dpkg -i presenced-rpi-1.3.de&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Installation perl script file (Auszug commanref)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
direct perl script file: presenced http://svn.code.sf.net/p/fhem/code/trunk/fhem/contrib/PRESENCE/presenced&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
Nach dem letzten Schritt sind alle Bedingungen für eine abschließende Konfiguration der BT-Tags in FHEM abgeschlossen worden.&lt;br /&gt;
Jetzt kann der Tag dem FHEM-Server bekannt gemacht werden.&lt;br /&gt;
{{Randnotiz|RNText=Wenn man mit collectord arbeitet muß man die Erkennung bei allen Devices auf port 5222 setzen.&lt;br /&gt;
  lan-bluetooth xx:xx:80:xx:xx:AC 127.0.0.1:5222 20 120}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    --   Name       Modul    Modus         MAC vom Gtag  IP vom PI Port    Abfragezeit in Sekunden&lt;br /&gt;
define MeinGtAG PRESENCE lan-bluetooth xx:xx:xx:xx:xx:xx 127.0.0.1:5333    120&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Automatischer Start ===&lt;br /&gt;
&lt;br /&gt;
Wurde leprecend mit der oben genannten Variante 1 oder 2 installiert worden sein, wird per systemctl der automatische Start direkt eingerichtet. Es ist somit keine extra Konfiguration per Cron oder init.d notwendig.&lt;br /&gt;
&lt;br /&gt;
Wurde die Variante 3 - die manuelle Installation - durchgeführt; bitte folgende Schritte für den automatischen Start befolgen:&lt;br /&gt;
 &lt;br /&gt;
Damit das leprecend Skript beim Systemstart mitgestartet wird, sollte eine Crontab Eintrag gesetzt werden. Alternativ die rc.local anpassen.&lt;br /&gt;
Ersteres würde so aussehen:&lt;br /&gt;
&lt;br /&gt;
Ein sh-Skript mit dem Inhalt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo start-stop-daemon -d /opt/fhem/script -S -x /opt/fhem/script/lepresenced &amp;amp;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
unter dem Verzeichnis /home/pi ablegen, welches sich init_start.sh nennt.&lt;br /&gt;
&lt;br /&gt;
Das Skript dann unter: sudo crontab -e einhängen mit folgender Folge:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@reboot        /home/pi/init_start.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zweiteres so:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo nano /etc/rc.local&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Datei rc.local, freie Stelle suchen, vor &amp;quot;exit 0&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Start lepresenced&lt;br /&gt;
/opt/fhem/script/lepresenced --loglevel LOG_EMERG -d&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Batterieüberwachung (aktuell nur G-Tags) ===&lt;br /&gt;
&lt;br /&gt;
Leider überträgt der G-Tag nach der Einrichtung als Device in FHEM kein Reading mit seinem aktuellen Batteriestatus.&lt;br /&gt;
Dem wurde mit Hilfe des Forum Abhilfe geschaffen.&lt;br /&gt;
Im Folgenden wird erläutert wie die Batterieüberwachung eingerichtet werden kann.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Voraussetzung:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
bc - Basiscalculator [https://packages.debian.org/de/sid/bc Bc-Paket]&lt;br /&gt;
&amp;lt;pre&amp;gt; sudo apt-get install bc &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anlegen eines Shellskript auf dem Raspberry System. &lt;br /&gt;
Die Parameter &amp;lt;&amp;lt;MAC-Adresse&amp;gt;&amp;gt; und &amp;lt;&amp;lt;TagName&amp;gt;&amp;gt; müssen durch die Werte des auszulesenden G-Tags ersetzt werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
stringZ=$(sudo gatttool -b 5C:2B:80:C1:14:41 --char-read --handle=0x001b)&lt;br /&gt;
stringZ=${stringZ:33:2}&lt;br /&gt;
stringZ=$(echo &amp;quot;$stringZ&amp;quot; | tr a-f A-F)&lt;br /&gt;
decimal=$(echo &amp;quot;ibase=16; $stringZ&amp;quot; | bc)&lt;br /&gt;
perl /opt/fhem/fhem.pl 7072 &amp;quot;setreading MeinGtag Batterie $decimal&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dem Device in FHEM (hier MeinGtag) ein userReading mit dem Namen &#039;&#039;&#039;Batterie&#039;&#039;&#039; hinzufügen.&lt;br /&gt;
Das Shellskript mit folgendem Befehl starten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./GtagBatterie.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Wichtig ist hierbei,&#039;&#039;&#039; dass Skript mit &amp;quot;./&amp;quot; und nicht mit &amp;quot;sh&amp;quot; aufzurufen. Beim Aufruf mit &amp;quot;sh GtagBatterie.sh&amp;quot; produziert es einen Fehler&lt;br /&gt;
&amp;lt;pre&amp;gt;GtagBatterie.sh: 3: GtagBatterie.sh: Bad substitution &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Reading wird auf den ausgelesenen Wert der Batterie gesetzt. &lt;br /&gt;
&lt;br /&gt;
Hinweis: Es sollte für jeden G-Tag ein eigenes Skript abgelegt werden. Das Skript kann per crontab oder fhem Kommando (system) regelmäßig aufgerufen werden.&lt;br /&gt;
&lt;br /&gt;
=== Batterieüberwachung (alle Devices vom Typ &amp;quot;MODE=lan-bluetooth&amp;quot;) ===&lt;br /&gt;
&lt;br /&gt;
Es gibt eine weitere Möglichkeit um den Batteriestatus von LE Devices abzurufen und in FHEM als Reading darzustellen.&lt;br /&gt;
Dabei wird der Batteriezustand für alle LE Devices, die bereits in FHEM konfiguriert sind und per lepresenced überwacht werden, automatisch in einem shell-Script ermittelt.&lt;br /&gt;
Näheres dazu im Forumartikel {{Link2Forum|Topic=56960|LinkText=Erweiterung: Anwesenheitserkennung/Batterieüberwachung}}.&lt;br /&gt;
&lt;br /&gt;
Vorteile:&lt;br /&gt;
* Automatische Ermittlung aller in FHEM konfigurierten LE Devices&lt;br /&gt;
* Möglichkeit, diese Devices alternativ manuell im Script einzutragen&lt;br /&gt;
* Es werden nur Devices abgefragt, die im Status &amp;quot;present&amp;quot; sind, also mit ziemlicher Sicherheit auch verfügbar sind&lt;br /&gt;
* Ein eventuell auf dem FHEM telnet-Port gesetztes Passwort kann im Script hinterlegt werden&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Voraussetzung:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Funktionierendes lepresenced&#039;&#039;&#039; - siehe [[Anwesenheitserkennung#Anleitung_f.C3.BCr_ein_LE_Device_.28z.B._Gtags.2CPebbles_etc..29|Anleitung für ein LE Device (z.B. Gtags,Pebbles etc.)]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;socat&#039;&#039;&#039; - TCP port forwarder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get update &amp;amp;&amp;amp; sudo apt-get install socat&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gawk&#039;&#039;&#039; - Zum extrahieren der Daten&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get update &amp;amp;&amp;amp; sudo apt-get install gawk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gatttool&#039;&#039;&#039; - Bestandteil von bluez &lt;br /&gt;
&lt;br /&gt;
gatttool ist auf den meisten Distributionen im bluez-Paket, allerdings nicht bei Opensuse. Dort muss man das Sourcepaket von bluez installieren und selbst kompilieren.&lt;br /&gt;
gatttool sollte dann nach /usr/bin oder /usr/local/bin kopiert werden,&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zusätzlich zu den notwendigen Erweiterungen werden für die Ausführung von gatttool &#039;&#039;&#039;Root-Rechte benötigt&#039;&#039;&#039;!&lt;br /&gt;
&lt;br /&gt;
Das Script selbst gibt es hier: [https://raw.githubusercontent.com/micky0867/lebattery/master/lebattery lebattery]&lt;br /&gt;
&lt;br /&gt;
Am Besten unter /opt/fhem/script/lebattery speichern und ausführbar machen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo su -&lt;br /&gt;
mkdir /opt/fhem/script&lt;br /&gt;
cd /opt/fhem/script&lt;br /&gt;
wget https://raw.githubusercontent.com/micky0867/lebattery/master/lebattery&lt;br /&gt;
chmod 755 lebattery&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je nach Bedarf können im Script noch die folgenden 3 Parameter angepasst werden:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# If allowed_telnetPort is protected by a password, add the password here&lt;br /&gt;
TELNETPASSWORD=&amp;quot;&amp;quot;&lt;br /&gt;
# Attribute for batterylevel in FHEM&lt;br /&gt;
ATTRIBUT=&amp;quot;batterylevel&amp;quot;&lt;br /&gt;
# Use this, if you dont want the script to determine the tags on its own&lt;br /&gt;
LETAGS=&amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Skript wird dann unter root folgendermaßen gestartet:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/opt/fhem/script/lebattery -v&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ausgabe des Skripts, wenn es mit dem Verbose Parameter -v gestartet wird.&lt;br /&gt;
&lt;br /&gt;
Beide Devices sind vom Typ NUT mini, das Device mit dem FHEM-Namen &#039;&#039;&#039;nut_Micky&#039;&#039;&#039; ist im Status &#039;&#039;&#039;absent&#039;&#039;&#039;. Das zweite Device ist im Status &#039;&#039;&#039;present&#039;&#039;&#039;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Determining address for nut_Micky ...&lt;br /&gt;
nut_Micky is in state absent, no further action required&lt;br /&gt;
&lt;br /&gt;
Determining address for nut_Test ...&lt;br /&gt;
Fetching batterylevel for nut_Test (F3:44:04:81:54:89) ...&lt;br /&gt;
Setting batterylevel for nut_Test to 100%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mein crontab-Eintrag (User root) sieht so aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
3 3  * * * /opt/fhem/script/lebattery -v &amp;gt;/opt/fhem/script/lebattery.log 2&amp;gt;&amp;amp;1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Damit wird jeden Morgen um 3 Minuten nach 3 Uhr der Zustand der Batterien aller Devices ermittelt und in FHEM abgespeichert.&amp;lt;br&amp;gt; &lt;br /&gt;
Bevor man das mit crontab macht, sollte man allerdings zunächst sicher stellen, dass es auch ohne crontab funktioniert....&lt;br /&gt;
&lt;br /&gt;
Bei Problemen kann man auch erstmal schauen, ob das mit dem gattool überhaupt funktioniert:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gatttool -t &amp;lt;Typ&amp;gt; -b &amp;lt;MAC-Adresse&amp;gt; --char-read --uuid 0x2a19&lt;br /&gt;
&lt;br /&gt;
handle: 0x0017 	 value: 64&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In diesem Fall hat die Batterie noch 100% (hex 64).&amp;lt;br&amp;gt;&lt;br /&gt;
Der Typ ist abhängig vom Hersteller und kann public (G-Tags) bzw. random (Nut) sein. Im Zweifelsfall beides ausprobieren.&lt;br /&gt;
&lt;br /&gt;
===  Anwesenheitserkennung / Anwesenheitsbenachrichtigung mit G-Tags ===&lt;br /&gt;
&lt;br /&gt;
Ein Skript zur Nutzung der Gigaset G-TAGs zur Alarmierung bei öffnen und schließen von Türen und zur Anwesenheitserkennung, um die Alarmierung zu aktivieren bzw. deaktivieren. &lt;br /&gt;
Es kann verwendet werden um die Anwesenheit von mehrern Personen im Haushalt zu erkennen. Dabei wird eingeschränkt, dass nur bestimmte Personen die Alarmierung aktivieren können ( Eltern/Kind -Beziehung ).&lt;br /&gt;
Des Weiteren werden im Beispiel die Eltern benachrichtigt wenn eins der Kinder das Haus verlässt und die Eltern nicht anwesend sind.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNText= Namen der G-Tags in den Skripten bitte Anpassen!}}&lt;br /&gt;
&lt;br /&gt;
Für die &#039;&#039;Notify&#039;&#039; und die &#039;&#039;RESIDENTS-Erweiterung&#039;&#039; wird ein Dummy benötigt.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Alarm dummy&lt;br /&gt;
attr Alarm devStateIcon aktiv:secur_locked@red inaktiv:secur_open@lightgreen&lt;br /&gt;
attr Alarm eventMap on:aktiv off:inaktiv&lt;br /&gt;
attr Alarm setList on off&lt;br /&gt;
attr Alarm webCmd aktiv:inaktiv&lt;br /&gt;
attr Alarm room Alarm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Mit Notify ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gtag.*.presence:.* {Anwesenheit_check(&amp;quot;$EVTPART1&amp;quot;, &amp;quot;$NAME&amp;quot;)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Code für die 99_myUtils.pm&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### GTAG ANWESENHEITS CHECK&lt;br /&gt;
sub Anwesenheit_check($$) {&lt;br /&gt;
my ($EVENT, $NAME) = @_;&lt;br /&gt;
&lt;br /&gt;
# gtag_rot	-	Alias Marco&lt;br /&gt;
# gtag_schwarz	-	Alias Ulli&lt;br /&gt;
# gtag_gruen	-	Alias Frida&lt;br /&gt;
# gtag_orange	-	Alias Hannah&lt;br /&gt;
&lt;br /&gt;
my $RESIDENT = &amp;quot;rr_&amp;quot;; # Alle GTAGs sind Standardmäßig Residents Roommate&lt;br /&gt;
# $RESIDENT = &amp;quot;rg_&amp;quot; if (($NAME eq &amp;quot;gtag_orange&amp;quot;) xor ($NAME eq &amp;quot;gtag_weis&amp;quot;)); # Hier nur Gäste (Roomguest) Auskommentiert, da ich es so nicht brauche&lt;br /&gt;
my $ROOMMATE = (&amp;quot;$RESIDENT&amp;quot; . &amp;quot;$NAME&amp;quot;); # Residentsname zusammenbauen&lt;br /&gt;
my $ALIASNAME = AttrVal($ROOMMATE,&#039;alias&#039;,$ROOMMATE); # ALIAS des Roommates auslesen&lt;br /&gt;
&lt;br /&gt;
my $GTAG1 = Value(&#039;gtag_rot&#039;); # ELTERN&lt;br /&gt;
my $GTAG2 = Value(&#039;gtag_schwarz&#039;); # ELTERN&lt;br /&gt;
&lt;br /&gt;
my $STATUS = &amp;quot;wahrscheinlich gerade los&amp;quot;;&lt;br /&gt;
$STATUS = &amp;quot;anwesend&amp;quot; if ($EVENT eq &amp;quot;present&amp;quot;); # Status: anwesend&lt;br /&gt;
$STATUS = &amp;quot;unterwegs&amp;quot; if ($EVENT eq &amp;quot;absent&amp;quot;); # Status: unterwegs&lt;br /&gt;
&lt;br /&gt;
Log 1, &amp;quot;$ALIASNAME ist $STATUS.&amp;quot;; # LOG Eintrag erzeugen&lt;br /&gt;
&lt;br /&gt;
if (($EVENT eq &amp;quot;present&amp;quot; &amp;amp;&amp;amp; Value(&amp;quot;Alarm&amp;quot;) eq &amp;quot;aktiv&amp;quot;) &amp;amp;&amp;amp; ($NAME eq &amp;quot;gtag_gruen&amp;quot; xor $NAME eq &amp;quot;gtag_orange&amp;quot;)) {&lt;br /&gt;
 fhem(&amp;quot;set teleBot send ALARMIERUNG BLEIBT AKTIV: $ALIASNAME ist da...&amp;quot;); # Telegram&lt;br /&gt;
# fhem(&amp;quot;set Infopush msg &#039;ALARMIERUNG BLEIBT AKTIV&#039; &#039;$ALIASNAME ist da...&#039;&amp;quot;); # Pushover&lt;br /&gt;
 }&lt;br /&gt;
 elsif (($EVENT eq &amp;quot;present&amp;quot; &amp;amp;&amp;amp; Value(&amp;quot;Alarm&amp;quot;) eq &amp;quot;aktiv&amp;quot;) &amp;amp;&amp;amp; ($NAME eq &amp;quot;gtag_rot&amp;quot; xor $NAME eq &amp;quot;gtag_schwarz&amp;quot;)) {&lt;br /&gt;
 fhem(&amp;quot;set teleBot send ALARMIERUNG INAKTIV: $ALIASNAME ist da...; set Alarm inaktiv&amp;quot;); # Telegram&lt;br /&gt;
# fhem(&amp;quot;set Infopush msg &#039;ALARMIERUNG INAKTIV&#039; &#039;$ALIASNAME ist da...&#039;; set Alarm inaktiv&amp;quot;); # Pushover&lt;br /&gt;
 }&lt;br /&gt;
 elsif (($EVENT eq &amp;quot;absent&amp;quot; &amp;amp;&amp;amp; Value(&amp;quot;Alarm&amp;quot;) eq &amp;quot;aktiv&amp;quot;) &amp;amp;&amp;amp; ($NAME eq &amp;quot;gtag_gruen&amp;quot; xor $NAME eq &amp;quot;gtag_orange&amp;quot;)) {&lt;br /&gt;
 fhem(&amp;quot;set teleBot send ALARMIERUNG BLEIBT AKTIV: $ALIASNAME hat das Haus verlassen.&amp;quot;); # Telegram&lt;br /&gt;
# fhem(&amp;quot;set Infopush msg &#039;ALARMIERUNG BLEIBT AKTIV&#039; &#039;$ALIASNAME hat das Haus verlassen.&#039;&amp;quot;); # Pushover&lt;br /&gt;
 } 		&lt;br /&gt;
 elsif (($EVENT eq &amp;quot;absent&amp;quot; &amp;amp;&amp;amp; Value(&amp;quot;Alarm&amp;quot;) eq &amp;quot;inaktiv&amp;quot;) &amp;amp;&amp;amp; ($GTAG1 eq &amp;quot;absent&amp;quot; &amp;amp;&amp;amp; $GTAG2 eq &amp;quot;absent&amp;quot;)) {&lt;br /&gt;
 fhem(&amp;quot;set Alarm aktiv; set teleBot send ALARMIERUNG AKTIV: $ALIASNAME hat das Haus verlassen.&amp;quot;); # Telegram&lt;br /&gt;
# fhem(&amp;quot;set Alarm aktiv; set Infopush msg &#039;ALARMIERUNG AKTIV&#039; &#039;$ALIASNAME hat das Haus verlassen.&#039; &#039;&#039; 0 &#039;&#039;&amp;quot;); # Pushover&lt;br /&gt;
 }&lt;br /&gt;
}&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;
====Mit Notify und Integration des RESIDENTS-MODUL====&lt;br /&gt;
&lt;br /&gt;
Der hier beschriebene Code erweitert die Funktionen unter dem Punkt 5.93.&lt;br /&gt;
Das Notify muss daher mit der folgenden Zeile erweitert werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Alarm_AnwesenheitCheck notify gtag.*.presence:.* { Anwesenheit_check(&amp;quot;$EVTPART1&amp;quot;, &amp;quot;$NAME&amp;quot;), Anwesenheit_check_resi(&amp;quot;$NAME&amp;quot;) }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusätzlicher Code für die 99_myUtils.pm um die RESIDENTS Funktion nutzen zu können:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### RESIDENTS&lt;br /&gt;
sub Anwesenheit_check_resi($) {&lt;br /&gt;
my ($NAME) = @_;&lt;br /&gt;
my $ALIASNAME = AttrVal($NAME,&#039;alias&#039;,$NAME); # ALIASNAME des GTAGs auslesen&lt;br /&gt;
&lt;br /&gt;
my $RESIDENT = &amp;quot;rr_&amp;quot;; # Als Standard sind alle GTAGs Roommates&lt;br /&gt;
$RESIDENT = &amp;quot;rg_&amp;quot; if (($NAME eq &amp;quot;gtag_orange&amp;quot;) xor ($NAME eq &amp;quot;gtag_weis&amp;quot;)); # Hier nur GTAG Namen der Gäste (Roomguest)&lt;br /&gt;
my $ROOMMATE = (&amp;quot;$RESIDENT&amp;quot; . &amp;quot;$ALIASNAME&amp;quot;); # Residentsname zusammenbauen&lt;br /&gt;
&lt;br /&gt;
if (ReadingsVal($NAME,&#039;presence&#039;,$NAME) eq &amp;quot;absent&amp;quot;) {&lt;br /&gt;
 fhem(&amp;quot;set $ROOMMATE absent&amp;quot;); # Resisents Status von Roommates setzen&lt;br /&gt;
 }&lt;br /&gt;
 elsif(ReadingsVal($NAME,&#039;presence&#039;,$NAME) eq &amp;quot;present&amp;quot;) {&lt;br /&gt;
 fhem(&amp;quot;set $ROOMMATE home&amp;quot;); # Resisents Status von Roommates setzen&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Mit Notify und Fenster/Tür. -Kontakt Überwachung====&lt;br /&gt;
&lt;br /&gt;
Erweiterung für die Überwachung von  Fenster/Tür. -Kontakten. Dazu sind zwei weitere Notifys notwendig die auf die Trigger der Kontakte regagieren&lt;br /&gt;
und so eine weitere Funktion in der 99_myUtils.pm ansprechen. Die Notifys triggern auf Kontakte die mit dem Namen Kontakt* beginnen.&lt;br /&gt;
Sollten die eigenen Fenster/Tür. -Kontakt anderen Namen besitzen, müssen die Skripte dementsprechend angepasst werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Alarm_Kontaktmeldung notify Kontakt.*:contact:.* {Kontakt_Meldung(&amp;quot;$EVTPART1&amp;quot;, &amp;quot;$NAME&amp;quot;)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Alarm_Sabotagealarm notify Kontakt.*.sabotageError:.on {Kontakt_Sabotage(&amp;quot;$EVTPART1&amp;quot;, &amp;quot;$NAME&amp;quot;)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusätzlicher Code für die 99_myUtils.pm um die TÜRKONTAKTE-Meldung nutzen zu können:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### TÜRKONTAKTE-Meldung/Zustand&lt;br /&gt;
sub Kontakt_Meldung($$) {&lt;br /&gt;
my ($EVENT, $NAME) = @_;&lt;br /&gt;
my $ALIASNAME = AttrVal($NAME,&#039;alias&#039;,$NAME);&lt;br /&gt;
Log 1, &amp;quot;$ALIASNAME wurde $EVENT&amp;quot;;&lt;br /&gt;
if (ReadingsVal(&amp;quot;Alarm&amp;quot;, &amp;quot;state&amp;quot;, &amp;quot;on&amp;quot;) eq &amp;quot;on&amp;quot;) {&lt;br /&gt;
fhem(&amp;quot;set teleBot send $ALIASNAME wurde $EVENT&amp;quot;); # Nachricht über Telegram&lt;br /&gt;
# fhem(&amp;quot;set Infopush msg &#039;$ALIASNAME&#039; &#039;$ALIASNAME wurde $EVENT&#039;&amp;quot;); # Nachricht über Pushover&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
### TÜRKONTAKTE-Sabotagealarm&lt;br /&gt;
&lt;br /&gt;
sub Kontakt_Sabotage($$) {&lt;br /&gt;
my ($EVENT, $NAME) = @_;&lt;br /&gt;
my $ALIASNAME = AttrVal($NAME,&#039;alias&#039;,$NAME);&lt;br /&gt;
Log 1, &amp;quot;$ALIASNAME meldet Sabotagealarm&amp;quot;;&lt;br /&gt;
fhem(&amp;quot;set teleBot send Alarm: $ALIASNAME meldet Sabotagealarm&amp;quot;); # Nachricht über Telegram&lt;br /&gt;
# fhem(&amp;quot;set Infopush msg &#039;Alarmanlage&#039; &#039;$ALIASNAME meldet Sabotagealarm&#039; &#039;&#039; 2 &#039; &#039; 60 600 &amp;quot;); # Nachricht über Pushover&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Hinweis zur Benutzung / Fehlerhandling ====&lt;br /&gt;
&lt;br /&gt;
Der Alarm dummy hat den Zustand on:off.  Die Bezeichnungen und Namen müssen 1:1 übernommen werden damit das Script funktioniert.&lt;br /&gt;
Andernfalls müssen die Bezeichnungen für z.B. absent:unterwegs und present:anwesend - angepasst werden.&lt;br /&gt;
Die Benachrichtigung kann aktuell per &#039;&#039;Telegram&#039;&#039; sowie &#039;&#039;Pushover&#039;&#039; (&#039;&#039;&#039;Achtung mit zweiterem sind Abokosten verbunden!&#039;&#039;&#039;) realisiert werden.&lt;br /&gt;
Diskussion zum Thema im Forum unter: {{Link2Forum|Topic=64080}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Verwendung von Collectord bei mehreren PRESENCE Installationen mit LE-Devices ===&lt;br /&gt;
&lt;br /&gt;
Um zwei presence Installation zu verbinden wird der collectored Daemon von Markus Bloch benötigt.&lt;br /&gt;
Hierfür gibt es im Wiki auch eine kurze Erläuterung sowie die Commandref.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Aufbau:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
RPi1 (Hautpinstanz): fhem nebst presence Installation sowie collectord&lt;br /&gt;
RPi2 (Zweitsystem): fhem nebst presence Installation&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installation:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
auf RPi1 wird wie in der Commandref und im Wiki beschriebendas Presence Paket (https://svn.fhem.de/trac/export/HEAD/trunk/fhem/contrib/PRESENCE/deb/) heruntergeladen, installiert und konfiguriert.&lt;br /&gt;
Alle BT-Tags werden dann wie im Wiki beschrieben konfiguriert.&lt;br /&gt;
&lt;br /&gt;
auf RPi2 wird wie in der Commandref und im Wiki beschriebendas Presence Paket (https://svn.fhem.de/trac/export/HEAD/trunk/fhem/contrib/PRESENCE/deb/) heruntergeladen, installiert und konfiguriert.&lt;br /&gt;
Alle BT-Tags werden dann wie im Wiki beschrieben konfiguriert.&lt;br /&gt;
&lt;br /&gt;
Somit sollte auf beiden Systemen eine identische Konfiguration vorliegen.&lt;br /&gt;
&lt;br /&gt;
Jetzt wird das collectord heruntergeladen und installiert:&lt;br /&gt;
https://svn.fhem.de/trac/export/HEAD/trunk/fhem/contrib/PRESENCE/deb/collectord-1.7.deb&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install collectord-1.7.deb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach der Installation befindet sich im Verzeichnis: /etc/collectord.conf die Konfigurationsdatei für das collectord.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Konfiguration Shell:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo vi /etc/collectord.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Datei muss jetzt nach folgender Vorlage angepasst werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# room definition&lt;br /&gt;
#[room-name]           # name of the room&lt;br /&gt;
#address=192.168.0.10   # ip-address or hostname&lt;br /&gt;
#port=5111                # tcp port which should be used (5111 is default)&lt;br /&gt;
#presence_timeout=120     # timeout in seconds for each check when devices are present&lt;br /&gt;
#absence_timeout=20       # timeout in secondsfor each check when devices are absent&lt;br /&gt;
&lt;br /&gt;
[RPi1] 			          # Name (wird als Reading room bei den BT-Tags angezeigt) der presence Instanze&lt;br /&gt;
address=127.0.0.1 	          # Lokale Adresse RPi1 , da hier das Collectord später laufen soll!&lt;br /&gt;
port=5111		          # Port der Presence Installation &lt;br /&gt;
presence_timeout=60		  # Selbstgewaelte Pruefintervalle&lt;br /&gt;
absence_timeout=60		  # Selbstgewaelte Pruefintervalle&lt;br /&gt;
&lt;br /&gt;
[RPi2]  		          # Name (wird als Reading room bei den BT-Tags angezeigt) der presence Instanze&lt;br /&gt;
address=192.168.178.127	          # IP-Adresse der Instanz, wo nur das Presence laueft, also RPi2&lt;br /&gt;
port=5111		          # Port der Presence Installation &lt;br /&gt;
presence_timeout=60		  # Selbstgewaelte Pruefintervalle&lt;br /&gt;
absence_timeout=60		  # Selbstgewaelte Pruefintervalle&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hinweis: Es dürfen keine [Namen] mit Leerzeichen verwendet werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Konfiguration FHEM:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
RPi1&lt;br /&gt;
define Gtag PRESENCE lan-bluetooth XX:XX:XX:XX:XX:XX 127.0.0.1:5222 60&lt;br /&gt;
Hinweis: Der Port ist der, des Collectord!! Also hier, Standard 5222&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
RPi2&lt;br /&gt;
define Gtag PRESENCE lan-bluetooth XX:XX:XX:XX:XX:XX 192.168.178.27:5222 60&lt;br /&gt;
Hinweis: Der Port ist der, des Collectord!! Also hier, Standard 5222 die IP-Adresse von RPi1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach der Konfiguration kann der Daemon gestartet werden. Um eine visuelle Log-Ausgabe mit dem Aufruf:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo /usr/bin/perl /usr/sbin/collectord -vv -c /etc/collectord.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2017-04-02 17:52:55 - =================================================&lt;br /&gt;
2017-04-02 17:52:55 - started with PID 15554&lt;br /&gt;
2017-04-02 17:52:55 - reading configuration file&lt;br /&gt;
2017-04-02 17:52:55 - no config errors found&lt;br /&gt;
2017-04-02 17:52:55 - forked with PID 15556&lt;br /&gt;
2017-04-02 17:52:56 - created socket on 0.0.0.0 with port 5111&lt;br /&gt;
2017-04-02 17:53:20 - new connection from 127.0.0.1:48656&lt;br /&gt;
2017-04-02 17:53:20 - created thread 1 for processing device 7C:2F:80:E1:14:31 in room RPi2 for peer 127.0.0.1 (UUID: d0beb79dd4771532eb5e207c7bf31788)&lt;br /&gt;
2017-04-02 17:53:20 - created thread 2 for processing device 7C:2F:80:E1:14:31 in room RPi1 for peer 127.0.0.1 (UUID: d0beb79dd4771532eb5e207c7bf31788)&lt;br /&gt;
2017-04-02 17:53:20 - new connection from 127.0.0.1:48662&lt;br /&gt;
2017-04-02 17:53:20 - new connection from 127.0.0.1:48664&lt;br /&gt;
2017-04-02 17:53:20 - created thread 3 for processing device 7C:2F:80:ED:BC:F7 in room RPi2 for peer 127.0.0.1 (UUID: 7495a112063d5db45e6335d3fe305e36)&lt;br /&gt;
2017-04-02 17:53:20 - created thread 4 for processing device 7C:2F:80:ED:BC:F7 in room RPi1 for peer 127.0.0.1 (UUID: 7495a112063d5db45e6335d3fe305e36)&lt;br /&gt;
2017-04-02 17:53:20 - created thread 5 for processing device 7C:2F:80:E1:2A:4D in room RPi2 for peer 127.0.0.1 (UUID: c228f8d4d33b06787f995c7903c02760)&lt;br /&gt;
2017-04-02 17:53:20 - created thread 6 for processing device 7C:2F:80:E1:2A:4D in room RPi1 for peer 127.0.0.1 (UUID: c228f8d4d33b06787f995c7903c02760)&lt;br /&gt;
2017-04-02 17:53:22 - new connection from 192.168.xxx.xxx:51638&lt;br /&gt;
2017-04-02 17:53:22 - created thread 7 for processing device 7C:2F:80:E1:14:31 in room RPi2 for peer 192.168.xxx.xxx (UUID: 5db7012e709d6dc2fcd8159fc0344e40)&lt;br /&gt;
2017-04-02 17:53:22 - created thread 8 for processing device 7C:2F:80:E1:14:31 in room RPi1 for peer 192.168.xxx.xxx (UUID: 5db7012e709d6dc2fcd8159fc0344e40)&lt;br /&gt;
2017-04-02 17:53:22 - new connection from 192.168.xxx.xxx:51640&lt;br /&gt;
2017-04-02 17:53:22 - created thread 9 for processing device 7C:2F:80:ED:BC:F7 in room RPi2 for peer 192.168.xxx.xxx (UUID: c4b4d7c654132cf88e8c1fec3a956d3d)&lt;br /&gt;
2017-04-02 17:53:23 - created thread 10 for processing device 7C:2F:80:ED:BC:F7 in room RPi1 for peer 192.168.xxx.xxx (UUID: c4b4d7c654132cf88e8c1fec3a956d3d)&lt;br /&gt;
2017-04-02 17:53:29 - new connection from 192.168.xxx.xxx:51642&lt;br /&gt;
2017-04-02 17:53:29 - created thread 11 for processing device 7C:2F:80:E1:2A:4D in room RPi2 for peer 192.168.xxx.xxx (UUID: ecd7081e5ae3a0d8e735c8750cb116a1)&lt;br /&gt;
2017-04-02 17:53:29 - created thread 12 for processing device 7C:2F:80:E1:2A:4D in room RPi1 for peer 192.168.xxx.xxx (UUID: ecd7081e5ae3a0d8e735c8750cb116a1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn das Log wie oben abgebildet aussieht wurde alles richtig gemacht und unter dem Device in fhem erscheint ein neues Reading &amp;quot;rooms&amp;quot; mit dem Wert der Erkannten PRESENCE Installation.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Automatischer Start:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn das Collectord per .deb Paket installiert wurde, startet es automatisch bei einem Reboot mit.&lt;br /&gt;
Manuell Starten als Daemon mit:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo /usr/bin/perl /usr/sbin/collectord -c /etc/collectord.conf -d -v -l /var/log/collectord.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Problemlösungen ===&lt;br /&gt;
Falls es &#039;&#039;&#039;Probleme beim Starten des Skripts&#039;&#039;&#039; gibt bzw. man das Skript ohne Reboot des Systems neustarten möchte, kann man dies per kill Befehl erledigen.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps -ef | grep lepresenced&lt;br /&gt;
sudo kill &amp;lt;pid&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Debuglevel lepresenced setzen:&lt;br /&gt;
{{Randnotiz|RNText=Um Debug-Meldungen zu bekommen (Vorsicht bei SD-Karten-Systemen wie dem RPi) - Hierbei werden die Schreibzyklen auf die SD-Karte erhöht.}}&lt;br /&gt;
&lt;br /&gt;
Der Log Level muss im lepresenced-Skript selbst verändert werden. Um den Log-Level auf INFO/WARNING/DEBUG zu setzen, dass Skript lepresenced mit einem Editor öffnen und die Stellen, wo LOG_WARNING zu finden sind durch den nötigen LOG-Eintrag ersetzen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lepresenced --loglevel LOG_DEBUG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nur das wichtigste Loggen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lepresenced --loglevel LOG_WARNING&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Keinerlei LOG-Einträge&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lepresenced --loglevel LOG_EMERG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei &#039;&#039;&#039;Problemen mit der Batterieüberwachung&#039;&#039;&#039; der Tags kann die Pi Firmeware mit folgenden Befehl auf eine ältere Version zurückgesetzt werden.&lt;br /&gt;
Fehlermeldung beim Aufruf des lebattery oder anderen Batterietestskripten:&lt;br /&gt;
&amp;lt;pre&amp;gt;connect: Connection refused (111)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lösung (vorübergehend) &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo rpi-update 8521fd34c8f66b6d109acce943f6e25ec93ec005&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mehr dazu unter: {{Link2Forum|Topic=56960|Message=589165}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Das BT-Device ist ständig &amp;quot;absent&amp;quot;&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Eine Mögliche Lösung kann sein, dass Paket bluez-hcidump zu installieren. Das Werkzeug hcidump erlaubt die Beobachtung von Bluetooth-Aktivität.&lt;br /&gt;
Dies ist nicht notwendig, wenn bereits bluez installiert ist, da dies Teil des bluez Paketes ist&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install bluez-hcidump&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fehler in Logdateien /var/log/syslog und /var/log/kernel&#039;&#039;&#039;&lt;br /&gt;
 Jul 29 15:08:11 raspberrypi kernel: [ 4905.634211] bt_err_ratelimited: 1 callbacks suppressed&lt;br /&gt;
 Jul 29 15:08:11 raspberrypi kernel: [ 4905.634231] Bluetooth: hci0 advertising data length corrected&lt;br /&gt;
 Jul 29 15:08:12 raspberrypi kernel: [ 4906.647350] Bluetooth: hci0 advertising data length corrected&lt;br /&gt;
 Jul 29 15:08:13 raspberrypi kernel: [ 4907.532081] Bluetooth: hci0 advertising data length corrected&lt;br /&gt;
 Jul 29 15:08:13 raspberrypi kernel: [ 4907.655564] Bluetooth: hci0 advertising data length corrected&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Ursache des Problems ist noch nicht ergründet, allerdings betrifft dies aktuell nur den RPi3. Die Fehlermeldungen werden in verschiedene log&#039;s geschrieben. Darunter maßgeblich &amp;quot;syslog&amp;quot; und &amp;quot;kern.log&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Lösung (vorübergehend)&lt;br /&gt;
Unterbinden der Einträge durch Anlage eines blocklist Eintrag:&lt;br /&gt;
&lt;br /&gt;
 1. Unter &amp;quot;/etc/rsyslog.d&amp;quot; eine Datei erzeugen mit dem Namen &amp;quot;01-blocklist.conf&amp;quot;&lt;br /&gt;
 2. Inhalt: (Die Ausdrücke in den &amp;quot;&amp;quot; sind diejenigen, die aus dem log verschwinden sollen. - bei mir waren es die unten stehenden&amp;quot;)&lt;br /&gt;
    :msg,contains,&amp;quot;Bluetooth: hci0 advertising data length corrected&amp;quot; ~&lt;br /&gt;
    :msg,contains,&amp;quot;bt_err_ratelimited:&amp;quot; ~&lt;br /&gt;
 3. Dienst neu starten &amp;quot;sudo service rsyslog restart&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Weiter Infos werden im offiziellen Thema [[https://forum.fhem.de/index.php/topic,28753.msg499184/topicseen.html#msg499184]] diskutiert.&lt;br /&gt;
&lt;br /&gt;
==== Ansprechpartner ====&lt;br /&gt;
# {{Link2FU|5068|PatrikR}} (Patrick) für lepresenced &lt;br /&gt;
# [[Benutzer Diskussion:Devender|Devender]] ({{Link2FU|20043|Dirk}}) für Wiki und Doku&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:Glossary]]&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=AMAD&amp;diff=21607</id>
		<title>AMAD</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=AMAD&amp;diff=21607"/>
		<updated>2017-05-26T09:29:54Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuern von Adroidgeräten und Anzeige von bestimmten Informationen dieser Geräte&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Sonstige Systeme&lt;br /&gt;
|ModTechName=74_AMAD.pm&lt;br /&gt;
|ModOwner=CoolTux &amp;lt;br /&amp;gt;([http://forum.fhem.de/index.php?action=profile;u=13684 Forum] / [[Benutzer:CoolTux|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Vorwort==&lt;br /&gt;
===Warum AMAD2===&lt;br /&gt;
Bei der Entwicklung der ersten Version von AMAD musste ich auf Grund meines damaligen Wissenstandes ein einfaches Konzept zum Erhalt von Daten wählen. Hierfür wählte ich das Prinzip des pullens. Die Daten wurden alle 3 min vom Gerät angefordert.&lt;br /&gt;
Mit AMAD ab Version 2.0, also der 2. Version von AMAD werden die Daten nun vom Androidgerät selbst nach FHEM gepusht. So kommen Statusänderungen quasi in Echtzeit als Reading ins Device.&lt;br /&gt;
&lt;br /&gt;
==Vorstellung==&lt;br /&gt;
Dieses Modul liefert, &#039;&#039;&#039;in Verbindung mit der Android APP Automagic&#039;&#039;&#039;, diverse Informationen von Android Geräten. &lt;br /&gt;
Die AndroidAPP Automagic (welche nicht von mir stammt und 2.90 Euro kostet) funktioniert wie Tasker, ist aber bei weitem User freundlicher.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Features / Funktionen ==&lt;br /&gt;
Im Auslieferiungszustand werden folgende Zustände dargestellt:&lt;br /&gt;
* installierte Android Version&lt;br /&gt;
* Zustand von Automagic auf dem Gerät&lt;br /&gt;
* Spracheingabe&lt;br /&gt;
* Bluetooth An/Aus&lt;br /&gt;
* Zustand einer definierten App (läuft aktiv im Vordergrund oder nicht?)&lt;br /&gt;
* verbundene Bluetoothgeräte, inklusive deren MAC Adresse&lt;br /&gt;
* aktuell abgespieltes Musikalbum des verwendeten Mediaplayers&lt;br /&gt;
* aktuell abgespielter Musikinterpret des verwendeten Mediaplayers&lt;br /&gt;
* aktuell abgespielter Musiktitel des verwendeten Mediaplayers&lt;br /&gt;
* Status des Androidgerätes - Online/Offline&lt;br /&gt;
* nächster Alarmtag&lt;br /&gt;
* nächste Alarmzeit&lt;br /&gt;
* Batteriestatus in %&lt;br /&gt;
* Ladestatus - Netztei angeschlossen / nicht angeschlossen&lt;br /&gt;
* Bildschirmstatus An/Aus&lt;br /&gt;
* Bildschirmhelligkeit&lt;br /&gt;
* Vollbildmodus An/Aus&lt;br /&gt;
* Bildschirmausrichtung Auto/Landscape/Portrait&lt;br /&gt;
* Standardlautstärke&lt;br /&gt;
* Media Lautstärke&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Mit etwas Einarbeitung können jegliche Informationen welche Automagic bereit stellt, in FHEM angezeigt werden. Hierzu bedarf es lediglich eines eigenen Flows welcher seine Daten an die AMADCommBridge sendet. Das Modul gibt auch die Möglichkeit Androidgeräte zu steuern.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Modul gibt Dir auch die Möglichkeit Deine Androidgeräte zu steuern. So können folgende Aktionen durchgeführt werden:&lt;br /&gt;
* Bluetooth Ein/Aus schalten&lt;br /&gt;
* zu einem bestimmten Bluetoothgerät wechseln/verbinden&lt;br /&gt;
* Status des Gerätes (Online,Offline)&lt;br /&gt;
* Mediaplayer steuern (Play, Stop, nächster Titel, vorheriger Titel)&lt;br /&gt;
* nächste Alarmzeit setzen&lt;br /&gt;
* ein Benachrichtigungston abspielen (Notificationsound)&lt;br /&gt;
* eine App auf dem Gerät öffnen&lt;br /&gt;
* eine URL im Browser öffnen&lt;br /&gt;
* Bildschirm An/Aus machen&lt;br /&gt;
* Bildschirmhelligkeit einstellen&lt;br /&gt;
* Vollbildmodus einschalten&lt;br /&gt;
* eine Nachricht senden welche am Bildschirm angezeigt wird&lt;br /&gt;
* Bildschirmausrichtung einstellen (Auto,Landscape,Portrait)&lt;br /&gt;
* neuen Statusreport des Gerätes anfordern&lt;br /&gt;
* Systembefehle setzen (Reboot)&lt;br /&gt;
* eine Nachricht senden welche angesagt wird (TTS)&lt;br /&gt;
* Medienlautstärke regeln&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
Für all diese Aktionen und Informationen wird auf dem Androidgerät die App Automagic und ein so genannter Flow benötigt. Automagic Premium könnt Ihr Euch aus dem App Store installieren wohingegen die Flows im Ordner $FHEMINSTALL/FHEM/lib/ unter dem Dateinamen 74_AMADautomagicFlowset&#039;&#039;$VERSION&#039;&#039;.xml zu finden sind, wobei &#039;&#039;$VERSION&#039;&#039; die höchste sein sollte. Diese Datei müsst ihr auf das Gerät kopieren (Ort ist nicht entscheidend, nach dem Import kann die Datei theoretisch gelöscht werden).&lt;br /&gt;
&lt;br /&gt;
== AutomagicApp Anweisung ==&lt;br /&gt;
* installiert die App&lt;br /&gt;
* importiert das Flowset 74_AMADautomagicFlowset$VERSION.xml aus dem Ordner $INSTALLFHEM/FHEM/lib/ auf Eurem Androidgerät (Menü -&amp;gt; Verwalten -&amp;gt; Flows importierten). &#039;&#039;&#039;Wichtig: &#039;&#039;&#039; Die Flows dürfen noch nicht aktiviert werden!&lt;br /&gt;
&lt;br /&gt;
==Definition in FHEM==&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; AMAD &amp;lt;IP-ADRESSE&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;!!! Wichtig - Es dürfen ausschließlich nur IP Adressen verwendet werden, keine FQDN !!!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define WandTabletWohnzimmer AMAD 192.168.0.23&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Anweisung im Beispiel erstellt zwei neue AMAD-Devices im Raum AMAD:&lt;br /&gt;
* &amp;quot;WandTabletWohnzimmer&amp;quot;, wobei der Parameter &amp;lt;IP-ADRESSE&amp;gt; die IP Adresse des Android Gerätes festlegt. &amp;lt;em&amp;gt;!!!Comming Soon!!! Wer den Port ändern möchte, kann dies über das Attribut &amp;quot;port&amp;quot; tun. Ihr solltet aber wissen was Ihr tut, da dieser Port im HTTP Request Trigger der beiden Flows eingestellt ist. Demzufolge muß der Port dort auch geändert werden.&amp;lt;/em&amp;gt;&lt;br /&gt;
* &amp;quot;AMADCommBridge&amp;quot;, welches als Kommunikationsbrücke vom Androidgerät zu FHEM dient. Wenn notwendig kann der Port für die Bridge ohne Probleme im Bridge Device mittels dem Attribut &amp;quot;port&amp;quot; verändert werden.&lt;br /&gt;
&lt;br /&gt;
===AMAD Communication Bridge===&lt;br /&gt;
Beim ersten anlegen einer AMAD Deviceinstanz wird, wie angesprochen, automatisch ein Gerät Namens AMADCommBridge im Raum AMAD angelegt. Dieses Gerät dient zur Kommunikation vom Androidgerät zu FHEM ohne das zuvor eine Anfrage von FHEM aus ging. Damit das Androidgerät die IP von FHEM kennt, &#039;&#039;&#039;muss&#039;&#039;&#039; diese sofort nach dem anlegen der Bridge über den set Befehl in ein entsprechendes Reading in die Bridge geschrieben werden. &#039;&#039;&#039;DAS IST SUPER WICHTIG UND FÜR DIE FUNKTION DER BRIDGE NOTWENDIG.&#039;&#039;&#039;&lt;br /&gt;
Bitte führt hierzu folgenden Befehl aus:&lt;br /&gt;
&amp;lt;code&amp;gt;set AMADCommBridge fhemServerIP &amp;lt;FHEM-IP&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als zweites Reading könnt ihr &#039;&#039;expertMode&#039;&#039; setzen. Mit diesem Reading wird eine unmittelbare Kommunikation vom Gerät zu FHEM erreicht ohne die Einschränkung, über ein Notify gehen zu müssen und nur reine set Befehle ausführen zu können.&lt;br /&gt;
&lt;br /&gt;
=== Aktivierung ===&lt;br /&gt;
Nach der erfolgreichen Konfiguration des FHEM Moduls und der Automagic App können nun die Flows auf dem Gerät aktiviert werden.&lt;br /&gt;
&lt;br /&gt;
Sofern die Geräteinstanz korrekt angelegt wurde und die fhemServerIP in der CommBridge gesetzt wurde, sollten nach spätestens 15 Sekunden bereits die ersten Readings reinkommen. Nun wird alle 15 Sekunden probiert einen Status Request erfolgreich ab zu schließen. Wenn der Status sich über einen längeren Zeitraum nicht auf &amp;quot;activ&amp;quot; ändert, sollte man im Log nach eventuellen Fehlern suchen.&lt;br /&gt;
&lt;br /&gt;
Es gibt die Möglichkeit einer Abfrage des Status jeglicher Geräte in FHEM über das Androidgerät und Auswertung auf dem Androidgerät.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
Erstelle einen Flow mit einer HTTP Request Aktion mit folgendem Inhalt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
URL&lt;br /&gt;
http://{global_fhemip}:8090&lt;br /&gt;
&lt;br /&gt;
REQUEST METHODE&lt;br /&gt;
POST&lt;br /&gt;
&lt;br /&gt;
CONTENT TYP&lt;br /&gt;
Genereller Text&lt;br /&gt;
text/plain&lt;br /&gt;
&lt;br /&gt;
DATEN&lt;br /&gt;
(hier kommen die drei Werte für ein ReadingsVal Aufruf rein, getrennt durch Leerzeichen)&lt;br /&gt;
TempFeuchtSensorSchlafzimmer temperature 300&lt;br /&gt;
&lt;br /&gt;
(haken)Setze eigenen Header&lt;br /&gt;
FHEMDEVICE: {global_fhemdevice}&lt;br /&gt;
FHEMCMD: readingsval&lt;br /&gt;
&lt;br /&gt;
SPEICHERE ANTWORT ...&lt;br /&gt;
Variable&lt;br /&gt;
&lt;br /&gt;
VARIABLE&lt;br /&gt;
response&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Du erhältst dann den Rückgabewert in der Response-Variablen. Diesen kannst Du dann innerhalb Deines Flows weiter verarbeiten z.B. in einem Text für eine Ansage.&lt;br /&gt;
&lt;br /&gt;
==Readings==&lt;br /&gt;
* airplanemode - Status des Flugmodus&lt;br /&gt;
* androidVersion - aktuell installierte Androidversion&lt;br /&gt;
* automagicState - Statusmeldungen von der AutomagicApp &#039;&#039;&#039;(Voraussetzung Android &amp;gt;4.3). Wer ein Android &amp;gt;4.3 hat und im Reading steht &amp;quot;wird nicht unterstützt&amp;quot;, muß in den Androideinstellungen unter Ton und Benachrichtigungen -&amp;gt; Benachrichtigungszugriff ein Haken setzen für Automagic&#039;&#039;&#039;&lt;br /&gt;
* bluetooth on/off - ist auf dem Gerät Bluetooth an oder aus&lt;br /&gt;
* checkActiveTask - Zustand einer zuvor definierten APP. 0=nicht aktiv oder nicht aktiv im Vordergrund, 1=aktiv im Vordergrund, &#039;&#039;&#039;siehe Hinweis unten&#039;&#039;&#039;&lt;br /&gt;
* connectedBTdevices - eine Liste der verbundenen Gerät&lt;br /&gt;
* connectedBTdevicesMAC - eine Liste der MAC Adressen aller verbundender BT Geräte&lt;br /&gt;
* currentMusicAlbum - aktuell abgespieltes Musikalbum des verwendeten Mediaplayers&lt;br /&gt;
* currentMusicApp - aktuell verwendeter Mediaplayers&lt;br /&gt;
* currentMusicArtist - aktuell abgespielter Musikinterpret des verwendeten Mediaplayers&lt;br /&gt;
* currentMusicTrack - aktuell abgespielter Musiktitel des verwendeten Mediaplayers&lt;br /&gt;
* daydream - on/off Daydream gestartet oder nicht&lt;br /&gt;
* deviceState - Status des Androidgerätes / unknown, online, offline&lt;br /&gt;
* doNotDisturb - aktueller Status des nicht stören Modus&lt;br /&gt;
* dockingState - undocked/docked Status ob das Gerät in einer Dockinstation ist oder nicht.&lt;br /&gt;
* flow_SetCommands - active/inactive, gibt den Status des SetCommands Flow wieder&lt;br /&gt;
* flow_informations - active/inactive, gibt den Status des Informations Flow wieder&lt;br /&gt;
* flowsetVersionAtDevice - aktuell installiertes Flowset auf dem Device&lt;br /&gt;
* intentRadioName - zu letzt eingestellter Intent Radio Name&lt;br /&gt;
* intentRadioState - Status des IntentRadio Players&lt;br /&gt;
* keyguardSet - 0/1 Displaysperre gesetzt 0=nein 1=ja, bedeutet nicht das sie gerade aktiv ist&lt;br /&gt;
* lastSetCommandError - letzte Fehlermeldung vom set Befehl&lt;br /&gt;
* lastSetCommandState - letzter Status vom set Befehl, Befehl erfolgreich/nicht erfolgreich gesendet&lt;br /&gt;
* lastStatusRequestError - letzte Fehlermeldung vom statusRequest Befehl&lt;br /&gt;
* lastStatusRequestState - letzter Status vom statusRequest Befehl, Befehl erfolgreich/nicht erfolgreich gesendet&lt;br /&gt;
* nextAlarmDay - aktiver Alarmtag&lt;br /&gt;
* nextAlarmState - aktueller Status des Androidinternen Weckers&lt;br /&gt;
* nextAlarmTime - aktive Alarmzeit&lt;br /&gt;
* powerLevel - Status der Batterie in %&lt;br /&gt;
* powerPlugged - Netzteil angeschlossen? 0=NEIN, 1|2=JA&lt;br /&gt;
* screen - on locked/unlocked, off locked/unlocked zeigt an ob der Bildschirm an oder aus ist und gleichzeitig gesperrt oder nicht gesperrt&lt;br /&gt;
* screenBrightness - Bildschirmhelligkeit von 0-255&lt;br /&gt;
* screenFullscreen - Vollbildmodus (On,Off)&lt;br /&gt;
* screenOrientation - (Landscape,Portrait) Bildschirmausrichtung&lt;br /&gt;
* screenOrientationMode - (auto, manual) Modus für die Ausrichtung&lt;br /&gt;
* state - aktueller Status des Devices&lt;br /&gt;
* volume - Media Lautstärkewert&lt;br /&gt;
* volumeNotification - Benachrichtigungs Lautstärke&lt;br /&gt;
&lt;br /&gt;
Beim Reading checkActivTask muß zuvor der Packagename der zu prüfenden App als Attribut checkActiveTask angegeben werden. Beispiel: attr Nexus10Wohnzimmer checkActiveTask com.android.chrome für den Chrome Browser. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Befehle==&lt;br /&gt;
&lt;br /&gt;
===Set===&lt;br /&gt;
* activateVoiceInput - schaltet die Spracheingabe ein&lt;br /&gt;
* bluetooth - Schaltet Bluetooth on/off&lt;br /&gt;
* clearNotificationBar - (All,Automagic) löscht alle Meldungen oder nur die Automagic Meldungen in der Statusleiste&lt;br /&gt;
* currentFlowsetUpdate - fürt ein Flowset Update auf dem Device aus&lt;br /&gt;
* deviceState - setzt den Device Status Online/Offline. Siehe Readings&lt;br /&gt;
* installFlowSource - installiert einen Flow auf dem Device, das XML File muss unter /tmp/ liegen und die Endung xml haben. &#039;&#039;&#039;Bsp:&#039;&#039;&#039; set TabletWohnzimmer installFlowSource WlanUebwerwachen.xml&lt;br /&gt;
* doNotDisturb - schaltet den nicht stören Modus, always immer Stören, never niemals stören, alarmClockOnly nur Wecker darf stören, onlyImportant nur wichtige Störungen&lt;br /&gt;
* mediaPlayer - steuert den Standard Mediaplayer. play, stop, Titel zürück, Titel vor.&lt;br /&gt;
* nextAlarmTime - setzt die Alarmzeit. Geht aber nur innerhalb der nächsten 24Std.&lt;br /&gt;
* notifySndFile - spielt die angegebende Mediadatei auf dem Androidgerät ab. &#039;&#039;&#039;Die aufzurufende Mediadatei muß sich im Ordner /storage/emulated/0/Notifications/ befinden.&#039;&#039;&#039;&lt;br /&gt;
* screenBrightness - setzt die Bildschirmhelligkeit, von 0-255.&lt;br /&gt;
* screenMsg - versendet eine Bildschirmnachricht&lt;br /&gt;
* sendintent - sendet einen Intentstring Bsp: set $AMADDEVICE sendIntent org.smblott.intentradio.PLAY url http://stream.klassikradio.de/live/mp3-192/stream.klassikradio.de/play.m3u name Klassikradio, der erste Befehl ist die Aktion un der zweite das Extra. Es können immer zwei Extras mitgegeben werden.&lt;br /&gt;
* statusRequest - Fordert einen neuen Statusreport beim Device an. Es können nicht von allen Readings per statusRequest die Daten geholt werden. Einige wenige geben nur bei Statusänderung ihren Status wieder.&lt;br /&gt;
* timer - setzt einen Timer innerhalb der als Standard definierten ClockAPP auf dem Device. Es können nur Sekunden angegeben werden.&lt;br /&gt;
* ttsMsg - versendet eine Nachricht welche als Sprachnachricht ausgegeben wird&lt;br /&gt;
* vibrate - lässt das Androidgerät vibrieren&lt;br /&gt;
* volume - setzt die Medialautstärke. Entweder die internen Lautsprecher oder sofern angeschlossen die Bluetoothlautsprecher und per Klinkenstecker angeschlossenen Lautsprecher, + oder - vor dem Wert reduziert die aktuelle Lautst&amp;amp;auml;rke um den Wert&lt;br /&gt;
* volumeNotification - setzt die Benachrichtigungslautstärke.&lt;br /&gt;
&lt;br /&gt;
===Set abhängig von gesetzten Attributen===&lt;br /&gt;
* changetoBtDevice - wechselt zu einem anderen Bluetooth Gerät. &#039;&#039;&#039;Attribut setBluetoothDevice muß gesetzt sein. Siehe Hinweis unten!&#039;&#039;&#039;&lt;br /&gt;
* openApp - öffnet eine ausgewählte App. &#039;&#039;&#039;Attribut setOpenApp&#039;&#039;&#039;&lt;br /&gt;
* openURL - öffnet eine URL im Standardbrowser, sofern kein anderer Browser über das Attribut setOpenUrlBrowser ausgewählt wurde. &#039;&#039;&#039;Bsp:&#039;&#039;&#039; &#039;&#039;attr Tablet setOpenUrlBrowser de.ozerov.fully|de.ozerov.fully.MainActivity&#039;&#039;, das erste ist der Package Name und das zweite der Class Name&lt;br /&gt;
* screen - on/off/lock/unlock schaltet den Bildschirm ein/aus oder sperrt/entsperrt ihn, in den Automagic Einstellungen muss &amp;quot;Admin Funktion&amp;quot; gesetzt werden sonst funktioniert &amp;quot;Screen off&amp;quot; nicht. &#039;&#039;&#039;Attribut setScreenOnForTimer&#039;&#039;&#039; ändert die Zeit wie lange das Display an bleiben soll!&lt;br /&gt;
* screenFullscreen - Schaltet den Vollbildmodus on/off. &#039;&#039;&#039;Attribut setFullscreen&#039;&#039;&#039;&lt;br /&gt;
* screenLock - Sperrt den Bildschirm mit Pinabfrage. &#039;&#039;&#039;Attribut setScreenlockPIN&#039;&#039;&#039; - hier die Pin dafür eingeben. Erlaubt sind nur Zahlen. Es müßen mindestens 4 bis max 16 Zeichen sein.&lt;br /&gt;
* screenOrientation - Schaltet die Bildschirmausrichtung Auto/Landscape/Portait. &#039;&#039;&#039;Attribut setScreenOrientation&#039;&#039;&#039;&lt;br /&gt;
* setAPSSID - setzt die Acces Point SSID um WLAN Sleeps zu verhindern&#039;&#039;&#039;&lt;br /&gt;
* setTtsMsgSpeed - setzt die Sprachgeschwindigkeit bei der Sprachausgabe &#039;&#039;&#039;(Werte zwischen 0.5 bis 4.0 in 0.5er Schritten) default ist 1.0&#039;&#039;&#039;&lt;br /&gt;
* setTtsMsgLang - setzt die Sprache der Sprachausgabe, (de-Deutsch - en Englisch) default ist de&#039;&#039;&#039;&lt;br /&gt;
* system - setzt Systembefehle ab (nur bei gerootetet Geräen). reboot,shutdown,airplanemodeON (kann nur aktiviert werden) &#039;&#039;&#039;Attribut root&#039;&#039;&#039;, in den Automagic Einstellungen muss &amp;quot;Root Funktion&amp;quot; gesetzt werden&lt;br /&gt;
* setNotifySndFilePath - setzt den korrekten Systempfad zur Notifydatei &#039;&#039;&#039;(default ist /storage/emulated/0/Notifications/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Um openApp verwenden zu können, muss als Attribut der Package Name der App angegeben werden.&lt;br /&gt;
&lt;br /&gt;
Um zwischen Bluetoothgeräten wechseln zu können, muß das Attribut setBluetoothDevice mit folgender Syntax gesetzt werden. &#039;&#039;attr &amp;lt;DEVICE&amp;gt; BTdeviceName1|MAC,BTDeviceName2|MAC&#039;&#039; Es muss zwingend darauf geachtet werden das beim BTdeviceName kein Leerzeichen vorhanden ist. Am besten zusammen oder mit Unterstrich. Achtet bei der MAC darauf das Ihr wirklich nach jeder zweiten Zahl auch einen : drin habt &#039;&#039;&#039;Beispiel:&#039;&#039;&#039; &#039;&#039;attr Nexus10Wohnzimmer setBluetoothDevice Logitech_BT_Adapter|AB:12:CD:34:EF:32,Anker_A3565|GH:56:IJ:78:KL:76&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==STATE==&lt;br /&gt;
* initialized - Ist der Status kurz nach einem define..&lt;br /&gt;
* active - die Geräteinstanz ist im aktiven Status.&lt;br /&gt;
* disabled - die Geräteinstanz wurde über das Attribut disable deaktiviert&lt;br /&gt;
&lt;br /&gt;
==deviceState==&lt;br /&gt;
* online - Das Gerät ist online und kann set Befehle entgegennehmen.&lt;br /&gt;
* offline - Ein Gerät wird in den folgenden 3 Szenarien in den Status offline gesetzt:&lt;br /&gt;
** Das Gerät wird mittels shutdown über FHEM runtergefahren. &lt;br /&gt;
** Der Airplainmod (Flugmodus) wird über FHEM aktiviert. &lt;br /&gt;
** Es wurde mehr als 5 mal ein statusRequest erfolglos und mehr als 3 mal ein set Command erfolglos abgeschickt.&lt;br /&gt;
Es bleibt also dem User überlassen das Gerät nach erneuter Verfügbarkeit wieder in den Status online zu setzen. Das kann z.B. über das Presence Modul erzeugt werden (set DEVICE deviceState online)&lt;br /&gt;
&lt;br /&gt;
==Anwendungsbeispiele==&lt;br /&gt;
=== Lademanagement ===&lt;br /&gt;
Ich habe die Ladegeräte für meine Androidgeräte an Funkschaltsteckdosen. ein DOIF schaltet bei unter 30% die Steckdose ein und bei über 90% wieder aus.&lt;br /&gt;
&lt;br /&gt;
Hier mal ein einfaches DOIF Beispiel für ein Lademanagment&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
... DOIF ([Nexus5Handy:powerLevel] &amp;lt; 30) (set LadenetzteilNexus5Handy:FILTER=STATE=off on) DOELSEIF ([Nexus5Handy:powerLevel] &amp;gt; 90) (set LadenetzteilNexus5Handy:FILTER=STATE=on off) DOELSE&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Wecker ===&lt;br /&gt;
Morgens lasse ich mich über mein Tablet im Schlafzimmer mit Musik wecken. Verwendet wird hierzu der wakeuptimer des RESIDENTS Modules. Das abspielen stoppe ich dann von Hand. Danach erfolgt noch eine Ansage wie das Wetter gerade ist und wird.&lt;br /&gt;
&lt;br /&gt;
=== Mediacenter ===&lt;br /&gt;
Mein 10&amp;quot; Tablet im Wohnzimmer ist Mediaplayer für das Wohnzimmer mit Bluetoothlautsprechern. Die Lautstärke wird automatisch runter gesetzt wenn die Fritzbox einen Anruf auf das Wohnzimmer Handgerät signalisiert.&lt;br /&gt;
&lt;br /&gt;
=== Sprachbefehl - Abfragen von Zuständen diverser Sensoren ===&lt;br /&gt;
Wenn ich die Spracheingabe aktiviere und nach der Temperatur im Wohnzimmer frage, bekomme ich diese angesagt.&lt;br /&gt;
&lt;br /&gt;
Der Teil im Feld Daten ist ein klassisches RadingsVal, halt nur ohne Komma und ohne Anführungszeichen&lt;br /&gt;
&lt;br /&gt;
WIRD GERADE ÜBERARBEITET&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Schaltbefehle vom Androidgerät an FHEM senden ===&lt;br /&gt;
Hierfür richte bitte einen eigen Flow ein. Wie das genau geht, verrät Dir die Hilfe.&lt;br /&gt;
Um einen Schaltbefehl für FHEM zu erstellen, folgt nach dem Trigger eine Aktion als Script (Aktion Type: Script). Hier trägst Du folgendes ein&lt;br /&gt;
&lt;br /&gt;
setcmd = &amp;quot;LichtWohnzimmerLampeRechts on&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fhemcmd = &amp;quot;set&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In der ersten Zeile wird also der Schaltbefehl in der Variablem setcmd eingetragen und in der zweiten Zeile der FHEM Befehl in der Variablen fhemcmd.&lt;br /&gt;
&lt;br /&gt;
Danach müsst Ihr nur noch in einer weiteren Aktion den Flow &amp;quot;Send Data to AMADCommBridge&amp;quot; ausführen (Aktion Type: Flows ausführen). Die Aktion sollte bereits in Eurer Liste Vorhanden sein.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Screenshot_20160717-134948.png|200px]]&lt;br /&gt;
[[Datei:Screenshot 17.07.2016 1-50-27.png|200px]]&lt;br /&gt;
&lt;br /&gt;
Nun sollte Lampe1 angeschalten werden wenn der Flow ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bekannte Meldungen/Hinweise/Probleme ==&lt;br /&gt;
&amp;lt;code&amp;gt;PERL WARNING: Use of uninitialized value in hash element at /opt/fhem/FHEM/74_AMAD.pm line 14X&amp;lt;/code&amp;gt;&lt;br /&gt;
Ist ab Version 2.2.2 gefixt. {{Link2Forum|Topic=54433|LinkText=Dickes Danke an Andy(gandy)}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn auf dem Android-Gerät die Fehlermeldung &#039;Accessibility service not running&#039; von Automagic kommt, oder im FHEM das reading state  &#039;Flow Informations mit Fehler beendet&#039; steht, dann muss der Accessibility Service auf dem Android-Device aktiviert werden: Einstellungen --&amp;gt; Bedienungshilfen --&amp;gt; Automagic Premium. Hier muss der Schalter auf &#039;an&#039; stehen. Sollte dies der Fall sein, hilft u.U. ein kurzes Aus- und wieder Einschalten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Gerät wird oft als offline angezeigt und es können keine set Befehle abgesetzt werden.&lt;br /&gt;
Mit der AMAD Version 2.2 hielt eine neue Behandlung des deviceState Readings Einzug. Das Reading stellt nun den tatsächlichen Status des Gerätes gegenüber FHEM da. Bei vielen Android 6 Geräten kommt es aber auf Grund vom DeepSleep Modus zum wegfall der WLAN Verbindung. Hier hilft die neue KeepAlive Funktion in AMAD. Dafür muß lediglich unter &lt;br /&gt;
* Einstellungen --&amp;gt; Akku --&amp;gt; oben auf die drei Punkte - Akku Leistungsoptimierung --&amp;gt; alle Apps und dann Automagic auswählen und &amp;quot;Nicht optimieren&amp;quot;&lt;br /&gt;
ausgewählt werden. Alles andere macht das Modul selbst.&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HOMBOT&amp;diff=21606</id>
		<title>HOMBOT</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HOMBOT&amp;diff=21606"/>
		<updated>2017-05-26T09:28:16Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuern von LG Hombot Staubsaugerrobotern und Anzeige von Status Informationen&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Sonstige Systeme&lt;br /&gt;
|ModTechName=74_HOMBOT.pm&lt;br /&gt;
|ModOwner=CoolTux &amp;lt;br /&amp;gt;({{Link2Forum|Topic=44923|LinkText=Forum}} / [[Benutzer:CoolTux|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Dieses Modul gibt Euch die Möglichkeit Euren Hombot [http://www.roboter-forum.com/showthread.php?10009-LG-Hombot-3-0-WLAN-amp-Kamera-Steuerung-per-Weboberfl%E4che nach erfolgreichen Hack] in FHEM ein zu binden. Voraussetzung ist das Ihr den Hombot Hack gemacht und einen WLAN Stick eingebaut habt. Als Schnittstelle zwischen FHEM und Bot wird der Luigi HTTP Server verwendet. Was genau könnt Ihr nun mit dem Modul machen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Features / Funktionen ==&lt;br /&gt;
* Readings über den Status des Hombots werden angelegt&lt;br /&gt;
* Auswahl des Reinigungsmodus ist möglich&lt;br /&gt;
* Starten der Reinigung&lt;br /&gt;
* Beenden der Reinigung&lt;br /&gt;
* zurück zur Homebase schicken&lt;br /&gt;
* Namen vergeben&lt;br /&gt;
* Wochenprogramm einstellen&lt;br /&gt;
* Repeat und Turbo aktivieren&lt;br /&gt;
* Kamerabild&lt;br /&gt;
&lt;br /&gt;
== !!! Voraussetzungen schaffen !!! ==&lt;br /&gt;
Ihr benötigt zum verwenden des Modules die Programme &#039;&#039;&#039;ssh&#039;&#039;&#039; und &#039;&#039;&#039;sshpass&#039;&#039;&#039;. Desweiteren muß im Homeverzeichnis des fhem Users das Verzeichniss .ssh existieren und darin die Datei &#039;&#039;&#039;known_hosts&#039;&#039;&#039;. Diese sollte eine Passphrass des Bots beinhalten. Am besten Ihr macht als normaler User eine ssh Session zum Bot und kopiert danach die known_hosts Eures normalen Users in das .ssh Verzeichnis des fhem Users. Rechte anpassen nicht vergessen.&lt;br /&gt;
&lt;br /&gt;
== Definition ==&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; HOMBOT &amp;lt;IP-ADRESSE&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define Roberta HOMBOT 192.168.0.23&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese Anweisung erstellt ein neues HOMBOT-Device im Raum HOMBOT. Der Parameter &amp;lt;IP-ADRESSE&amp;gt; legt die IP Adresse des LG Hombot fest.&lt;br /&gt;
Das Standard Abfrageinterval ist 180 Sekunden und kann über das Attribut intervall geändert werden. Das Interval ist in Abhängigkeit des Arbeitsstatus dynamisch. Im Status WORKING beträgt es z.B. 30 Sekunden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== readings ==&lt;br /&gt;
* at_* - Reading für das Wochenprogramm. Startzeit für den jeweiligen Tag&lt;br /&gt;
* batteryPercent - Status der Batterie in %&lt;br /&gt;
* cleanMode - aktuell eingestellter Reinigungsmodus&lt;br /&gt;
* cpu_* - Informationen über die Prozessorauslastung&lt;br /&gt;
* currentBumping - Anzahl der Zusammenstöße mit Hindernissen&lt;br /&gt;
* firmware - aktuell installierte Firmwareversion&lt;br /&gt;
* hombotState - Status des Hombots&lt;br /&gt;
* lastClean - Datum und Uhrzeit der letzten Reinigung&lt;br /&gt;
* lastSetCommandError - letzte Fehlermeldung vom set Befehl&lt;br /&gt;
* lastSetCommandState - letzter Status vom set Befehl, Befehl erfolgreich/nicht erfolgreich gesendet&lt;br /&gt;
* lastStatusRequestError - letzte Fehlermeldung vom statusRequest Befehl&lt;br /&gt;
* lastStatusRequestState - letzter Status vom statusRequest Befehl, Befehl erfolgreich/nicht erfolgreich gesendet&lt;br /&gt;
* luigiSrvVersion - Version des Luigi HTTP Servers auf dem Hombot&lt;br /&gt;
* nickname - Name des Hombot&lt;br /&gt;
* num* - Bisher begonnene und beendete Reinigungen im entsprechenden Modus&lt;br /&gt;
* repeat - Reinigung wird wiederholt Ja/Nein&lt;br /&gt;
* state - Modulstatus&lt;br /&gt;
* turbo - Turbo aktiv Ja/Nein&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Befehle ==&lt;br /&gt;
&lt;br /&gt;
=== set ===&lt;br /&gt;
* cleanMode - setzen des Reinigungsmodus (ZZ-ZickZack / SB-Cell by Cell / SPOT-Spiralreinigung&lt;br /&gt;
* cleanStart - Reinigung starten&lt;br /&gt;
* homing - Beendet die Reinigung und lässt die Bot zurück zur Bases kommen&lt;br /&gt;
* nickname - setzt des Bot-Namens. Wird im Reading erst nach einem neustart des Luigiservers oder des Bots sichtbar&lt;br /&gt;
* pause - lässt den Reinigungsproßess pausieren&lt;br /&gt;
* repeat - Reinigung wiederholen? (true/false)&lt;br /&gt;
* schedule - setzen des Wochenprogrammes Bsp. set Roberta schedule Mo=13:30 Di= Mi=14:00,ZZ Do=15:20 Fr= Sa=11:20 So= Man kann also auch den Modus mitgeben!&lt;br /&gt;
* statusRequest - Fordert einen neuen Statusreport beim Device an&lt;br /&gt;
* turbo - aktivieren des Turbomodus (true/false)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== STATE ==&lt;br /&gt;
* initialized - Ist der Status kurz nach einem define..&lt;br /&gt;
* active - die Geräteinstanz ist im aktiven Status.&lt;br /&gt;
* disabled - die Geräteinstanz wurde über das Attribut disable deaktiviert&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
Keine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Kameraunterstützung experimentell==&lt;br /&gt;
Die Unterstützung für die Kamera ist Momentan noch experimentell und ausserhalb des Modules. Es ist nicht davon aus zu gehen das die Kameraunterstützung Einzug  ins Modul hält. Grund hiefür ist unter anderem das es bereits Module für Kamerasupport gibt und möglichst nichts doppelt programmiert werden soll. Daher sollte der Wunsch dahin gehen das IPCam Modul so fit zu machen das es den Bot unterstützt.&lt;br /&gt;
&lt;br /&gt;
[http://www.roboter-forum.com/showthread.php?6415-Hom-Bot-3-0-Hacking&amp;amp;p=138428&amp;amp;viewfull=1#post138428 Ab Version v2.34 des Hombot Hacking Packetes ist der Kamera Support integriert.]&lt;br /&gt;
&lt;br /&gt;
=== Einbindung ins TabletUI ===&lt;br /&gt;
Damit wir über unser TabletUI das Kamerabild sehen können müssen wir zu erst das im Zipfile befindliche hombotCam.js ist js Verzeichnis von unserer TabletUI kopieren, danach öffnet Ihr das File und passt die IP in der Zeile&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
yuvUrl = &#039;http://192.168.240.249:6260/images/snapshot.yuv&#039;,&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
entsprechend der Bot IP Eures Bot&#039;s an.&lt;br /&gt;
&lt;br /&gt;
Nun muß lediglich das html File in das entsprechende Verzeichnis bei Euch wo auch die anderen Tablet html Dateien liegen. In dieser html Datei sind lediglich ein paar Anpassungen gemacht worden.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
..head&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
..script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;/fhem/tablet/js/hombotCam.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
../head&amp;gt;&lt;br /&gt;
..body onload=&amp;quot;drawSnapshot()&amp;quot; &amp;gt;&lt;br /&gt;
...&lt;br /&gt;
...data-type=&amp;quot;label&amp;quot; class=&amp;quot;darker&amp;quot;&amp;gt;Roberta Livecam Stream&amp;lt;/div&amp;gt;&lt;br /&gt;
..div id=&amp;quot;cam&amp;quot;&amp;gt;&amp;lt;canvas id=&amp;quot;cam_canvas&amp;quot; width=&amp;quot;320&amp;quot; height=&amp;quot;240&amp;quot;&amp;gt;&amp;lt;/canvas&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier musste etwas geschummelt werde, da man wohl kein HTML Code ins Wiki bekommt.&lt;br /&gt;
&lt;br /&gt;
Fertig das wares, nun sollte auf Euer TabletUI Oberfläche das Kamerabild zu sehen sein.&lt;br /&gt;
&lt;br /&gt;
Link zum [https://drive.google.com/file/d/0B9QFkuMrbcG_VkQ5aW84UGo0Uk0/view?usp=sharing ZipFile]&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=LGTV_WebOS&amp;diff=21179</id>
		<title>LGTV WebOS</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=LGTV_WebOS&amp;diff=21179"/>
		<updated>2017-04-04T12:34:11Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right&amp;quot;&amp;gt;&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuern und Abfragen eines LGTV Gerätes mit WebOS&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=LGTV_WebOS&lt;br /&gt;
|ModForumArea=Multimedia&lt;br /&gt;
|ModTechName=82_LGTV_WebOS.pm&lt;br /&gt;
|ModOwner=CoolTux &amp;lt;br /&amp;gt;({{Link2FU|13684|Forum}} / [[Benutzer:CoolTux|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==LGTV_WebOS==&lt;br /&gt;
&lt;br /&gt;
Dieses Modul steuert SmartTV&#039;s des Herstellers LG mit dem Betriebssystem WebOS über die Netzwerkschnittstelle. Es bietet die Möglichkeit den aktuellen TV Kanal zu steuern, sowie Apps zu starten, Fernbedienungsbefehle zu senden, sowie den aktuellen Status abzufragen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Definition===&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; LGTV_WebOS &amp;lt;IP-Addresse&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei der Definition eines LGTV_WebOS-Moduls wird eine interne Routine in Gang gesetzt, welche regelmäßig alle 15s den Status des TV abfragt und entsprechende Notify-/FileLog-Definitionen triggert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define TV LGTV_WebOS 192.168.0.10&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Readings===&lt;br /&gt;
* 3D - Status des 3D-Wiedergabemodus (&amp;quot;on&amp;quot; =&amp;gt; 3D Wiedergabemodus aktiv, &amp;quot;off&amp;quot; =&amp;gt; 3D Wiedergabemodus nicht aktiv)&lt;br /&gt;
* 3DMode - Anzeigemodus (2d, 2dto3d, side_side_half, line_interleave_half, column_interleave, check_board)&lt;br /&gt;
* channel - Die Nummer des aktuellen TV-Kanals&lt;br /&gt;
* channelName - Der Name des aktuellen TV-Kanals&lt;br /&gt;
* channelMedia - Senderinformation&lt;br /&gt;
* channelCurrentEndTime - Ende der laufenden Sendung (Beta)&lt;br /&gt;
* channelCurrentStartTime - Start der laufenden Sendung (Beta)&lt;br /&gt;
* channelCurrentTitle - Der Name der laufenden Sendung (Beta)&lt;br /&gt;
* channelNextEndTime - Ende der nächsten Sendung (Beta)&lt;br /&gt;
* channelNextStartTime - Start der nächsten Sendung (Beta)&lt;br /&gt;
* channelNextTitle - Der Name der nächsten Sendung (Beta)&lt;br /&gt;
* extInput_&amp;lt;Geräteeingang&amp;gt; - Status der Eingangsquelle (connect_true, connect_false)&lt;br /&gt;
* input - Derzeit aktiver Geräteeingang&lt;br /&gt;
* lastResponse - Status der letzten Anfrage (ok, error &amp;lt;Fehlertext&amp;gt;)&lt;br /&gt;
* launchApp &amp;lt;Anwendung&amp;gt; - Gegenwärtige aktive Anwendung&lt;br /&gt;
* lgKey - Der Client-Key, der für die Verbindung verwendet wird&lt;br /&gt;
* mute on,off - Der aktuelle Stumm-Status (&amp;quot;on&amp;quot; =&amp;gt; Stumm, &amp;quot;off&amp;quot; =&amp;gt; Laut)&lt;br /&gt;
* pairing paired, unpaired - Der Status des Pairing&lt;br /&gt;
* presence absent, present - Der aktuelle Power-Status (&amp;quot;present&amp;quot; =&amp;gt; eingeschaltet, &amp;quot;absent&amp;quot; =&amp;gt; ausgeschaltet)&lt;br /&gt;
* state on, off - Status des Fernsehers (ähnlich presence)&lt;br /&gt;
* volume - Der aktuelle Lautstärkepegel -1, 0-100 (-1 invalider Wert)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Set===&lt;br /&gt;
* connect  -  Verbindet sich zum Fernseher unter der IP wie definiert, führt beim ersten mal automatisch ein pairing durch&lt;br /&gt;
* pairing  -   Berechtigungsanfrage an den Fernseher, hier muss die Anfrage mit der Fernbedienung bestätigt werden&lt;br /&gt;
* screenMsg &amp;lt;Text&amp;gt;  -   zeigt für ca 3-5s eine Nachricht auf dem Fernseher oben rechts an&lt;br /&gt;
* mute on, off  -  Schaltet den Fernseher Stumm, je nach Anschluss des Audiosignals, muss dieses am Verstärker (AV Receiver) geschehen (siehe Volume)&lt;br /&gt;
* volume 0-100, Schieberegler  -   Setzt die Lautstärke des Fernsehers, je nach Anschluss des Audiosignals, muss dieses am Verstärker (AV Receiver) geschehen (siehe mute)&lt;br /&gt;
* volumeUp  -   Erhöht die Lautstärke um den Wert 1&lt;br /&gt;
* volumeDown  -   Verringert die Lautstärke um den Wert 1&lt;br /&gt;
* channelUp   -   Schaltet auf den nächsten Kanal um&lt;br /&gt;
* channelDown   -   Schaltet auf den vorherigen Kanal um&lt;br /&gt;
* getServiceList  -  Fragt die laufenden Dienste des Fernsehers an (derzeit noch in Beta-Phase)&lt;br /&gt;
* on  -   Schaltet den Fernseher ein, wenn WLAN oder LAN ebenfalls im Aus-Zustand aktiv ist (siehe Bedienungsanleitung da Typabhängig)&lt;br /&gt;
* off - Schaltet den Fernseher aus, wenn eine Connection aktiv ist&lt;br /&gt;
* launchApp &amp;lt;Anwendung&amp;gt;  -   Aktiviert eine Anwendung aus der Liste (Maxdome, AmazonVideo, YouTube, Netflix, TV, GooglePlay, Browser, Chili, TVCast, Smartshare, Scheduler, Miracast, TV), !!!Achtung: TV ist hier eine Anwendung, und kein Geräteeingang!!!&lt;br /&gt;
* 3D on,off  -  3D Modus kann hier ein- und ausgeschaltet werden, je nach Fernseher können mehrere 3D Modi unterstützt werden (z.B. Side-by-Side, Top-Bottom)&lt;br /&gt;
* stop  -   Stop-Befehl (anwendungsabhängig)&lt;br /&gt;
* play  -   Play-Befehl (anwendungsabhängig)&lt;br /&gt;
* pause  -   Pause-Befehl (anwendungsabhängig)&lt;br /&gt;
* rewind  -   Zurückspulen-Befehl (anwendungsabhängig)&lt;br /&gt;
* fastForward  -   Schneller-Vorlauf-Befehl (anwendungsabhängig)&lt;br /&gt;
* clearInputList  -   Löscht die Liste der Geräteeingänge&lt;br /&gt;
* input  - Wählt den Geräteeingang aus (Abhängig von Typ und angeschossenen Geräten), Beispiele: extInput_AV-1, extInput_HDMI-1, extInput_HDMI-2, extInput_HDMI-3)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Attribute===&lt;br /&gt;
* disable - Optionales Attribut zur Deaktivierung des zyklischen Status-Updates. Ein manuelles Update via statusRequest-Befehl ist dennoch möglich. Mögliche Werte: 0 =&amp;gt; zyklische Status-Updates, 1 =&amp;gt; keine zyklischen Status-Updates.&lt;br /&gt;
* channelGuide - Optionales Attribut zur Deaktivierung der zyklischen Updates des TV-Guides, dieses beansprucht je nach Hardware einigen Netzwerkverkehr und Prozessorlast. Mögliche Werte: 0 =&amp;gt; keine zyklischen TV-Guide-Updates, 1 =&amp;gt; zyklische TV-Guide-Updates&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===bekannte Probleme===&lt;br /&gt;
Stellt man im TV in den Einstellungen die Funktion: Quick Start (schnelleres starten des TV`s mit höherem Energieverbrauch) ein, gibt es Probleme mit dem Modul bis hin zum vollen blockieren für 5-7 Minuten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Wenn dieser eingeschalten ist und der TV ausgeschalten wird, bleibt das LG-Modul für 5 weitere Minuten im state:on. Nach den 5min hängt sich fhem für ca- 5-10min komplett auf, dann läuft fhem wieder und im LG-Modul wird stare:off angezeigt&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=CsrfToken-HowTo&amp;diff=20966</id>
		<title>CsrfToken-HowTo</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=CsrfToken-HowTo&amp;diff=20966"/>
		<updated>2017-03-19T22:01:32Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:csrfToken-HowTo}}&lt;br /&gt;
FHEM hat mit der Version 5.8 eine Sicherheitsmaßnahme scharfgeschaltet, den csrfToken.&lt;br /&gt;
Dieser Token wird bei jedem Neustart von FHEM neu gebildet.&lt;br /&gt;
&lt;br /&gt;
Dieses Feature erhöht die Sicherheit, führt aber dazu, dass man nicht mehr mit einem einfachen http Link auf das [[FHEMWEB]] zugreifen kann.&lt;br /&gt;
&lt;br /&gt;
==Einzeiler==&lt;br /&gt;
&lt;br /&gt;
Was früher so ging:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;http://localhost:8083/fhem?cmd=set%20Office%20on&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
muss jetzt etwas ergänzt werden. Mit dem Einzeiler&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;curl -s -D - &#039;http://localhost:8083/fhem?XHR=1&#039; | awk &#039;/X-FHEM-csrfToken/{print $2}&#039;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
kann man den aktuellle csrfToken aus dem Header extrahieren und muss ihn nur noch an den Aufruf anhängen.&lt;br /&gt;
Erste Variante:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;curl --data-raw &amp;quot;fwcsrf=$(curl -s -D - &#039;http://localhost:8083/fhem?XHR=1&#039; | awk &#039;/X-FHEM-csrfToken/{print $2}&#039;)&amp;quot; http://localhost:8083/fhem?cmd=set%20Office%20on&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zweite Variante, in dieser wird cr+lf am Ende des ermittelten csrfTokens abgeschnitten:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;curl &amp;quot;http://fhem.example.org:8083/fhem?cmd=set%20Office%20on?XHR=1&amp;amp;fwcsrf=&amp;quot;`curl -s -D - &#039;http://fhem.example.org:8083/fhem?XHR=1&#039; | awk &#039;/X-FHEM-csrfToken/{print $2}&#039; | tr -d &amp;quot;\r\n&amp;quot;`&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Man kann auch in Scripten den token zunächst abspeichern:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;token=$(curl -s -D - &#039;http://localhost:8083/fhem?XHR=1&#039; | awk &#039;/X-FHEM-csrfToken/{print $2}&#039;)&lt;br /&gt;
 curl --data-raw &amp;quot;fwcsrf=$token&amp;quot; http://localhost:8083/fhem?cmd=set%20Office%20on&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==API Web==&lt;br /&gt;
Falls man ohne den Token arbeiten will, könnte man ein eigenes API Web erstellen und den Zugriff darauf beschränken. In vorhandenen Scripten / Applikationen müsste dann lediglich der Port geändert werden. &lt;br /&gt;
  &lt;br /&gt;
  define WEBapi FHEMWEB 8088 global&lt;br /&gt;
  attr WEBapi csrfToken none&lt;br /&gt;
  attr WEBapi allowFrom 192.168.178.83|127.0.0.1&lt;br /&gt;
&lt;br /&gt;
Im Forum ist ganz gut beschrieben wie man die Gestaltung des regEx für die IP Adresse machen kann -&amp;gt; Links&lt;br /&gt;
&lt;br /&gt;
==csrfToken festlegen==&lt;br /&gt;
Dies kann man tun, falls die dynamische Abfrage zur Laufzeit des Tokens nicht möglich ist. &lt;br /&gt;
&lt;br /&gt;
  attr WEB.* csrfToken &amp;lt;beliebige Folge aus Zeichen und Zahlen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit können feste URLs verwendet werden:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;http://localhost:8083/fhem?cmd=set%20Office%20on&amp;amp;fwcsrf=&amp;lt;fester token&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==csrfToken abschalten==&lt;br /&gt;
Dies sollte man als erste Hilfe tun, aber unbedingt darüber nachdenken wie man die Applikation umstellt.&lt;br /&gt;
&lt;br /&gt;
  attr WEB.* csrfToken none&lt;br /&gt;
&lt;br /&gt;
==Featurelevel==&lt;br /&gt;
Eine weitere temporäre Notfallmaßnahme wäre den Featurelevel nach dem Update einfach wieder zurückzudrehen&lt;br /&gt;
&lt;br /&gt;
  attr global featurelevel 5.7&lt;br /&gt;
&lt;br /&gt;
==Python==&lt;br /&gt;
Falls mal jemand aus python (hier für python 2.7) heraus fhem ansteuern möchte&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;import sys&lt;br /&gt;
import urllib2&lt;br /&gt;
import urllib&lt;br /&gt;
import ssl&lt;br /&gt;
import urlparse&lt;br /&gt;
BASEURL = &#039;https://user:password@server_ip:8083/fhem?&#039;&lt;br /&gt;
url = BASEURL + &#039;cmd=set+licht+on&#039;&lt;br /&gt;
def get_token(url):&lt;br /&gt;
    nurl = urlparse.urlsplit(url)&lt;br /&gt;
    username = nurl.username&lt;br /&gt;
    password = nurl.password&lt;br /&gt;
    url = url.replace(username + &#039;:&#039; + password + &#039;@&#039;, &#039;&#039;)&lt;br /&gt;
    url = url.replace(&amp;quot; &amp;quot;, &amp;quot;%20&amp;quot;)&lt;br /&gt;
    ssl._create_default_https_context = ssl._create_unverified_context&lt;br /&gt;
    p = urllib2.HTTPPasswordMgrWithDefaultRealm()&lt;br /&gt;
    p.add_password(None, url, username, password)&lt;br /&gt;
    handler = urllib2.HTTPBasicAuthHandler(p)&lt;br /&gt;
    opener = urllib2.build_opener(handler)&lt;br /&gt;
    urllib2.install_opener(opener)&lt;br /&gt;
    try:&lt;br /&gt;
        uu = urllib2.urlopen(&lt;br /&gt;
            url=url,&lt;br /&gt;
            data=None,&lt;br /&gt;
            timeout=10&lt;br /&gt;
        )&lt;br /&gt;
        token = uu.read()&lt;br /&gt;
        token = token[token.find(&#039;csrf_&#039;):]&lt;br /&gt;
        token = token[:token.find(&amp;quot;\&#039;&amp;quot;)]&lt;br /&gt;
        return token&lt;br /&gt;
    except urllib2.URLError, urllib2.URLError.reason:&lt;br /&gt;
        print(&#039;URLError: %s&#039; % urllib2.URLError.reason)&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
def fire_command(url):&lt;br /&gt;
    # type: (object) -&amp;gt; object&lt;br /&gt;
    if &amp;quot;@&amp;quot; in url:&lt;br /&gt;
        token = get_token(BASEURL)&lt;br /&gt;
        data = {&#039;fwcsrf&#039;: token}&lt;br /&gt;
        data = urllib.urlencode(data)&lt;br /&gt;
        nurl = urlparse.urlsplit(url)&lt;br /&gt;
        username = nurl.username&lt;br /&gt;
        password = nurl.password&lt;br /&gt;
        url = url.replace(username + &#039;:&#039; + password + &#039;@&#039;, &#039;&#039;)&lt;br /&gt;
        url = url.replace(&amp;quot; &amp;quot;, &amp;quot;%20&amp;quot;)&lt;br /&gt;
        ssl._create_default_https_context = ssl._create_unverified_context&lt;br /&gt;
        p = urllib2.HTTPPasswordMgrWithDefaultRealm()&lt;br /&gt;
        p.add_password(None, url, username, password)&lt;br /&gt;
        handler = urllib2.HTTPBasicAuthHandler(p)&lt;br /&gt;
        opener = urllib2.build_opener(handler)&lt;br /&gt;
        urllib2.install_opener(opener)&lt;br /&gt;
        try:&lt;br /&gt;
            urllib2.urlopen(&lt;br /&gt;
                url=url,&lt;br /&gt;
                data=data,&lt;br /&gt;
                timeout=10&lt;br /&gt;
            )&lt;br /&gt;
        except urllib2.URLError, urllib2.URLError.reason:&lt;br /&gt;
            print(&#039;URLError: %s&#039; % urllib2.URLError.reason)&lt;br /&gt;
            return False&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* https://forum.fhem.de/index.php?topic=23994.0&lt;br /&gt;
* [https://de.wikipedia.org/wiki/Cross-Site-Request-Forgery Wikipedia - Cross Site Request Forgery (csrf)]&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FHEMWEB&amp;diff=20556</id>
		<title>FHEMWEB</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FHEMWEB&amp;diff=20556"/>
		<updated>2017-03-06T13:43:41Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: /* Sicherheit */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Standard Fhem-Webfrontend&lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModForumArea=Frontends&lt;br /&gt;
|ModTechName=01_FHEMWEB.pm&lt;br /&gt;
|ModOwner=Rudolf König/rudolfkoenig ({{Link2FU|8|Forum}}/[[Benutzer Diskussion:Rudolfkoenig|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[FHEMWEB]] ist das Standard Webfrontend von Fhem, es implementiert auch einen einfachen Webserver (optional mit Basic-Auth und HTTPS). Aus historischen Gründen wird es auch als [[PGM2]] bezeichnet.&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
keine.&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
=== Define ===&lt;br /&gt;
siehe commandref.&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
siehe commandref.&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
=== devStateIcon ===&lt;br /&gt;
siehe [[devStateIcon]]&lt;br /&gt;
&lt;br /&gt;
=== sortby ===&lt;br /&gt;
* Beispiele zur Sortierung mit sortby: {{Link2Forum|Topic=11940|Message=70664}}, {{Link2Forum|Topic=26733|Message=197127}}&lt;br /&gt;
&lt;br /&gt;
=== title ===&lt;br /&gt;
* Titel der Seite. Überschreibt das globale Attribut &amp;quot;title&amp;quot;, das ansonsten für alle FHEMWEB Instanzen gilt&lt;br /&gt;
* Beispiel für einen dynamischen Seiten-Titel: {{Link2Forum|Topic=48668|Message=403260}}&lt;br /&gt;
&lt;br /&gt;
=== menuEntries ===&lt;br /&gt;
* [[Backup#Backup_manuell_ausf.C3.BChren_.28Weboberfl.C3.A4che.29|Backup-Befehl in FHEM-Menü einbinden]]&lt;br /&gt;
&lt;br /&gt;
=== webCmd ===&lt;br /&gt;
siehe [[webCmd]]&lt;br /&gt;
&lt;br /&gt;
=== widgetOverride ===&lt;br /&gt;
Mit dem Attribut &amp;lt;code&amp;gt;widgetOverride&amp;lt;/code&amp;gt; kann ein anderes als das vom Modulautor vorgegebene Bedienelement für einen Parameter (set/get/Attribut) festgelegt werden. Beispiele:&lt;br /&gt;
* [[WifiLight#Color-Picker_aktivieren|Color-Picker]]&lt;br /&gt;
* [[EnOcean-FUD61NPN-Funk-Universal-Dimmaktor#Anzeige_eines_alternativen_Bedienelementes|knob]]&lt;br /&gt;
* usuzu (= universelle Zeitschaltuhr): {{Link2Forum|Topic=32660}}&lt;br /&gt;
&lt;br /&gt;
== Sicherheit ==&lt;br /&gt;
=== CSRF Token ===&lt;br /&gt;
siehe [[srfToken-HowTo]]&lt;br /&gt;
&lt;br /&gt;
=== apiWeb Instanz ===&lt;br /&gt;
Die apiWeb Instanz dient dazu externe Zugriffe auf das FHEM System kontrolliert zu steuern.&lt;br /&gt;
Im Grunde wird nichts anderes gemacht wie eine zweite FHEM Webinstanz ein zu richten, welche dann gesondert abgesichert wird.&lt;br /&gt;
&lt;br /&gt;
Man legt sich hierfür eine FHEMWEB Instanz an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define apiWEB FHEMWEB 8088 global&lt;br /&gt;
attr apiWEB column Alarms: Apartment: Living: Bedroom: Kitchen: Sonos: Residents: Weather: Bathroom: Logs: Statistics: DashboardRoom: System: hidden: all:&lt;br /&gt;
attr apiWEB hiddenroom input,detail,save,Unsorted,Everything,CUL_HM,FS20,Commandref,style,Edit files,Select style,Logfile,Floorplans,Remote doc,FileLogs,Apartment,Bathroom,Bedroom,Kitchen,Living,Residents,System,Weather,Event monitor,NEW&lt;br /&gt;
attr apiWEB room hidden&lt;br /&gt;
attr apiWEB webname webhook&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese wird dann weiter mit Hilfe eines [http://fhem.de/commandref.html#allowed allowed]-Devices abgesichert, indem nur die tatsächlich benötigten Kommandos erlaubt werden und damit alle anderen nicht erlaubten (attr,define,get,set,...) automatisch nicht mehr zur Verfügung stehen: &lt;br /&gt;
 &amp;lt;pre&amp;gt;&lt;br /&gt;
define allowedApiWEB allowed&lt;br /&gt;
attr allowedApiWEB allowedCommands set&lt;br /&gt;
attr allowedApiWEB allowedDevices Lampe1&lt;br /&gt;
attr allowedApiWEB validFor apiWEB&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Desweiteren ist dringend an zu raten, den Zugriff über TLS/SSL und HTTP Basic-Authentication weiter abzusichern. Nähere Informationen findet man hierzu in der [http://fhem.de/commandref.html#FHEMWEB Commandref] unter dem Punkt HTTPS. Letztlich fehlt noch das entsprechende Attribut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr WEBhook HTTPS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als nächstes aktivieren wir Benutzername+Passwort für den Zugriff. Die commandref für allowed gibt auch hier unter dem Punkt basicAuth entsprechende Hinweise.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Begriffserklärung zur Unterscheidung von [[eventMap]], [[devStateIcon]], [[webCmd]] und [[setList]] mit Beispielen in diesem {{Link2Forum|Topic=12080|LinkText=Forenthread}}&lt;br /&gt;
* [[Icons]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Frontends]]&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FHEMWEB&amp;diff=20555</id>
		<title>FHEMWEB</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FHEMWEB&amp;diff=20555"/>
		<updated>2017-03-06T13:14:24Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Standard Fhem-Webfrontend&lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModForumArea=Frontends&lt;br /&gt;
|ModTechName=01_FHEMWEB.pm&lt;br /&gt;
|ModOwner=Rudolf König/rudolfkoenig ({{Link2FU|8|Forum}}/[[Benutzer Diskussion:Rudolfkoenig|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[FHEMWEB]] ist das Standard Webfrontend von Fhem, es implementiert auch einen einfachen Webserver (optional mit Basic-Auth und HTTPS). Aus historischen Gründen wird es auch als [[PGM2]] bezeichnet.&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
keine.&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
=== Define ===&lt;br /&gt;
siehe commandref.&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
siehe commandref.&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
=== devStateIcon ===&lt;br /&gt;
siehe [[devStateIcon]]&lt;br /&gt;
&lt;br /&gt;
=== sortby ===&lt;br /&gt;
* Beispiele zur Sortierung mit sortby: {{Link2Forum|Topic=11940|Message=70664}}, {{Link2Forum|Topic=26733|Message=197127}}&lt;br /&gt;
&lt;br /&gt;
=== title ===&lt;br /&gt;
* Titel der Seite. Überschreibt das globale Attribut &amp;quot;title&amp;quot;, das ansonsten für alle FHEMWEB Instanzen gilt&lt;br /&gt;
* Beispiel für einen dynamischen Seiten-Titel: {{Link2Forum|Topic=48668|Message=403260}}&lt;br /&gt;
&lt;br /&gt;
=== menuEntries ===&lt;br /&gt;
* [[Backup#Backup_manuell_ausf.C3.BChren_.28Weboberfl.C3.A4che.29|Backup-Befehl in FHEM-Menü einbinden]]&lt;br /&gt;
&lt;br /&gt;
=== webCmd ===&lt;br /&gt;
siehe [[webCmd]]&lt;br /&gt;
&lt;br /&gt;
=== widgetOverride ===&lt;br /&gt;
Mit dem Attribut &amp;lt;code&amp;gt;widgetOverride&amp;lt;/code&amp;gt; kann ein anderes als das vom Modulautor vorgegebene Bedienelement für einen Parameter (set/get/Attribut) festgelegt werden. Beispiele:&lt;br /&gt;
* [[WifiLight#Color-Picker_aktivieren|Color-Picker]]&lt;br /&gt;
* [[EnOcean-FUD61NPN-Funk-Universal-Dimmaktor#Anzeige_eines_alternativen_Bedienelementes|knob]]&lt;br /&gt;
* usuzu (= universelle Zeitschaltuhr): {{Link2Forum|Topic=32660}}&lt;br /&gt;
&lt;br /&gt;
== Sicherheit ==&lt;br /&gt;
=== CSRF Token ===&lt;br /&gt;
siehe [[srfToken-HowTo]]&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Begriffserklärung zur Unterscheidung von [[eventMap]], [[devStateIcon]], [[webCmd]] und [[setList]] mit Beispielen in diesem {{Link2Forum|Topic=12080|LinkText=Forenthread}}&lt;br /&gt;
* [[Icons]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Frontends]]&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=LGTV_WebOS&amp;diff=20362</id>
		<title>LGTV WebOS</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=LGTV_WebOS&amp;diff=20362"/>
		<updated>2017-02-28T09:53:01Z</updated>

		<summary type="html">&lt;p&gt;CoolTux: Die Seite wurde neu angelegt: „&amp;lt;div style=&amp;quot;float:right&amp;quot;&amp;gt; {{Infobox Modul |ModPurpose=Steuern und Abfragen eines LGTV Gerätes mit WebOS |ModType=d |ModCmdRef=LGTV_WebOS |ModForumArea=Multime…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right&amp;quot;&amp;gt;&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuern und Abfragen eines LGTV Gerätes mit WebOS&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=LGTV_WebOS&lt;br /&gt;
|ModForumArea=Multimedia&lt;br /&gt;
|ModTechName=82_LGTV_WebOS.pm&lt;br /&gt;
|ModOwner=CoolTux &amp;lt;br /&amp;gt;({{Link2FU|13684|Forum}} / [[Benutzer:CoolTux|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==LGTV_WebOS==&lt;br /&gt;
&lt;br /&gt;
Dieses Modul steuert SmartTV&#039;s des Herstellers LG mit dem Betriebssystem WebOS über die Netzwerkschnittstelle. Es bietet die Möglichkeit den aktuellen TV Kanal zu steuern, sowie Apps zu starten, Fernbedienungsbefehle zu senden, sowie den aktuellen Status abzufragen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Definition===&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; LGTV_WebOS &amp;lt;IP-Addresse&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei der Definition eines LGTV_WebOS-Moduls wird eine interne Routine in Gang gesetzt, welche regelmäßig alle 15s den Status des TV abfragt und entsprechende Notify-/FileLog-Definitionen triggert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define TV LGTV_WebOS 192.168.0.10&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Readings===&lt;br /&gt;
* 3D - Status des 3D-Wiedergabemodus (&amp;quot;on&amp;quot; =&amp;gt; 3D Wiedergabemodus aktiv, &amp;quot;off&amp;quot; =&amp;gt; 3D Wiedergabemodus nicht aktiv)&lt;br /&gt;
* 3DMode - Anzeigemodus (2d, 2dto3d, side_side_half, line_interleave_half, column_interleave, check_board)&lt;br /&gt;
* channel - Die Nummer des aktuellen TV-Kanals&lt;br /&gt;
* channelName - Der Name des aktuellen TV-Kanals&lt;br /&gt;
* channelMedia - Senderinformation&lt;br /&gt;
* channelCurrentEndTime - Ende der laufenden Sendung (Beta)&lt;br /&gt;
* channelCurrentStartTime - Start der laufenden Sendung (Beta)&lt;br /&gt;
* channelCurrentTitle - Der Name der laufenden Sendung (Beta)&lt;br /&gt;
* channelNextEndTime - Ende der nächsten Sendung (Beta)&lt;br /&gt;
* channelNextStartTime - Start der nächsten Sendung (Beta)&lt;br /&gt;
* channelNextTitle - Der Name der nächsten Sendung (Beta)&lt;br /&gt;
* extInput_&amp;lt;Geräteeingang&amp;gt; - Status der Eingangsquelle (connect_true, connect_false)&lt;br /&gt;
* input - Derzeit aktiver Geräteeingang&lt;br /&gt;
* lastResponse - Status der letzten Anfrage (ok, error &amp;lt;Fehlertext&amp;gt;)&lt;br /&gt;
* launchApp &amp;lt;Anwendung&amp;gt; - Gegenwärtige aktive Anwendung&lt;br /&gt;
* lgKey - Der Client-Key, der für die Verbindung verwendet wird&lt;br /&gt;
* mute on,off - Der aktuelle Stumm-Status (&amp;quot;on&amp;quot; =&amp;gt; Stumm, &amp;quot;off&amp;quot; =&amp;gt; Laut)&lt;br /&gt;
* pairing paired, unpaired - Der Status des Pairing&lt;br /&gt;
* presence absent, present - Der aktuelle Power-Status (&amp;quot;present&amp;quot; =&amp;gt; eingeschaltet, &amp;quot;absent&amp;quot; =&amp;gt; ausgeschaltet)&lt;br /&gt;
* state on, off - Status des Fernsehers (ähnlich presence)&lt;br /&gt;
* volume - Der aktuelle Lautstärkepegel -1, 0-100 (-1 invalider Wert)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Set===&lt;br /&gt;
* connect  -  Verbindet sich zum Fernseher unter der IP wie definiert, führt beim ersten mal automatisch ein pairing durch&lt;br /&gt;
* pairing  -   Berechtigungsanfrage an den Fernseher, hier muss die Anfrage mit der Fernbedienung bestätigt werden&lt;br /&gt;
* screenMsg &amp;lt;Text&amp;gt;  -   zeigt für ca 3-5s eine Nachricht auf dem Fernseher oben rechts an&lt;br /&gt;
* mute on, off  -  Schaltet den Fernseher Stumm, je nach Anschluss des Audiosignals, muss dieses am Verstärker (AV Receiver) geschehen (siehe Volume)&lt;br /&gt;
* volume 0-100, Schieberegler  -   Setzt die Lautstärke des Fernsehers, je nach Anschluss des Audiosignals, muss dieses am Verstärker (AV Receiver) geschehen (siehe mute)&lt;br /&gt;
* volumeUp  -   Erhöht die Lautstärke um den Wert 1&lt;br /&gt;
* volumeDown  -   Verringert die Lautstärke um den Wert 1&lt;br /&gt;
* channelUp   -   Schaltet auf den nächsten Kanal um&lt;br /&gt;
* channelDown   -   Schaltet auf den vorherigen Kanal um&lt;br /&gt;
* getServiceList  -  Fragt die laufenden Dienste des Fernsehers an (derzeit noch in Beta-Phase)&lt;br /&gt;
* on  -   Schaltet den Fernseher ein, wenn WLAN oder LAN ebenfalls im Aus-Zustand aktiv ist (siehe Bedienungsanleitung da Typabhängig)&lt;br /&gt;
* off - Schaltet den Fernseher aus, wenn eine Connection aktiv ist&lt;br /&gt;
* launchApp &amp;lt;Anwendung&amp;gt;  -   Aktiviert eine Anwendung aus der Liste (Maxdome, AmazonVideo, YouTube, Netflix, TV, GooglePlay, Browser, Chili, TVCast, Smartshare, Scheduler, Miracast, TV), !!!Achtung: TV ist hier eine Anwendung, und kein Geräteeingang!!!&lt;br /&gt;
* 3D on,off  -  3D Modus kann hier ein- und ausgeschaltet werden, je nach Fernseher können mehrere 3D Modi unterstützt werden (z.B. Side-by-Side, Top-Bottom)&lt;br /&gt;
* stop  -   Stop-Befehl (anwendungsabhängig)&lt;br /&gt;
* play  -   Play-Befehl (anwendungsabhängig)&lt;br /&gt;
* pause  -   Pause-Befehl (anwendungsabhängig)&lt;br /&gt;
* rewind  -   Zurückspulen-Befehl (anwendungsabhängig)&lt;br /&gt;
* fastForward  -   Schneller-Vorlauf-Befehl (anwendungsabhängig)&lt;br /&gt;
* clearInputList  -   Löscht die Liste der Geräteeingänge&lt;br /&gt;
* input  - Wählt den Geräteeingang aus (Abhängig von Typ und angeschossenen Geräten), Beispiele: extInput_AV-1, extInput_HDMI-1, extInput_HDMI-2, extInput_HDMI-3)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Attribute===&lt;br /&gt;
* disable - Optionales Attribut zur Deaktivierung des zyklischen Status-Updates. Ein manuelles Update via statusRequest-Befehl ist dennoch möglich. Mögliche Werte: 0 =&amp;gt; zyklische Status-Updates, 1 =&amp;gt; keine zyklischen Status-Updates.&lt;br /&gt;
* channelGuide - Optionales Attribut zur Deaktivierung der zyklischen Updates des TV-Guides, dieses beansprucht je nach Hardware einigen Netzwerkverkehr und Prozessorlast. Mögliche Werte: 0 =&amp;gt; keine zyklischen TV-Guide-Updates, 1 =&amp;gt; zyklische TV-Guide-Updates&lt;/div&gt;</summary>
		<author><name>CoolTux</name></author>
	</entry>
</feed>