<?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=Der-PW</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=Der-PW"/>
	<link rel="alternate" type="text/html" href="http://wiki.fhem.de/wiki/Spezial:Beitr%C3%A4ge/Der-PW"/>
	<updated>2026-05-03T20:58:12Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HomeMatic_Templates&amp;diff=28626</id>
		<title>HomeMatic Templates</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HomeMatic_Templates&amp;diff=28626"/>
		<updated>2018-12-04T16:07:35Z</updated>

		<summary type="html">&lt;p&gt;Der-PW: kleine Rechtschreibkorrekturen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=templates bedienen und verwalten&lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModCmdRef=HMtemplate&lt;br /&gt;
|ModForumArea=HomeMatic&lt;br /&gt;
|ModTechName=98_HMtemplate.pm&lt;br /&gt;
|ModOwner=martinp876 ({{Link2FU|251|martinp876}} / [[Benutzer Diskussion:Martinp876|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
Templates sind Vorlagen im Allgemeinen. Hier werden Vorlagen zur Programmierung der Register von HM Devices behandelt. &lt;br /&gt;
= Warum Templates =&lt;br /&gt;
Die Frage, warum man Register nicht einfach setzt sondern Templates nutzen sollte kommt immer wieder auf. Schliesslich sind wir alle Spezialisten...&lt;br /&gt;
Die Wahrheit allerdings bildet das nicht ab. Denn auch den Spezialisten sei angeraten, Templates zu nutzen. Ja, warum denn, was bieten Templates? Hierzu muss man verstehen wie FHEM, HM, Devices, Kanäle und peers zusammenhängen. &lt;br /&gt;
&lt;br /&gt;
Wie schon im Einsteigerdoc beschrieben hat ein HM Device remanente Register, welche von FHEM gesetzt werden können und die Funktions- und Arbeitsweise definieren. FHEM selbst hat bestenfalls eine Kopie dieser Daten.&lt;br /&gt;
;soll-Register Verwaltung&lt;br /&gt;
:Da FHEM nur eine Kopie der Registerwerte verwaltet lebt man erst einmal in einer fragilen Welt. Registerwerte können sich ändern durch:&lt;br /&gt;
* Reset des Device&lt;br /&gt;
* Batteriefehler&lt;br /&gt;
* inkorrektes Schreiben und Übertragungsfehler&lt;br /&gt;
* Austausch eines Device&lt;br /&gt;
:Nach Lesen der Device Register hat FHEM eine neue Kopie - dies muss aber nicht den Wunschregistern entsprechen. Templates sind eine Ansammlung von Wunschregister. Somit können unterschiedliche Mechanismen genutzt werden, das System zu verwalten, prüfen und korrigieren.&lt;br /&gt;
;Funktionen für Einsteiger&lt;br /&gt;
:Nicht-Experten sollten primär Templates nutzen - um Funktionen zu realisieren,  und wenn gewünscht, Experten zu werden. Templates kann man einfach austauschen und dann anwenden.&lt;br /&gt;
;Verwalten von Funktionen statt Registern&lt;br /&gt;
:Als Experten kann man sicher die Register zeilsicher setzen. Wirklich? Wenn man sich eine clevere Lösung ausgedacht hat und sie reproduzieren will kann man einfach noch einmal nachdenken, nachlesen, ... und schon hat man es wieder. Oder man hat ein Template definiert das man einfach nutzt.&lt;br /&gt;
; Lernen aus Templates&lt;br /&gt;
:Templates sind nicht verschlüsselt. Hat oder bekommt man ein Template kann man die dort gesetzten Register einfach einsehen - und wenn man will verstehen was gemacht wurde. &lt;br /&gt;
;Globales Anpassen aller Devices &lt;br /&gt;
: Hat man festgestellt, dass eine Funktion sub-optimal ist kann man das Template ändern und diese Änderungen allen Devices zu Gute kommen lassen. Auf einmal. &lt;br /&gt;
&lt;br /&gt;
= Grundsätzliches zum Template =&lt;br /&gt;
Templates (hier) ist nun also eine Sammlung von Registern welche in einem Device gesetzt werden können. &lt;br /&gt;
&lt;br /&gt;
== Template Granularität ==&lt;br /&gt;
Man kann nicht alle Register eines Device in einem Template abbilden. Das wäre technisch komplex und macht auch von der Anwendung her keinen Sinn. &lt;br /&gt;
&lt;br /&gt;
*Aus Sicht der Funktion sollte man Templates nach deren Funktionen zusammenfassen.&lt;br /&gt;
*Aus Sicht des Devices sollte man Templates nach der Struktur des Device zusammenstellen.&lt;br /&gt;
*Die Implementierung erlaubt es, Templates für jedes Register einzeln zu erstellen.&amp;lt;br&amp;gt;&lt;br /&gt;
*Weniger Templates erhöhen die Übersichtlichkeit&lt;br /&gt;
Die technische Lösung legt folgende Templates nahe:&lt;br /&gt;
#Alle Register eines Kanals oder Device - ausgenommen peer abhängige Register&lt;br /&gt;
#Alle Register eines Kanals eines Peers für short oder long&lt;br /&gt;
#Alle Register eines Kanals eines Peers nur für short&lt;br /&gt;
#Alle Register eines Kanals eines Peers nur für long&lt;br /&gt;
Ob man 2. oder die Kombination aus 3. und 4. nutzt ist Geschmackssache. &amp;lt;br&amp;gt;&lt;br /&gt;
Ein typischer Einsatz sind Schalter und Dimmer bei denen man die Aktionen der Peers festlegen will.&lt;br /&gt;
;usecase Template Granularität Dimmer&lt;br /&gt;
:Mit Peer1 soll bei short ein und bei long ausgeschaltet werden&lt;br /&gt;
:Mit Peer2 soll bei short getoggelt und bei long nicht geschaltet werden&lt;br /&gt;
:Mit Peer3 soll bei short nicht geschaltet und bei long getoggelt werden&lt;br /&gt;
:Mit Peer4 ist ein MotionDetector welcher bei short und einer bestimmten Helligkeit einschaltet, timed. Allerdings sollen Aktionen der anderen Peers oder der Zentrale das Licht dauer-ein schalten.&lt;br /&gt;
&lt;br /&gt;
== Template Flexibilität ==&lt;br /&gt;
Templates sind starr... und können parametriert werden. Also semistarr. Was jetzt? Nun man kann Templates mir bis zu 9 Parametern versehen. Sinnvoll sind wohl eher bis zu 3. &amp;lt;br&amp;gt;&lt;br /&gt;
Beispiele sind:&lt;br /&gt;
*Treppenhausschaltern - mit einem Parameter kann man Einschaltdauer je Instanziierung festlegen. Sinnvoll könnte eine Treppenhausschaltung generell sein, nicht nur im Treppenhaus. Man kann generell alle Lichter nach ein paar Stunden ausschalten.&lt;br /&gt;
*Heizungstemplate - Boosttime: Man kann allen RTs das gleiche Template geben - allerdings kann man z.B. die Boosttime indivituell einstellen. &lt;br /&gt;
*MotionDetector Clients: Bei den Peers des Motiondetector (also den Schaltern) stellt man ein, wann diese reagieren sollen und wie lange diese brennen sollen. &lt;br /&gt;
&lt;br /&gt;
== Template Verwaltung==&lt;br /&gt;
Templates werden zusammen mit Registern verwaltet. Man benötigt demnach HMinfo. Sowohl die Templatedefinition als auch die Templatezuweisung werden im File zusammen mit den gelesenen Registern gesichert. Nach einem Einlesen dieses Files werden auch die Templates und deren Zuordnung neu erstellt.&lt;br /&gt;
&lt;br /&gt;
== Template Editieren==&lt;br /&gt;
Die aktuell einfachste Möglichkeit ein Template zu modifizieren ist, HMtemplate zu nutzen. HMtemplate ist ein Editor. Für den Betrieb wird es nicht genutzt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Das eigenen Konzept=&lt;br /&gt;
Für die Verknüpfung von HM Entities muss man 2 Ebenen unterschieden, Architektur und Verhalten.&lt;br /&gt;
==Architektur==&lt;br /&gt;
Beim Erstellen der Architektur legt man fest, welche Entities untereinander verknüpft werden. Dies geschieht durch peeren. Templates unterstützen nicht die Architektur. Es ist demnach notwendig die Peerings durchzuführen bevor an ein Template darauf anwenden kann. &lt;br /&gt;
==Verhalten==&lt;br /&gt;
Hier kommen die Templates zum Tragen. Mit Templates definiert man die Register der Entities und somit das Verhalten und die Reaktion der Entites bspw auf Trigger von Sensoren.&lt;br /&gt;
===Welchen templateTyp brauche ich===&lt;br /&gt;
Wie in Granularität beschrieben kann man insbesondere beim Peerverhalten templates für &#039;&#039;short&#039;&#039;, &#039;&#039;long&#039;&#039; oder &#039;&#039;both&#039;&#039; ertellen. Nutzt man short/long braucht man weniger Templates (Basics sind on/off/ignore/toggle) muss allerdings mehr Templates zuweisen, als Reaktion auf short UND long.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei both braucht man mehr Templates (OnOff/OnIgnore/OffIgnore/IgnoreOff/ToggleIgnore/...) braucht aber nur die Hälfte der Zuweisungen zu den realen Entities. &lt;br /&gt;
&lt;br /&gt;
===Welche Parameter muss ich einstellen===&lt;br /&gt;
Bei der Erstellung eine Templates werden dessen Parameter durch Attribute vorgegeben. Durch &#039;&#039;&#039;set save&#039;&#039;&#039; wird dann das Template schlussendlich definiert. Folgende Parameter/Attribute werden genutzt:&lt;br /&gt;
*&#039;&#039;&#039;tpl_description&#039;&#039;&#039;: ist ein Freitext welcher beschreiben soll, was das Template macht und wie es parametriert wird&lt;br /&gt;
*&#039;&#039;&#039;tpl_params&#039;&#039;&#039;: hier werden evtl Parameter definiert mit welchen die Instanziierung des Templates angepasst werden kann. Bspw. könnte die Einschaltzeit variable gestalltet werden. Bei einem Dimmer könnt man den Level und die Rampe eingeben, also 2 Parameter. Man vergibt also, &amp;quot;:&amp;quot; getrennt, eine Liste von Paramtern. Die Namen sind frei wählbar. &amp;lt;br&amp;gt;&lt;br /&gt;
:&#039;&#039;timeOn:ramp&#039;&#039; würde 2 Parameter definieren, welche später in den Registern genutzt werden können&lt;br /&gt;
*&#039;&#039;&#039;tpl_type&#039;&#039;&#039;: definiert den Typ. Diesen muss man zuerst festlegen. Es konnte &#039;&#039;peer-Short&#039;&#039;,&#039;&#039;peer-Long&#039;&#039;,&#039;&#039;peer-Both&#039;&#039; oder &#039;&#039;basic&#039;&#039; sein. Nach der Auswahl des Typs kann man die Entity (source) wählen. Es alle Entities angeboten, welche entsprechende Registersätze zu Verfügung stellen.&lt;br /&gt;
*&#039;&#039;&#039;tpl_source&#039;&#039;&#039;: legt bei der Definition eines Templates fest, von welcher Entity die Register für die Vorlage genutzt werden sollen. Ein Browser-Refresh könnte notwendig sein um die Auswahlliste upzudaten&lt;br /&gt;
*&#039;&#039;&#039;tpl_peer&#039;&#039;&#039;: muss man auswählen, so man einen &amp;quot;peer&amp;quot; typ gewählt hat. An Browser-refresh denken. &lt;br /&gt;
*&#039;&#039;&#039;Reg_xxx&#039;&#039;&#039;: An Browser-refresh denken. Hat man nun die Vorlage ausgewählt und den Refresh gemach werden nun Register als Attribute angeboten. &amp;lt;br&amp;gt;&lt;br /&gt;
:Zunächst sollte man Registerattribute löschen, welche man für das Template nicht benötigt. Achtung: eine Option gelöschte Registerattribute wieder nachzutragen ist nicht vorgesehen. So schlimm ist es allerdings nicht - man muss halt noch einmal alle Lesen und von Vorne löschen. &amp;lt;br&amp;gt;&lt;br /&gt;
:Sinnvoll kann es sein, die Condition Table Register komplett zu eliminieren wenn man Reaktionen auf Taster definieren will. Will man &#039;&#039;ignore&#039;&#039; definieren, also keine Reaktion bspw auf &#039;&#039;long&#039;&#039;, dann kann man alles löschen bis auf ActionType usw. &amp;lt;br&amp;gt;&lt;br /&gt;
:Sinnvoll ist es, nur notwendige Register der Funktion zu bearbeiten, da sonst die Anwendung des Templates eingeschränkt wird. &amp;lt;br&amp;gt;&lt;br /&gt;
:Es sollten aber alle Register der Funktion enthalten sein, da die Prüfung auch nur diese berücksichtigt und bei einem Umprogrammieren nicht klar ist, was vorher in einem Register gestanden ist.&lt;br /&gt;
===Register Werte setzen===&lt;br /&gt;
Nun das eigentliche - das setzen der Registerinhalte. Dies wird begrenzt unterstützt. Sollte das Register durch &#039;&#039;literals&#039;&#039; definiert werden erscheint beim Setzen eine drop-down Liste mit den Optionen. &amp;lt;br&amp;gt;&lt;br /&gt;
Nicht unterstützt wird das Setzen von Werten. Es gibt aktuell keine Option, hier eine Hilfe einzublenden. Die Wertebereiche sind dem regList der Entity zu entnehmen. &amp;lt;br&amp;gt;&lt;br /&gt;
Eine weitere Besonderheit ist die Granularität der Werte. Insbesondere durch das Float Format einiger Werte sind nicht alle Werte möglich. Trägt man bspw eine Ontime von 10000 ein wird dies erst einmal akzeptiert. Allerdings wird der Wert beim Schreiben umgerechnet in den nächstmöglichen (welcher 9600 ist). Bei der Prüfung der Template Anwendung wird der Unterschied angemerkt. Am Einfachsten wird nun das Template angepasst und alles ist gut.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Nun tpl_params. Diese muss man anstelle des Registerwerts einsetzen. Hat man bspw &amp;lt;br&amp;gt;&lt;br /&gt;
tpl_params timeOn:rampTime&amp;lt;br&amp;gt;&lt;br /&gt;
definiert setzt man in das Register &#039;&#039;OnTime&#039;&#039; den Wert &#039;&#039;timeOn&#039;&#039; ein. Und eben das Rampenregiste den Wert &#039;&#039;rampTime&#039;&#039;. Der Wert wird dann beim Template Instanziieren - also Anwenden - durch den Individuellen ersetzt.&lt;br /&gt;
&lt;br /&gt;
=Getting started=&lt;br /&gt;
Was muss man also tun? Wenn man noch nichts eingerichtet hat:&lt;br /&gt;
  define hm HMinfo&lt;br /&gt;
  attr hm autoArchive 1&lt;br /&gt;
  attr hm autoLoadArchive 1_load&lt;br /&gt;
  attr hm configFilename regConfig.cfg&lt;br /&gt;
  define ht HMtemplate&lt;br /&gt;
&lt;br /&gt;
==Template erstellen und bearbeiten==&lt;br /&gt;
Templates kann man erstellen, in dem man die Register einer Entity nimmt und bearbeitet. Auch das Kopieren und Bearbeiten eines vorhandenen Templates ist möglich. Und man kann Templates exportieren/importieren.&lt;br /&gt;
===Template aus Device===&lt;br /&gt;
Aufgabe ist es, aus einem existierenden Device ein Template zu erstellen. Wir haben &lt;br /&gt;
device &#039;&#039;myDev&#039;&#039;&lt;br /&gt;
Channel &#039;&#039;myChan&#039;&#039;&lt;br /&gt;
Channel gepeert  mit &#039;&#039;myChanPeer&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
Der Kanal ist ein Schalter und wir wollen einen Parameter im Template nutzen: Die Anschaltzeit soll bei der Nutzung des Templates variabel eingesetzt werden. Wir werden also den Parameter &#039;&#039;timeOn&#039;&#039; nutzen. Das Template soll &#039;&#039;my1stTmpl&#039;&#039; genannt werden. Weiter soll das gesamte Verhalten des &#039;&#039;myChanPeer&#039;&#039; definiert werden, also short UND long. &lt;br /&gt;
  set ht define my1stTmpl&lt;br /&gt;
  attr ht tpl_param timeOn # name des Parameters - hier nur einer&lt;br /&gt;
  attr ht tpl_description &amp;quot;mein erstes Template&amp;quot;&lt;br /&gt;
  attr ht tpl_type peer-both&lt;br /&gt;
  &amp;lt;refresh browser&amp;gt;    # select liste der attribute wird neu eingelesen&lt;br /&gt;
  attr ht tpl_source myChan&lt;br /&gt;
  &amp;lt;refresh browser&amp;gt;    # select liste der attribute wird neu eingelesen&lt;br /&gt;
  attr ht tpl_peer myChanPeer&lt;br /&gt;
  &amp;lt;refresh browser&amp;gt;    # select liste der attribute wird neu eingelesen&lt;br /&gt;
  attr ht Reg_shOnTime timeOn # setzen des parameters&lt;br /&gt;
&lt;br /&gt;
nun können weitere Register verändert werde. &lt;br /&gt;
Sinnvoll ist es, unnötige Register aus dem Template zu entfernen. Dies sind in diesem Fall bspw. alle Ct register. Das Attribut des Registers wird einfach gelöscht. &lt;br /&gt;
  set ht save&lt;br /&gt;
  set ht dismiss&lt;br /&gt;
===Template Varianten speichern===&lt;br /&gt;
Ist man beim Erstellen von Templates kann man mti saveAs das Template als neues unter einem anderen Namen sichern. &lt;br /&gt;
===Template editieren===&lt;br /&gt;
Mit Edit kann man die Werte der Register ändern oder vorhandene Register aus dem Template entfernen. Ein Hinzufügen von Registern wird nicht unterstützt. Hier fehlt die Referenz um anzubieten, was möglich ist.&lt;br /&gt;
===Template kopieren===&lt;br /&gt;
Dies wird ebenfalls mit edit erreicht. Das Template wird mit saveAs unter einem neuen Namen gespeichert.&lt;br /&gt;
===Template export-import===&lt;br /&gt;
Will man Templates exportieren nutzt man &amp;lt;br&amp;gt;&lt;br /&gt;
  get ht &amp;lt;templatename&amp;gt;&lt;br /&gt;
Es wird ein kommando ausgegeben welches man in die Kommandozeile pasten kann, was dann der import ist.&amp;lt;br&amp;gt;&lt;br /&gt;
Dies kann man nutzen um Templates zu tauschen. Hat man ein &#039;&#039;gutes oder komplexes&#039;&#039; Template kann man dies der Allgemeinheit zu Verfügung stellen.&amp;lt;br&amp;gt;&lt;br /&gt;
Im besten Fall muss der User sich nicht mehr um Register kümmern, da komfortable Templates das besser abdecken.&lt;br /&gt;
&lt;br /&gt;
==Template einem Kanal zuweisen==&lt;br /&gt;
Jetzt haben wir ein Template welches long UND short eines Kanals kontrollieren soll. Dies wollen wir jetzt anwenden auf unsere Kanal/Peer Kompinationen &amp;quot;sw1/peer1&amp;quot;, &amp;quot;sw1/peer2&amp;quot;, &amp;quot;sw2/peer1&amp;quot; und &amp;quot;sw2/peer3&amp;quot;. Für alle benötigen wir unterschiedliche Abschaltzeiten (warum? eure Sache). &lt;br /&gt;
  set ht select my1stTmpl&lt;br /&gt;
  attr ht entity sw1&lt;br /&gt;
  &amp;lt;refresh browser&amp;gt;&lt;br /&gt;
  attr ht ePeer peer1&lt;br /&gt;
  attr ht tpl_param_timeOn 30&lt;br /&gt;
  set ht apply&lt;br /&gt;
  attr ht ePeer peer2&lt;br /&gt;
  attr ht tpl_param_timeOn 180&lt;br /&gt;
  set ht apply&lt;br /&gt;
&lt;br /&gt;
  attr ht entity sw2&lt;br /&gt;
  &amp;lt;refresh browser&amp;gt;&lt;br /&gt;
  attr ht ePeer peer1&lt;br /&gt;
  attr ht tpl_param_timeOn 70&lt;br /&gt;
  set ht apply&lt;br /&gt;
&lt;br /&gt;
  attr ht ePeer peer3&lt;br /&gt;
  attr ht tpl_param_timeOn 1000&lt;br /&gt;
  set ht apply&lt;br /&gt;
&lt;br /&gt;
  set ht dismiss&lt;br /&gt;
Die Register der Entities werden passend in das Device geschrieben.&lt;br /&gt;
&lt;br /&gt;
==Template editieren==&lt;br /&gt;
Nun soll das Template grundsätzlich modfiziert werden. &lt;br /&gt;
  &lt;br /&gt;
  set ht edit my1stTmpl&lt;br /&gt;
  attr ht Reg_&amp;lt;name&amp;gt; &amp;lt;value&amp;gt;&lt;br /&gt;
  attr ht Reg_&amp;lt;name2&amp;gt; &amp;lt;value2&amp;gt;&lt;br /&gt;
  attr ht Reg_&amp;lt;name3&amp;gt; &amp;lt;value3&amp;gt;&lt;br /&gt;
  set ht save&lt;br /&gt;
==Template kopieren und editieren==&lt;br /&gt;
Nun soll das Template grundsätzlich modfiziert werden. &lt;br /&gt;
  &lt;br /&gt;
  set ht select my1stTmpl&lt;br /&gt;
  attr ht Reg_&amp;lt;name&amp;gt; &amp;lt;value&amp;gt;&lt;br /&gt;
  attr ht Reg_&amp;lt;name2&amp;gt; &amp;lt;value2&amp;gt;&lt;br /&gt;
  attr ht Reg_&amp;lt;name3&amp;gt; &amp;lt;value3&amp;gt;&lt;br /&gt;
  set ht saveAs my2ndTmpl&lt;br /&gt;
==Template weitergeben==&lt;br /&gt;
Will man Templates weitergeben geht das mit&lt;br /&gt;
  get ht my1stTmpl&lt;br /&gt;
Das Kommando kann dann direkt in die Kommandozeile kopiert werden und das Template ist definiert.&lt;br /&gt;
=Verwaltung und Überblick=&lt;br /&gt;
Nun hat man Templates definiert und Instanziiert. Wie soll man den Überblick behalten? HMtemplate ist ein Editor - also nicht wirklich hierfür geeignet. HMinfo macht die Verwaltung. &lt;br /&gt;
==Template Überblick==&lt;br /&gt;
Will man sehen, was man so an Templates nutzt kann man eine Überscht unterschedliche sortiert ausgeben lassen - in HMinfo (hm).&lt;br /&gt;
  get hm templateUsgG sortTemplate&lt;br /&gt;
  get hm templateUsgG sortPeer&lt;br /&gt;
  get hm templateUsgG all&lt;br /&gt;
Sowie eine Liste von Regiserlisten, welche noch kein Template nutzen (noch in Bau!!)&lt;br /&gt;
  get hm templateUsgG noTmpl&lt;br /&gt;
Eine Liste der Verfügbaren Templates erhält man mit &lt;br /&gt;
  get hm templateList all&lt;br /&gt;
und die Register eines Templates mit &lt;br /&gt;
  get hm templateList &amp;lt;templateName&amp;gt;&lt;br /&gt;
  oder&lt;br /&gt;
  set ht select  &amp;lt;templateName&amp;gt;&lt;br /&gt;
==Template prüfen==&lt;br /&gt;
Templates werden auf korrekte Implementierung in der Entity anhand eines Vergleichs der gelesenen Registern mit den gewünschten Regitern geprüft. Es ist also notwendig, dass die Registerwerte in der FHEM Kopie aktuell sind. Dann reicht ein &lt;br /&gt;
  get hm configCheck&lt;br /&gt;
Sollte es zu Unstimmigkeiten kommen werden mit &lt;br /&gt;
  set hm templateExe&lt;br /&gt;
alle Unstimmigkeiten überschrieben. Klar, wie immer, muss FHEM warten, bis ein Device angesprochen werden kann (Übertragungsmode) und dass die IOs nicht überlastet werden. Die Gefahr einer Überlast ist gering wenn man nicht gleich alles überschreiben will. &amp;lt;br&amp;gt;&lt;br /&gt;
Wie immer ist es hilfreich den Status der Übertragung im Blick zu haben:&lt;br /&gt;
  get hm protoEvents&lt;br /&gt;
Wenn zu viel passiert ist und man protoEvents aufräumen muss dann (Achtung: es werden alle ausstehenden Kommandos gelöscht und müssen neu aktiviert werden!)&lt;br /&gt;
  set hm clearG msgEvents&lt;br /&gt;
==Template löschen==&lt;br /&gt;
  set ht delete &amp;lt;tempateName&amp;gt;&lt;br /&gt;
Achtung: vorher müssen alle Referenzen des Templates entfernt worden sein. &lt;br /&gt;
&lt;br /&gt;
=Templates in den Entites=&lt;br /&gt;
Ist eine Entity mit einem Template verknüpft wird dies in den Readings angezeigt. Dies kann man sichtbar machen - und eine Anzeige von Registern in den Readings sollte dann nicht mehr notwendig sein. Empfohlen wird, den expoer mode auf rein Templates umzustellen&lt;br /&gt;
  attr TYPE=CUL_HM:FILTER=DEF=......:FILTER=subType!=virtual expert 12_templOnly&lt;br /&gt;
  deleteattr TYPE=CUL_HM:FILTER=DEF=........    expert&lt;br /&gt;
  deleteattr TYPE=CUL_HM:FILTER=subType=virtual expert&lt;br /&gt;
&lt;br /&gt;
=Beispiele und Ideen=&lt;br /&gt;
&lt;br /&gt;
Neben den typischen Templates für Schalter kann (sollte) man auch bspw für RTs einsetzen. Temperaturlisten sind nicht im Angebot. Hier gibt es bereits andere Verfahren die besser passen. Allerdings experimentire ich bei meinen RTs mit den Regelparametern und will diese dann generell setzen. Alle RTs (bei mir) sollen die gleiche Regelung haben. Ich nutze 3 Templates für meine RTs&lt;br /&gt;
* &#039;&#039;&#039;HeatDefDev&#039;&#039;&#039;: Das Device des RT wird auf Standartwerte gesetzt. Hier nutze ich einen Parameter um die Tasten zu sperren. Dies brauche ich nicht bei allen RTs sondern nur bei denen, welche ich mit einem TC gepeert habe. Hier ist eine Lokale Änderung am TC vorzunehmen. &lt;br /&gt;
* &#039;&#039;&#039;HeatDefault&#039;&#039;&#039;:Die Standart-Regelung. Auch hier habe ich Parameter vorgesehen. Die Devices sind identisch... bis auf die Boostzeit und die maximals Ventilöffnung. Je nach Hk begrenze ich ValveMax - hängt von den baulichen Gegebenheiten ab. Boost nutze ich im Bad zum entfeuchten.&lt;br /&gt;
* &#039;&#039;&#039;HeatRemote&#039;&#039;&#039;: mein &#039;&#039;guteNacht&#039;&#039; Knopf macht auch vor RTs nicht halt. Ich haben an einer Remote einen Button mit allen Lichtern und RTs im Wohnbereich gekoppelt. Beim Drücken wird das Licht abgeschaltet und dieHeizung gedrosselt - bspw wenn ich als letzter ins Bett gehe. Daher brauche ich einen Parameter &#039;&#039;Temperatur&#039;&#039; um das induviduell je RT einzustellen. &lt;br /&gt;
  set hm templateDef HeatDefDev BtnLock &amp;quot;Default RT Device register&amp;quot; globalBtnLock:off localResDis:off modusBtnLock:off backOnTime:10 cyclicInfoMsg:on lowBatLimitRT:2.1 burstRx:on cyclicInfoMsgDis:0 btnLock:p0&lt;br /&gt;
  set hm templateDef HeatDefault boost:valveMax &amp;quot;myDefault RT settings, enter boostTime and valveMax&amp;quot; regAdaptive:offDeter reguIntI:20 nightTemp:17 tempOffset:0.0K dayTemp:21 reguIntPstart:5 reguExtI:20 showWeekday:off reguExtP:25 reguIntP:25 tempMax:30.5 tempMin:4.5 valveMaxPos:p1 valveOffsetRt:0 modePrioManu:all daylightSaveTime:on boostPos:30 decalcWeekday:Sat showInfo:time decalcTime:11:00 btnNoBckLight:off reguExtPstart:5 noMinMax4Manu:off modePrioParty:all valveErrPos:15 boostPeriod:p0&lt;br /&gt;
  set hm templateDef HeatRemote temp &amp;quot;heatRemote set temperature&amp;quot; CtrlRc:autoAndTemp TempRC:p0&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
In der Übersicht für 2 RTs ergibt ein get hm templateUsg&lt;br /&gt;
  haEss               |0              |HeatDefDev|BtnLock:off &lt;br /&gt;
  haEss_Clima         |0              |HeatDefault|boost:5 valveMax:15 &lt;br /&gt;
  haEss_remote        |FB8_1:short    |HeatRemote|temp:13 &lt;br /&gt;
  haEss_remote        |FB8_5:long     |HeatRemote|temp:13 &lt;br /&gt;
  haEss_remote        |FB8_5:short    |HeatRemote|temp:19 &lt;br /&gt;
  haLnge              |0              |HeatDefDev|BtnLock:off &lt;br /&gt;
  haLnge_Clima        |0              |HeatDefault|boost:5 valveMax:15 &lt;br /&gt;
  haLnge_remote       |FB8_1:short    |HeatRemote|temp:13 &lt;br /&gt;
  haLnge_remote       |FB8_5:long     |HeatRemote|temp:13 &lt;br /&gt;
  haLnge_remote       |FB8_5:short    |HeatRemote|temp:19 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic supportDevice]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Der-PW</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=PRESENCE&amp;diff=28238</id>
		<title>PRESENCE</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=PRESENCE&amp;diff=28238"/>
		<updated>2018-11-05T18:23:23Z</updated>

		<summary type="html">&lt;p&gt;Der-PW: /* Problemlösungen */ kleine Rechtschreibkorrekturen und Änderungen im Wording&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Anwesenheitserkennung&lt;br /&gt;
|ModType=h&lt;br /&gt;
&amp;lt;!-- |ModCmdRef= --&amp;gt;&lt;br /&gt;
|ModTechName=73_PRESENCE.pm&lt;br /&gt;
|ModOwner=markusbloch&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Das [[PRESENCE]] Modul bietet für die Anwesenheitserkennung mehrere Varianten an: &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; Bluetooth&#039;&#039;&#039;&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äten, ü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;
&lt;br /&gt;
= Überwachen mittels Ping 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;
&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;
&lt;br /&gt;
= Überwachung mittels 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;
&lt;br /&gt;
= Überwachen mittels Events =&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;
&lt;br /&gt;
= Überwachen mittels Bluetooth =&lt;br /&gt;
== Vorbereitung und Informationen ==&lt;br /&gt;
=== Getestete Hardware/Software ===&lt;br /&gt;
* &#039;&#039;&#039;Raspbian System&#039;&#039;&#039; - wheezy, Jessie (interner BT-Controller)&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, GhostyuBeacon iBc41&lt;br /&gt;
&lt;br /&gt;
=== BT-Dongle am RaspberryPI installieren ===&lt;br /&gt;
Um den BT-Dongle &#039;&#039;(hier: CSL NET BT USB2.0)&#039;&#039; am RaspberryPI verwenden zu können, müssen die notwendigen Pakete über die Paketverwaltung von debian 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 RaspberryPI 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 BT-Tags muss dafür die &#039;&#039;&#039;Batteriesicherung&#039;&#039;&#039; gezogen werden.&lt;br /&gt;
&lt;br /&gt;
Ein BT-Tag wird mit folgendem Befehl auf der Konsole gesucht:&lt;br /&gt;
&amp;lt;syntaxhighlight 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;/syntaxhighlight&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 BT-Tag gefunden wird, sollte das BT Interface neu gestartet werden. Dazu ist kein Reboot des RaspBerryPI notwendig.&lt;br /&gt;
&amp;lt;syntaxhighlight 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;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Überwachung durch den FHEM Server direkt ==&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;
== Überwachung durch verteilte Agenten in der Wohnung (presenced/lepresenced/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 / lepresenced Programm ausgestattet. Beide Programme 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.&lt;br /&gt;
&lt;br /&gt;
=== Unterschied presenced / lepresenced / collectord ===&lt;br /&gt;
presenced und lepresenced sind Programme, welche in regelmäßigen Abständen nach Bluetooth-Geräten suchen. Sobald ein Gerät, welches vorab definiert wurde, gefunden wird, wechselt der Status des Geräts in FHEM auf Anwesend. Der Unterschied zwischen presenced und lepresenced ist, dass lepresenced insbesondere für [https://de.wikipedia.org/wiki/Bluetooth_Low_Energy Bluetooth-LE-Devices] ist und presenced für &amp;quot;normale&amp;quot; Bluetooth-Geräte. &lt;br /&gt;
&lt;br /&gt;
collectord wiederum ist ein Programm, welches mehrere Pis verbindet und auf allen den aktuellen Status von presenced/lepresenced abfragt. Ist das gesuchte Bluetooth-Gerät auf einem der Pi anwesend, so wird es auch in der definierten Hauptinstanz auf anwesend gesetzt. Zusätzlich wird der Pi auf dem das Gerät gefunden wurde als Reading angegeben. Sofern alle Räume einen Empfangspegel (RSSI) ermitteln können, wird bei mehreren anwesenden Räumen der Raum mit dem besten Empfangspegel selektiert (siehe {{Link2Forum|Topic=54482}}).&lt;br /&gt;
&lt;br /&gt;
=== Installation von (le)presenced ===&lt;br /&gt;
Diese Anleitung ist sowohl für presenced, als auch für lepresenced gültig. Einfachheitshalber wird nur lepresenced erwähnt, sämtliche Schritte gehen jedoch auch mit presenced, wobei einfach die genannten Daten durch presenced ersetzt werden müssen.&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ändigkeitshalber 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;
{{Randnotiz|RNText=Bei einem Upgrade einer älteren Version reicht es, das neue .deb Paket mit&lt;br /&gt;
:&amp;lt;code&amp;gt;sudo dpkg -i lepresenced-X.XX-X.deb&amp;lt;/code&amp;gt;&lt;br /&gt;
zu aktualisieren}} &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.Variante:&#039;&#039;&#039;&lt;br /&gt;
Herunterladen der aktuellen lepresenced-0.83-3.deb (Stand August 2017) 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 (aktuelle Versionsnummer beachten)&lt;br /&gt;
 https://svn.fhem.de/trac/export/HEAD/trunk/fhem/contrib/PRESENCE/deb/lepresenced-0.83-3.deb&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2.Variante:&#039;&#039;&#039; (zu Verwenden, wenn es Probleme bei Variante 1 gibt)&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;
&lt;br /&gt;
Egal welche Variante gewählt wurde, nun kann mit folgenden Befehlen das Paket installiert werden. Bitte Pfade ggf. anpassen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wichtig&#039;&#039;&#039;: Das &#039;&#039;&#039;Paket&#039;&#039;&#039; hat eine ca. Größe von &#039;&#039;&#039;6,5Kb&#039;&#039;&#039;. Ab und an gibt es wohl Probleme mit der Installation, wodurch die Datei 11,5kb groß wird.&lt;br /&gt;
Diese Datei lässt sich nicht Installieren. In diesem Fall das Paket bitte mit der Variante 1 und dem Bereich &amp;quot;Download in other formats&amp;quot; herunterladen.&lt;br /&gt;
&lt;br /&gt;
 sudo dpkg -i lepresenced-0.83-3.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.82-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;
&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 eines Bluetooth-Geräts über FHEM =====&lt;br /&gt;
&lt;br /&gt;
Nach dem letzten Schritt sind alle Bedingungen für eine abschließende Konfiguration eines BT-Geräts in FHEM abgeschlossen worden.&lt;br /&gt;
Jetzt kann der zum Beispiel ein G-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;
&#039;&#039;&#039;Wichtig ist den angegeben Port zu unterscheiden. Für presenced muss der Port 5111 genommen werden, für lepresenced der Port 5333.&#039;&#039;&#039;&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;
Diese Variante sollte eingesetzt werden, wenn nur ein Pi nach Bluetooth-Geräten sucht. Möchte man mehr als ein Gerät nutzen um zum Beispiel eine größere Fläche abzudecken so muss mit collectored gearbeitet werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alle Räume gemeinsam ansprechen mittels collectord ===&lt;br /&gt;
Um zwei presenced- oder lepresenced Installationen zu verbinden wird der collectord Daemon von Markus Bloch benötigt. 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;
&lt;br /&gt;
[[Datei:Presence_Collectord_Uebersicht.jpg|200px|thumb|left|Schematische Darstellung Presence und Collectord, Danke an dtavb]]&lt;br /&gt;
Auf Basis folgender Skizze wird die Einrichtung und der Betrieb der Anwesenheitserkennung und Überwachung &amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
mit dem PRESENCE-Modul sowie dem Skript (.deb-Paket) lepresenced beschrieben. Zusätzlich wird für die Verbindung &amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
mehrere lepresenced Instanzen der collectord verwendet.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
Diese Skizze dient als Basis für alle genannten Konfigurationen innerhalb dieses Artikels.&lt;br /&gt;
{{NeuerTextBlock}}&lt;br /&gt;
&lt;br /&gt;
==== Aufbau ====&lt;br /&gt;
; RPi1 (Hauptinstanz): &lt;br /&gt;
: FHEM Installation&lt;br /&gt;
: presence/lepresenced Installation &lt;br /&gt;
: collectord installation&lt;br /&gt;
: Sämtliche Bluetooth-Geräte in FHEM definiert&lt;br /&gt;
; RPi2 (Zweitsystem): &lt;br /&gt;
: FHEM installation&lt;br /&gt;
: presence/lepresenced Installation&lt;br /&gt;
: Sämtliche Bluetooth-Geräte in FHEM definiert&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Installation per .deb-Paket ====&lt;br /&gt;
collectord wird heruntergeladen und installiert:&lt;br /&gt;
https://svn.fhem.de/trac/export/HEAD/trunk/fhem/contrib/PRESENCE/deb/collectord-1.8.deb (Stand Januar 2018)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo dpkg -i collectord-1.8.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. Weitere Einstellungen können unter /etc/default/collectord vorgenommen werden.&lt;br /&gt;
&lt;br /&gt;
==== Konfiguration auf Shellebene ==== &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=5333		          # 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=5333		          # 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: &lt;br /&gt;
* Es dürfen keine [Namen] mit Leerzeichen verwendet werden&lt;br /&gt;
* Der angegebene Port richtet sich danach, ob auf dem Pi presenced (Port 5111) oder lepresenced (Port 5333) nach dem Bluetooth-Gerät sucht&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Konfiguration in FHEM ==== &lt;br /&gt;
;RPi1&lt;br /&gt;
 define Gtag PRESENCE lan-bluetooth XX:XX:XX:XX:XX:XX 127.0.0.1:5222 60           &#039;&#039;Hinweis: (Der Port ist der, des collectord!! Standard 5222)&#039;&#039;&lt;br /&gt;
;RPi2&lt;br /&gt;
 define Gtag PRESENCE lan-bluetooth XX:XX:XX:XX:XX:XX 192.168.178.127:5222 60     &#039;&#039;Hinweis: (Der Port ist der, des collectord!! Standard 5222 - die IP-Adresse von die von RPi1)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach der Konfiguration kann der Daemon gestartet werden.&lt;br /&gt;
Sobald das Bluetoothgerät irgendwo in der Wohnung erkannt wurde, meldet der Collectord dies sofort &lt;br /&gt;
an FHEM und teilt den Raum mit in dem es erkannt worden ist. Diese Information wird im Reading &amp;quot;rooms&amp;quot; des jeweiligen BT-Gerätes dargestellt.&lt;br /&gt;
&lt;br /&gt;
Zum testen sollte collectord einmalig manuell gestartet werden. Dies hat den Vorteil, dass man nochmal den Port des collectord prüfen kann, dieser steht in der Zeile &amp;lt;pre&amp;gt;created socket on 0.0.0.0 with port 5222&amp;lt;/pre&amp;gt; und man sehen kann, ob der collectord richtig startet, oder Fehler auswirft. Gestartet wird mit folgendem Kommando:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo collectord -vv -c /etc/collectord.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die Ausgabe sieht wie folgt aus:&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:56 - created socket on 0.0.0.0 with port 5222&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;Verhalten presence timeout im zusammenhang mit dem Attribut &amp;quot;absenceThreshold&amp;quot; der PRESENCE Konfiguration in FHEM&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
In der collectord.conf sind &amp;lt;code&amp;gt;presence_timeout&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;absence_timeout&amp;lt;/code&amp;gt; für den jeweiligen Raum konfiguriert.&lt;br /&gt;
Das bedeutet, sobald irgendein Gerät in diesem jeweiligen Raum anwesend/abwesend ist, wird das jeweilige Timeout an den verbundenen presenced/lepresenced geschickt um damit das Check-Interval entsprechend zu ändern.&lt;br /&gt;
&lt;br /&gt;
In der PRESENCE-Definition kann man ebenfalls ein &amp;lt;code&amp;gt;absence_timeout&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;presence_timeout&amp;lt;/code&amp;gt; setzen. Sobald sich der Zustand ändert, wird auch das jeweilige Timeout an den collectord gesandt. Dies hat aber auf die Checks in den jeweiligen Räumen und damit der collectord.conf keinen Einfluss. Der collectord schickt ein Statusupdate an PRESENCE nur, wenn das vorgegebene Timeout (von PRESENCE) erreicht ist und keine Statusänderung stattfand. Sobald eine Änderung des Status erfolgt wird natürlich sofort der Status an PRESENCE geschickt.&lt;br /&gt;
&lt;br /&gt;
Das Attribut absenceThreshold/presenceThreshold funktioniert nachwievor. Hier ist nur wichtig wie man die Timeouts sowohl in PRESENCE als auch collectord.conf setzt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Das Reading &amp;quot;room&amp;quot; bei einer PRESENCE Definition und der Zusammenhang zu collectord&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn ein BT LE Empfänger in mehr als einem Raum detektiert wird, führt der collectord (ab Version 1.8) eine RSSI-Erkennung durch. Sofern alle Räume den Empfangspegel (RSSI) ermitteln können, wird der Raum mit dem besten Empfangspegel als Raum für das &amp;quot;room&amp;quot;-Reading ausgewählt. Der lepresenced in aktueller Version von PatrickR gibt immer den Empfangspegel aus.&lt;br /&gt;
&lt;br /&gt;
====  Automatischer Start ====&lt;br /&gt;
Wenn der collectord per .deb Paket installiert wurde, startet er automatisch bei einem Reboot mit (via systemd/init-Skript).&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Collectord wird standardmäßig mit dem Port 5222 gestartet. Um diese anzupassen sind zwei Schritte notwendig:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;1.)&#039;&#039;&#039; Anpassen der /usr/bin/collectord &lt;br /&gt;
    Hier bitte den Parameter my $opt_p von 5222 auf 5XXX abändern.&lt;br /&gt;
&lt;br /&gt;
Da der collectord mittlerweile per systemd beim reboot des RPi gestarte wird muss auch diese Konfiguration auf den neuen Port angepasst werden.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;2.)&#039;&#039;&#039; Anpassen der /etc/default/collectord&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# collectord startup defaults:&lt;br /&gt;
# The TCP port collectord will listen for incoming connections (default: 5222)&lt;br /&gt;
PORT=5111&lt;br /&gt;
# The location of the configuration file (default: /etc/collectord.conf&lt;br /&gt;
CFGFILE=/etc/collectord.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Manuell starten als Daemon (Parameter &amp;lt;code&amp;gt;-d&amp;lt;/code&amp;gt;) mit:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo 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;
== Batterieüberwachung ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Batterieüberwachung mit dem Modul BleTagBattery ===&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Anwesenheitserkennung&lt;br /&gt;
|ModType=h&lt;br /&gt;
&amp;lt;!-- |ModCmdRef= --&amp;gt;&lt;br /&gt;
|ModTechName=74_BleTagBattery&lt;br /&gt;
|ModOwner=mumpitzstuff&lt;br /&gt;
}}&lt;br /&gt;
Mit dem Modul BleTagBattery - können die Batteriestati aller BT-LE Devices gelesen werden.&lt;br /&gt;
Es wird das batteryLevel und battery angelegt welches als BT-LE Tags an einer PRESENCE-Installation registriert wurden.&lt;br /&gt;
&lt;br /&gt;
Vorraussetzung und Installation:&lt;br /&gt;
&lt;br /&gt;
Bluez und Gattool&lt;br /&gt;
 sudo apt-get install bluez&lt;br /&gt;
&lt;br /&gt;
Das Gattool ist in den Installationen von Bluez inbegriffen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hinzufügen des githup für das Modul&lt;br /&gt;
 update add http://raw.githubusercontent.com/mumpitzstuff/fhem-BleTagBattery/master/controls_bletagbattery.txt&lt;br /&gt;
 update all&lt;br /&gt;
 restart fhem: shutdown restart&lt;br /&gt;
 BT-LE tags muss an einer PRESENCE-Installation des type &amp;quot;lan-bluetooth&amp;quot; registriert sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach dem Neustart von FHEM kann das Modul definiert werden:&lt;br /&gt;
 define a new device: define &amp;lt;name of device&amp;gt; BleTagBattery&lt;br /&gt;
&lt;br /&gt;
Das Modul versucht in der Standardkonfiguration alle 6 Stunden die BT-LE Devices zu erreichen und das Reading batteryLevel und battery zu aktualisieren.&lt;br /&gt;
Das Update kann auch manuell mit dem folgenden Befehl erzwungen werden&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;name of device&amp;gt; statusRequest.&lt;br /&gt;
&lt;br /&gt;
Weiter Informationen und Disskussionen können dem eigentlichen [https://forum.fhem.de/index.php?topic=68104.0 Forumsbeitrag] entnommen werden,&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;syntaxhighlight 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;/syntaxhighlight&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;syntaxhighlight 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;/syntaxhighlight&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;
= Beispiele =&lt;br /&gt;
==  Anwesenheitserkennung / Anwesenheitsbenachrichtigung mit G-Tags ==&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;
&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;syntaxhighlight 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;/syntaxhighlight&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, das Skript lepresenced mit einem Editor öffnen und die Stellen, wo LOG_WARNING zu finden ist, 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 Firmware 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, das Paket bluez-hcidump zu installieren. Das Werkzeug hcidump erlaubt die Beobachtung von Bluetooth-Aktivitäten.&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 Logs 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 untenstehenden&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 {{Link2Forum|Topic=28753|Message=499184|LinkText=hier}} diskutiert.&lt;br /&gt;
&lt;br /&gt;
Seit Version 0.82 kann es beim Start zu folgenden Meldungen im Log kommen. &lt;br /&gt;
 Sep 06 16:13:45 raspberrypi systemd[1]: Started lepresenced.&lt;br /&gt;
 Sep 06 16:13:45 raspberrypi lepresenced[16010]: [tid:1] main::bluetooth_scan_thread: Received &#039;Set scan parameters failed: Input/output error&#039;, ...tting...&lt;br /&gt;
 Sep 06 16:13:46 raspberrypi lepresenced[16010]: [tid:1] main::bluetooth_scan_thread: hcitool exited, retrying...&lt;br /&gt;
&lt;br /&gt;
Diese Meldungen können ignoriert werden. Abhilfe schafft sich lepresenced selbst, indem es sich resettet.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Moderne iPhones und Android Geräte wechseln in den Schlaf-Modus&#039;&#039;&#039;, um Energie zu sparen. Somit sind die Geräte zur Anwesenheitserkennung nicht per Ping zu erreichen.&lt;br /&gt;
Durch das Programm hping3, lassen sich zyklisch Pakete an die Geräte senden, um sie wieder &amp;quot;aufzuwecken&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Mehr im Forum [https://forum.fhem.de/index.php/topic,76342.0.html]&lt;br /&gt;
&lt;br /&gt;
= Versionsänderungen lepresenced =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--Version 0.81 (BasisVersion)&lt;br /&gt;
--Version 0.82 (stable  08/2017)&lt;br /&gt;
  -Neue Kommandozeilenoption &amp;quot;--debug&amp;quot;: Startet lepresenced im Vordergrund und gibt ausführliche Debug-Informationen auf STDOUT aus.&lt;br /&gt;
  -Sanity Check: lepresenced prüft beim Starten die Verfügbarkeit von hciconfig, hcitool und hcidump.&lt;br /&gt;
  -Model: lepresenced übermittelt das Reading model nun als lan-lepresenced. Das erlaubt die Erkennung von lepresenced in der FHEM-Statistik (sofern aktiviert).&lt;br /&gt;
--Version 0.83 (stable  09/2017)&lt;br /&gt;
  - Behebung von Systemstart Fehlern&lt;br /&gt;
  - Weitere Debug-Möglichkeiten. U. a. wird nun mitgezählt, ob hcitool lescan (&amp;quot;legacy&amp;quot;) und hcidump eine identische Zahl an Beacons empfangen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Ansprechpartner =&lt;br /&gt;
# {{Link2FU|117|markusbloch }} (Markus) für das PRESENCE-Modul und collectord&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;/div&gt;</summary>
		<author><name>Der-PW</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Homebridge_User_Configs&amp;diff=28229</id>
		<title>Homebridge User Configs</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Homebridge_User_Configs&amp;diff=28229"/>
		<updated>2018-11-04T15:34:47Z</updated>

		<summary type="html">&lt;p&gt;Der-PW: Homebridgemapping um das Anlegen eines wichtigen userReadings ergänzt.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Eintrag dient zur Sammlung funktionsfähiger Homebridge Configs.&lt;br /&gt;
&lt;br /&gt;
Bitte immer die FHEM Version und Homebridge Version angegeben.&lt;br /&gt;
&lt;br /&gt;
Sehr gute Hinweise gibt es hier: http://www.meintechblog.de/2015/10/mit-siri-und-fhem-das-gesamte-smart-home-per-stimme-steuern/&lt;br /&gt;
== Mögliche Mappings ==&lt;br /&gt;
Die Möglichen Mappings können hier nachgelesen werden https://github.com/KhaosT/HAP-NodeJS/blob/master/lib/gen/HomeKitTypes.js&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel:&lt;br /&gt;
 Characteristic.Brightness = function() {&lt;br /&gt;
  Characteristic.call(this, &#039;Brightness&#039;, &#039;00000008-0000-1000-8000-0026BB765291&#039;);&lt;br /&gt;
  this.setProps({&lt;br /&gt;
    format: Characteristic.Formats.INT,&lt;br /&gt;
    unit: Characteristic.Units.PERCENTAGE,&lt;br /&gt;
    maxValue: 100,&lt;br /&gt;
    minValue: 0,&lt;br /&gt;
    minStep: 1,&lt;br /&gt;
    perms: [Characteristic.Perms.READ, Characteristic.Perms.WRITE, Characteristic.Perms.NOTIFY]&lt;br /&gt;
  });&lt;br /&gt;
  this.value = this.getDefaultValue();&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Das Mapping in diesem Fall, hat den Titel Brightness.&lt;br /&gt;
&lt;br /&gt;
Die Werte können in 1er Schritten zwischen 0 und 100 liegen (max und min Value)&lt;br /&gt;
== Feuchtesensor ==&lt;br /&gt;
Zum Einstieg etwas leicht nachvollziehbares. &lt;br /&gt;
&lt;br /&gt;
Feuchtesensoren haben in der Regel ein &amp;quot;humidity&amp;quot; Reading, im Falle des Opus XT300 Bodenfeuchtesensors auch Temperatur und Batterie Level. Homekit unterstützt einen &amp;quot;HumiditySensor&amp;quot; Service. Dieser ist in homebridge-fhem nicht standardmäßig vorhanden (kann also nicht aus dem dropdown ausgewählt werden, sondern muss über das Befehlsfeld zugewiesen werden):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr meinSensor genericDeviceType HumiditySensor&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt werden die Readings gemappt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr meinSensor homebridgeMapping clear CurrentRelativeHumidity=humidity StatusLowBattery=battery,values=ok:BATTERY_LEVEL_NORMAL;;/^.*/:BATTERY_LEVEL_LOW CurrentTemperature=temperature&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;clear&amp;lt;/code&amp;gt;löscht default mappings - das wird in der Regel nicht notwendig sein, schadet aber nicht&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;CurrentRelativeHumidity&amp;lt;/code&amp;gt; ist die relevante Homekit Characteristic - wird mit dem entsprechenden Reading des Sensors gemappt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;StatusLowBattery&amp;lt;/code&amp;gt; erwartet entweder BATTERY_LEVEL_NORMAL oder _LOW. Mein Sensor liefert ok zurück, wenn alles gut ist, also wird &amp;quot;ok&amp;quot; auf _NORMAL gemappt, alles andere auf _LOW. &lt;br /&gt;
&lt;br /&gt;
Der Opus XT300 Bodenfeuchtesensors liefert auch noch die Temperatur - der HumiditySensor Service sieht das eigentlich nicht vor, daher wird die Temperatur auch nicht in der Apple &amp;quot;Home&amp;quot; App angezeigt. Bei Eve wird die Temperatur hingegen berücksichtigt.&lt;br /&gt;
&lt;br /&gt;
== EnOcean STM 250 Tür-/Fensterkontakt ==&lt;br /&gt;
Der STM 250 liefert als Status in FHEM &amp;lt;code&amp;gt;open&amp;lt;/code&amp;gt;, wenn das Fenster offen und damit der Kontakt &amp;quot;offen&amp;quot; ist. Analog liefert er &amp;lt;code&amp;gt;closed&amp;lt;/code&amp;gt; wenn das Fenster geschlossen und damit auch der Kontakt geschlossen ist. Diese Statusangaben sind sehr intuitiv zu verstehen und zu interpretieren. &lt;br /&gt;
&lt;br /&gt;
Die characteristic &amp;lt;code&amp;gt;ContactSensorState&amp;lt;/code&amp;gt; von HomeKit liefert entweder den Wert &amp;lt;code&amp;gt;CONTACT_DETECTED=0&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;CONTACT_NOT_DETECTED=1&amp;lt;/code&amp;gt; zurück. Wobei &amp;lt;code&amp;gt;CONTACT_DETECTED&amp;lt;/code&amp;gt; bedeutet, dass der Kontakt geschlossen ist. Je nach Darstellung in der HomeKit-fähigen App muss dieses Verhalten bei der Interpretation berücksichtigt werden. Die App Eve von Elgato zum Beispiel liefert für Kontaktsensoren &amp;quot;JA&amp;quot; oder &amp;quot;NEIN&amp;quot; mit der Bedeutung &amp;lt;code&amp;gt;CONTACT_DETECTED=0=JA&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;CONTACT_NOT_DETECTED=1=NEIN&amp;lt;/code&amp;gt; zurück.&lt;br /&gt;
&lt;br /&gt;
Noch ein wichtiger Punkt: Um einen Sensorkontakt sinnvoll einzurichten sollte als zusätzlicher Wert für das Attribut &amp;lt;code&amp;gt;genericdeviceType&amp;lt;/code&amp;gt; der Wert &amp;lt;code&amp;gt;ContactSensor&amp;lt;/code&amp;gt; hinzugefügt werden. Wie das geht ist im Eintrag [[Homebridge_einrichten#FHEM_konfigurieren | Homebridge einrichten]] ausführlicher beschrieben.&lt;br /&gt;
&lt;br /&gt;
Folgende Attribute dann hinzufügen:&lt;br /&gt;
 attr STM250 genericDeviceType ContactSensor&lt;br /&gt;
 attr STM250 homebridgeMapping ContactSensorState=state,values=closed:CONTACT_DETECTED;open:CONTACT_NOT_DETECTED&lt;br /&gt;
&lt;br /&gt;
Getestet mit&lt;br /&gt;
 FHEM 5.7 Rev. 9893&lt;br /&gt;
 Homebridge 0.2.16&lt;br /&gt;
 homebridge-fhem Vorschauversion aus {{Link2Forum|Topic=48558|Message=402024|LinkText=homebridge/homekit}}&lt;br /&gt;
&lt;br /&gt;
== Modul RESIDENTS für Anwesenheitserkennung und Steuerung der Anwesenheit benutzen ==&lt;br /&gt;
[[Datei:Homebridge_bewohner_zu_szene.jpeg|mini|Schaltzustand eines Bewohners zu einer Szene hinzufügen]]&lt;br /&gt;
Aus den einzelnen Komponenten des Moduls RESIDENTS, homebridge sowie der characteristic &amp;lt;code&amp;gt;On&amp;lt;/code&amp;gt; und der Szenensteuerung lässt sich eine gleichzeitige Steuerung der Anwesenheit und Anwesenheitserkennung basteln.&lt;br /&gt;
&lt;br /&gt;
Dazu müssen folgende Schritte unternommen werden:&lt;br /&gt;
* einem Bewohner aus dem Modul ROOMMATE die Steuerung über homebridgeMapping hinzufügen&lt;br /&gt;
* Szene für &amp;quot;Ich bin zu Hause&amp;quot; und &amp;quot;Ich gehe jetzt&amp;quot; in einer HomeKit-fähigen App wie z.B. Eve einrichten&lt;br /&gt;
&lt;br /&gt;
Man kann einen beliebigen Bewohner aus dem Modul ROOMMATE nehmen und ihn über die characteristic &amp;lt;code&amp;gt;On&amp;lt;/code&amp;gt; in Form eines Schalters sozusagen schaltbar machen. Nur wird das Ein- und Ausschalten des Bewohners über HomeKit in FHEM auf den Status home bzw. absent gemappt. Seit dem 06.02.2016 werden RESIDENTS automatisch als Occupancy Sensor für HomeKit annonciert. Nun noch die Attribute des ROOMMATE wie folgt setzen:&lt;br /&gt;
 attr &amp;lt;ROOMMATE&amp;gt; genericDeviceType switch&lt;br /&gt;
 attr &amp;lt;ROOMMATE&amp;gt; homebridgeMapping On=state,valueOn=/home|awoken|asleep|gotosleep/,valueOff=/gone|absent/,cmdOn=home,cmdOff=absent&lt;br /&gt;
&lt;br /&gt;
Natürlich muss der Bewohner noch dem Filter von homebridge hinzugefügt und homebridge neu gestartet werden.&lt;br /&gt;
&lt;br /&gt;
Anschließend geht es in der HomeKit-fähigen App Deiner Wahl weiter. In Eve von Elgato ist von vornherein zum Beispiel vorgesehen, dass man zwei Szenen &amp;quot;Ich bin zuhause&amp;quot; und &amp;quot;Ich verlasse das Haus&amp;quot; hat. Zu diesen Szenen wird eine Aktion hinzugefügt indem der Bewohner, den das ROOMMATE-Modul meldet zur Szene hinzugefügt wird und beim Nachhausekommen &amp;quot;eingeschaltet&amp;quot; wird. Genauso wird mit der Szene &amp;quot;Ich verlasse das Haus&amp;quot; verfahren: Bewohner zur Szene hinzufügen und den Schaltvorgang auf &amp;quot;ausschalten&amp;quot; setzen.&lt;br /&gt;
&lt;br /&gt;
Mit den Sprachbefehlen &amp;quot;Ich bin zuhause&amp;quot; oder &amp;quot;Ich verlasse das Haus&amp;quot; wird die entsprechende Szene eingeschaltet, homebridge schaltet über das &amp;lt;code&amp;gt;homebridgeMapping&amp;lt;/code&amp;gt; Attribut dann den Bewohner auf &amp;quot;home&amp;quot; oder &amp;quot;absent&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Getestet mit&lt;br /&gt;
 FHEM 5.7 Rev. 9893&lt;br /&gt;
 Homebridge 0.2.16&lt;br /&gt;
 homebridge-fhem Vorschauversion aus {{Link2Forum|Topic=48558|Message=402024|LinkText=homebridge/homekit}}&lt;br /&gt;
&lt;br /&gt;
Eine noch etwas bessere Schaltmöglichkeit bietet &#039;&#039;&#039;genericDeviceType security&#039;&#039;&#039;.&lt;br /&gt;
Das Mapping für ROOMMATE sieht wie folgt aus:&lt;br /&gt;
 attr TYPE=ROOMMATE genericDeviceType security&lt;br /&gt;
 attr TYPE=ROOMMATE homebridgeMapping SecuritySystemCurrentState=state,values=/home|awoken/:0;;absent:1;;/asleep|gotosleep/:2;;gone:3 SecuritySystemTargetState=SecuritySystemCurrentState,cmds=0:state+home;;1:state+absent;;2:state+gotosleep;;3:state+gone,delay=1&lt;br /&gt;
für GUEST:&lt;br /&gt;
 attr TYPE=GUEST genericDeviceType security&lt;br /&gt;
 attr TYPE=GUEST homebridgeMapping SecuritySystemCurrentState=state,values=/home|awoken/:0;;absent:1;;/asleep|gotosleep/:2;;none:3 SecuritySystemTargetState=SecuritySystemCurrentState,cmds=0:state+home;;1:state+absent;;2:state+gotosleep;;3:state+none,delay=1&lt;br /&gt;
&lt;br /&gt;
== ZWave Türschloss Vision ZM1701 einbinden ==&lt;br /&gt;
Das ZWave Türschloss ZM1701 von der Firma Vision sendet seinen aktuellen Schließstatus in ein einzelnes Reading wie &amp;quot;lock&amp;quot;, sondern schickt eine ganze Reihe von Informationen über den Zustand in das Reading &amp;lt;code&amp;gt;doorLockOperation&amp;lt;/code&amp;gt;. Das Schließen und Öffnen der Türschlosses wird auch nicht mit einem Setzen des &amp;lt;code&amp;gt;state&amp;lt;/code&amp;gt; erreicht, sondern mit dem Setzen von &amp;lt;code&amp;gt;doorLockOperation&amp;lt;/code&amp;gt;. Das macht das Einbinden in homebridge nicht trivial, funktioniert aber über folgendes Homebridge-Mapping:&lt;br /&gt;
 attr &amp;lt;ZM1701&amp;gt; genericDeviceType lock&lt;br /&gt;
 attr &amp;lt;ZM1701&amp;gt; homebridgeMapping LockCurrentState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED LockTargetState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED,cmds=SECURED:doorLockOperation+close;UNSECURED:doorLockOperation+open&lt;br /&gt;
&lt;br /&gt;
Kurz zur Erklärung: Um ein Schloss über HomeKit steuern zu können braucht es zwei characteristics. LockCurrentState zeigt an, ob das Schloss geöffnet oder geschlossen ist. Und mit LockTargetState wird das Schloss geöffnet oder geschlossen. Damit der aktuelle Status des Schlosses ausgelesen werden kann, muss aus dem FHEM-Reading &amp;lt;code&amp;gt;doorLockOperation&amp;lt;/code&amp;gt; die Zeichenfolge &amp;lt;code&amp;gt; secured&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;unsecured&amp;lt;/code&amp;gt; extrahiert werden, daher die beiden regulären Ausdrücke &amp;lt;code&amp;gt;/\ssecured/&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;/unsecured/&amp;lt;/code&amp;gt;. In der characteristic &amp;lt;code&amp;gt;LockTargetState&amp;lt;/code&amp;gt; muss sowohl der aktuelle Status des Schlosses als auch das Kommando angegeben werden, schließlich möchte man ein geschlossenes Schloss nicht nochmal schließen. Daher wird erst aus dem Reading &amp;lt;code&amp;gt;doorLockOperation&amp;lt;/code&amp;gt; der aktuelle Status des Schlosses ausgelesen und die damit korrespondierenden Befehle über &amp;lt;code&amp;gt;cmds=SECURED:doorLockOperation+close;UNSECURED:doorLockOperation+open&amp;lt;/code&amp;gt; generiert.&lt;br /&gt;
&lt;br /&gt;
Wer es in FHEM über ein webCmd einfacher zu bedienen haben möchte, fügt bitte noch die dafür notwendigen Attribute und die leicht geänderten homebridgeMappings wie folgt ein:&lt;br /&gt;
 attr &amp;lt;ZM1701&amp;gt; genericDeviceType lock&lt;br /&gt;
 attr &amp;lt;ZM1701&amp;gt; homebridgeMapping LockCurrentState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED LockTargetState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED,cmds=SECURED:close;UNSECURED:open&lt;br /&gt;
 attr &amp;lt;ZM1701&amp;gt; /doorLockOperation open:open/doorLockOperation close:close&lt;br /&gt;
 attr &amp;lt;ZM1701&amp;gt; webCmd open:close&lt;br /&gt;
&lt;br /&gt;
Getestet mit&lt;br /&gt;
 FHEM 5.7 Rev. 12191&lt;br /&gt;
 homebridge 0.4.6&lt;br /&gt;
 homebridge-fhem 0.2.48&lt;br /&gt;
&lt;br /&gt;
== Roomba über THINKINGCLEANER Modul ==&lt;br /&gt;
 attr &amp;lt;THINKINGCLEANER&amp;gt; genericDeviceType switch&lt;br /&gt;
 attr &amp;lt;THINKINGCLEANER&amp;gt; homebridgeMapping clear On=state,valueOn=/^(on|dock)/,cmdOn=on,cmdOff=off,nocache=1 ChargingState=deviceStatus,values=/(_recon|_full|_trickle)$/:CHARGING;/^.*/:NOT_CHARGING&lt;br /&gt;
 attr &amp;lt;THINKINGCLEANER&amp;gt; siriName Robby&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Getestet mit&lt;br /&gt;
 FHEM 5.7 Rev. 12680&lt;br /&gt;
 homebridge 0.4.11&lt;br /&gt;
 homebridge-fhem 0.2.66&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Homematic HM-CC-RT-DN Funk-Heizkörperthermostat ==&lt;br /&gt;
[[Datei:HM-CC-RT-DN-Eve.PNG|mini|Darstellung des HM-CC-RT-DN in der iOS App Eve]]&lt;br /&gt;
 attr &amp;lt;HMCCRTDN_Channel2_Clima&amp;gt; homebridgeMapping TargetTemperature=desired-temp::desired-temp,minValue=5,maxValue=35,minStep=0.5,nocache=1&lt;br /&gt;
                      CurrentTemperature=BU_Heizung_01_Clima:measured-temp,nocache=1&lt;br /&gt;
                      StatusLowBattery=BU_Heizung_01:battery,values=ok:BATTERY_LEVEL_NORMAL;;/^.*/:BATTERY_LEVEL_LOW&lt;br /&gt;
                      TargetHeatingCoolingState=heatingState,values=OFF:0;;HEAT:1;;COOL:2;;AUTO:3,cmds=OFF:controlManu+off;;HEAT:controlMode+boost;;AUTO:controlMode+auto;;COOL:controlManu+17.0&lt;br /&gt;
                      CurrentHeatingCoolingState=heatingState,values=OFF:0;;HEAT:1;;COOL:2;;AUTO:0,valud=OFF&lt;br /&gt;
 attr &amp;lt;HMCCRTDN_Channel2_Clima&amp;gt; siriName Robby&lt;br /&gt;
Dieses Mapping bezieht sich auf ein vorhandenes &#039;&#039;userReading&#039;&#039; mit dem Namen &amp;lt;code&amp;gt;heatingState&amp;lt;/code&amp;gt;, womit Homekit die einzelnen Status nachher unterscheidet.&lt;br /&gt;
 attr &amp;lt;HM-CC-RT-DN_Clima&amp;gt; userReadings heatingState {(ReadingsVal($NAME,&amp;quot;ValvePosition&amp;quot;,0) &amp;gt; 0 || ReadingsVal($NAME,&amp;quot;desired-temp&amp;quot;,&amp;quot;-&amp;quot;) eq &amp;quot;on&amp;quot;) ? &amp;quot;HEAT&amp;quot; : ReadingsVal($NAME,&amp;quot;desired-temp&amp;quot;,&amp;quot;-&amp;quot;) eq &amp;quot;off&amp;quot; ? &amp;quot;OFF&amp;quot; : ReadingsVal($NAME,&amp;quot;controlMode&amp;quot;,&amp;quot;auto&amp;quot;) eq &amp;quot;auto&amp;quot; ? &amp;quot;AUTO&amp;quot; : (ReadingsVal($NAME,&amp;quot;measured-temp&amp;quot;,20) &amp;gt; ReadingsVal($NAME,&amp;quot;desired-temp&amp;quot;,20)) ? &amp;quot;COOL&amp;quot; : &amp;quot;AUTO&amp;quot;}&lt;br /&gt;
Global auf alle in FHEM angelegten HM-CC-RT-DN, lässt sich mit folgendem Befehl das &#039;&#039;userReading&#039;&#039; anlegen.&lt;br /&gt;
Siehe [https://forum.fhem.de/index.php/topic,59211.msg505986.html#msg505986 Forumsthread].&lt;br /&gt;
&lt;br /&gt;
 attr TYPE=CUL_HM:FILTER=model=HM-CC-RT-DN:FILTER=chanNo=04 userReadings heatingState {(ReadingsVal($NAME,&amp;quot;ValvePosition&amp;quot;,0) &amp;gt; 0 || ReadingsVal($NAME,&amp;quot;desired-temp&amp;quot;,&amp;quot;-&amp;quot;) eq &amp;quot;on&amp;quot;) ? &amp;quot;HEAT&amp;quot; : ReadingsVal($NAME,&amp;quot;desired-temp&amp;quot;,&amp;quot;-&amp;quot;) eq &amp;quot;off&amp;quot; ? &amp;quot;OFF&amp;quot; : ReadingsVal($NAME,&amp;quot;controlMode&amp;quot;,&amp;quot;auto&amp;quot;) eq &amp;quot;auto&amp;quot; ? &amp;quot;AUTO&amp;quot; : (ReadingsVal($NAME,&amp;quot;measured-temp&amp;quot;,20) &amp;gt; ReadingsVal($NAME,&amp;quot;desired-temp&amp;quot;,20)) ? &amp;quot;COOL&amp;quot; : &amp;quot;AUTO&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Xiaomi Vacuum Cleaner 1. Generation ==&lt;br /&gt;
[[Datei:XIAOMI_VACUUM_CLEANER-Gen1.jpg|mini|XIAOMI VACUUM 1. GEN in EVE]]&lt;br /&gt;
Voraussetzung zur Verwendung der Mappings, ist ein Eingebundener Staubsauger mit dem Modul 72_XiaomiDevice.&lt;br /&gt;
&lt;br /&gt;
Siehe [https://forum.fhem.de/index.php/topic,73052.0.html Forumsthread]&lt;br /&gt;
Das Modul muss manuell installiert werden.&lt;br /&gt;
&lt;br /&gt;
Getestet wurden die Mappings nur mit 1. Generation des Xiaomi Vacuum Staubsauger.&lt;br /&gt;
Ob genau die gleiche Mappings auch bei der 2. Generation funktioniert kann ich leider nicht testen, mangels 2. Generation von Staubsaugern.&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; genericDeviceType switch&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; homebridgeMapping On=state,valueOn=Cleaning,cmdOn=start,cmdOff=charge&lt;br /&gt;
                      RotationSpeed=fan_power,minValue=0,maxValue=90,cmd=fan_power,delay=1&lt;br /&gt;
                      BatteryLevel=batteryLevel,maxValue=100,minValue=0,minStep=1&lt;br /&gt;
                      StatusLowBattery=battery,values=ok:BATTERY_LEVEL_NORMAL;;low:BATTERY_LEVEL_LOW&lt;br /&gt;
                      ChargingState=state,values=Docked:NOT_CHARGING;;Charging:CHARGING;;/.*/:NOT_CHARGEABLE&lt;br /&gt;
                      OccupancyDetected=state,values=/Docked|Charging/:OCCUPANCY_DETECTED;;/.*/:OCCUPANCY_NOT_DETECTED&lt;br /&gt;
                      FilterLifeLevel=consumables_filter,minValue=0,maxValue=100&lt;br /&gt;
                      FilterChangeIndication=consumables_filter,values=0:CHANGE_FILTER&lt;br /&gt;
&lt;br /&gt;
&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;
== Homematic SmokeDetector ==&lt;br /&gt;
 [[Datei:Homebridge-Homematic-Smokedetector-Gen1.jpg|mini|Homebridge-Homematic-Smokedetector-Gen1 in EVE]]&lt;br /&gt;
Es sind keine Homebridge Mappings für die Rauch Meldung erforderlich.&lt;br /&gt;
&lt;br /&gt;
Allerdings ist ein Mapping für den Batterie Zustand nötig, dieses wird zu einen späteren Zeitpunkt nachgereicht.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; genericDeviceType SmokeSensor&lt;br /&gt;
 attr &amp;lt;XIAOMI&amp;gt; subType smokeDetector&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Der-PW</name></author>
	</entry>
</feed>