<?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=DDT</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=DDT"/>
	<link rel="alternate" type="text/html" href="http://wiki.fhem.de/wiki/Spezial:Beitr%C3%A4ge/DDT"/>
	<updated>2026-04-13T17:07:57Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=ESPEasy&amp;diff=29799</id>
		<title>ESPEasy</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=ESPEasy&amp;diff=29799"/>
		<updated>2019-03-09T09:01:48Z</updated>

		<summary type="html">&lt;p&gt;DDT: Korrigiert: setExtentions mit userSetCmds + {args =&amp;gt; -1}&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuerung eines Espressif ESP8266 WLAN-SoC&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef= &lt;br /&gt;
|ModForumArea=Bastelecke/ESP8266&lt;br /&gt;
|ModFTopic=55728&lt;br /&gt;
|ModTechName=34_ESPEasy.pm&lt;br /&gt;
|ModOwner={{Link2FU|7465|dev0}}&lt;br /&gt;
}}&lt;br /&gt;
Dieser Wiki-Artikel soll und kann die {{Link2CmdRef|Anker=ESPEasy|Lang=en|Label=ESPEasy Modul-Dokumentation}}(aka FHEM Command Reference) nicht ersetzen, sondern ergänzt die Dokumentation nur um ein paar Informationen.&lt;br /&gt;
&lt;br /&gt;
== Grundlegende ESP Easy Einstellungen ==&lt;br /&gt;
&lt;br /&gt;
Diese Einstellungen sind in der Weboberfläche des ESP vorzunehmen und bewirken u.a., dass für jedes ESPEasy-Device ein FHEM Device angelegt wird. Das kann bspw. für einen ESP sinnvoll sein, der Relays über GPIOs schalten soll (ESPEasy Device-Type &#039;&#039;Switch Input&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
*Es muss ein einmaliger ESP Devicename vergeben werden (&#039;&#039;Config&#039;&#039; -&amp;gt; &#039;&#039;Main Settings&#039;&#039; -&amp;gt;&#039;&#039;Name&#039;&#039;)&lt;br /&gt;
*Die verwendeten ESP Easy Devices sollten einen ESP-weit einmaligen Namen erhalten (&#039;&#039;Device&#039;&#039; -&amp;gt; &#039;&#039;Edit&#039;&#039; -&amp;gt; &#039;&#039;Task Settings&#039;&#039; -&amp;gt; &#039;&#039;Name&#039;&#039;). Ist dieser Name nicht eindeutig oder wird nicht vergeben, dann gibt es u.a. Probleme mit ESP Easy Rules [link].&lt;br /&gt;
*Jeder Wert, der gesendet werden soll, benötigt ebenfalls einen Namen, der in diesem ESP Device einmalig sein muss (&#039;&#039;Device&#039;&#039; -&amp;gt; &#039;&#039;Edit&#039;&#039; -&amp;gt; &#039;&#039;Optional Settings&#039;&#039; -&amp;gt; &#039;&#039;Value Name&#039;&#039;)&lt;br /&gt;
*Soll dieser Wert nun automatisch in einem Interval von x Sekunden (an FHEM) gesendet werden, dann muss noch das &#039;&#039;Delay&#039;&#039; (&#039;&#039;Device&#039;&#039; -&amp;gt; &#039;&#039;Edit&#039;&#039; -&amp;gt; &#039;&#039;Task Settings&#039;&#039; -&amp;gt; &#039;&#039;Delay&#039;&#039;) angegeben und die Option &#039;&#039;Send Data&#039;&#039; (&#039;&#039;Device&#039;&#039; -&amp;gt; &#039;&#039;Edit&#039;&#039; -&amp;gt; &#039;&#039;Task Settings&#039;&#039; -&amp;gt; &#039;&#039;Send Data&#039;&#039;) aktiviert werden. Die Option &#039;&#039;Send Boot State&#039;&#039; ist an dieser Stelle ebenfalls sinnvoll.&lt;br /&gt;
&lt;br /&gt;
=== Attribut combineDevices ===&lt;br /&gt;
&lt;br /&gt;
Wenn das oben genannte Verhalten (ein FHEM Device pro ESP Easy Device) nicht gewünscht ist, dann kann man mittels des Attributes &#039;&#039;combineDevices&#039;&#039; der {{Link2CmdRef|Anker=ESPEasy_bridge_define|Lang=en|Label=ESPEasy Bridge}} einstellen, ob die ESP Easy Devices eines einzelnen ESPs in ein FHEM Device zusammengeführt werden sollen.&lt;br /&gt;
Diese Funktionalität kann man global einschalten, indem man dem Attribut &#039;&#039;combineDevices&#039;&#039; den Wert &#039;&#039;1&#039;&#039; gibt.&lt;br /&gt;
&lt;br /&gt;
Will man nur von bestimmten ESPs die Devices zusammen fassen, dann kann man eine komma-getrennte Liste der ESPs angeben. Die Liste kann aus ESP Namen, IP Adressen und/oder Netzwerkbereichen bestehen. Netzwerkbereiche können mit einer Netzmaske in dotted decimal (/255.255.255.0) oder in bitmask (/24) Schreibweise angegeben werden. Hostnamen und FQDNs werden nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
Beispiele:&lt;br /&gt;
 attr &amp;lt;esp&amp;gt; combineDevices ESP1,ESP2&lt;br /&gt;
 attr &amp;lt;esp&amp;gt; combineDevices 10.0.0.148,10.0.0.149&lt;br /&gt;
 attr &amp;lt;esp&amp;gt; combineDevices 192.168.124.0/24&lt;br /&gt;
 attr &amp;lt;esp&amp;gt; combineDevices 192.168.124.0/255.255.255.0&lt;br /&gt;
 attr &amp;lt;esp&amp;gt; combineDevices ESP1,ESP2,10.0.0.0/8,192.168.0.0/255.255.0.0&lt;br /&gt;
&lt;br /&gt;
IPv6 Adressen/Bereiche werden zwar von FHEM, allerdings zur Zeit noch nicht von der öffentlichen ESP Easy Distribution unterstützt.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
 attr &amp;lt;esp&amp;gt; combineDevices 2001:1a50:50a8::148,2001:abcd:efff::/48&lt;br /&gt;
&lt;br /&gt;
== Presence Erkennung ==&lt;br /&gt;
Die &amp;quot;Presence Detection&amp;quot;, also die Erkennung, ob ein ESP noch Daten sendet, wurde anhand des Alters der empfangenen (Sensor-)Werte realisiert. Vereinfacht gesagt: Werden keine Readings mehr innerhalb von x Sekunden empfangen (siehe Device-Attribut &#039;&#039;Interval&#039;&#039;), wird das FHEM Device als &amp;quot;absent&amp;quot; gekennzeichnet. Das hat den Vorteil, dass auch ESP Easy Devices, die zwischen dem Senden von Daten in den so genannten Deep Sleep Modus gehen, erkannt werden können.&lt;br /&gt;
&lt;br /&gt;
Das Attribut &#039;&#039;Interval&#039;&#039; gibt unter anderem vor, in welchem zeitlichen Abstand Werte vom ESP erwartet werden, damit der ESP als &amp;quot;present&amp;quot; (und nicht absent) markiert wird.&lt;br /&gt;
&lt;br /&gt;
Wenn ein ESP Easy Device Werte alle 60 Sekunden sendet (Option &#039;&#039;Delay&#039;&#039; in der ESP Easy Device GUI) und das FHEM Device Interval auf 60 gesetzt ist, dann würde das Device-Reading &amp;quot;presence&amp;quot; auf &amp;quot;absent&amp;quot; wechseln, wenn innerhalb von 60-120 Sekunden keine Werte empfangen werden.&lt;br /&gt;
&lt;br /&gt;
Also wäre zum Beispiel die ESP Easy Firmware so zu konfigurieren, dass mindestens ein Wert alle 60 Sekunden gesendet wird. Das Interval-Attribut des entsprechenden FHEM ESPEasy Device müsste ebenfalls auf 60 (default) gesetzt werden. Ein paar Sekunden Toleranz sind im ESPEasy Modul eingebaut.&lt;br /&gt;
&lt;br /&gt;
Wenn man kein ESP Easy Device hat, das Daten an FHEM sendet, dann kann man zusätzlich einen der &amp;quot;System Info&amp;quot; Werte senden lassen und &#039;&#039;combineDevices&#039;&#039; für diesen ESP aktivieren. Es reicht nämlich, wenn ein Reading regelmäßig aktualisiert wird.&lt;br /&gt;
&lt;br /&gt;
Wenn die Presence Erkennung nicht genutzt werden soll, dann muss das Attribut &#039;&#039;presenceCheck&#039;&#039; auf 0 gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
== Sicherheit ==&lt;br /&gt;
&lt;br /&gt;
Wenn eine ESPEasy Bridge in FHEM eingerichtet wurde, dann werden Verbindungen nur von IP Adressen aus [https://tools.ietf.org/html/rfc1918 privaten Bereichen] zugelassen.&lt;br /&gt;
&lt;br /&gt;
Wenn ESP Easy Geräte außerhalb dieser Bereiche Daten an FHEM senden (z.B. über das Internet), dann muss das in der ESPEasy Bridge konfiguriert werden, andernfalls wird die Verbindung abgewiesen.&lt;br /&gt;
&lt;br /&gt;
Einerseits muss die IP Adresse bzw. der IP Bereich erlaubt (Attribute &#039;&#039;allowedIPs&#039;&#039;, &#039;&#039;deniedIPs&#039;&#039;), andererseits die Authentifizierung über &amp;quot;Basic Auth&amp;quot; in der ESPEasy Bridge eingerichtet werden.&lt;br /&gt;
Die Authentifizierung wird über das Attribut &#039;&#039;authentication&#039;&#039; eingeschaltet. Die Benutzerdaten für die Authentifizierung werden über die Set-Befehle &#039;&#039;user&#039;&#039; und &#039;&#039;pass&#039;&#039; der Bridge eingegeben&lt;br /&gt;
{{Hinweis|Hinweis: Username und Passwort werden unverschlüsselt in ./FHEM/FhemUtils/uniqueID gespeichert.}}&lt;br /&gt;
&lt;br /&gt;
=== Attribut authentication ===&lt;br /&gt;
Beispiel:&lt;br /&gt;
 set &amp;lt;espbridge&amp;gt; user MeinUserName&lt;br /&gt;
 set &amp;lt;espbridge&amp;gt; pass sehrgeheim&lt;br /&gt;
 attr &amp;lt;espbridge&amp;gt; authentication 1&lt;br /&gt;
&lt;br /&gt;
=== Attribute allowedIPs / deniedIPs ===&lt;br /&gt;
Beispiel:&lt;br /&gt;
 attr &amp;lt;espbridge&amp;gt; allowedIPs 192.0.2.0/24   # erlaubt ist 192.0.2.0 bis 192.0.2.255&lt;br /&gt;
 attr &amp;lt;espbridge&amp;gt; deniedIPs 192.0.2.0/29    # ausgeschlossen werden aber die IPs von 192.0.2.0 bis 192.0.2.7&lt;br /&gt;
&lt;br /&gt;
Das Attribut &#039;&#039;deniedIPs&#039;&#039; hat Vorrang vor &#039;&#039;allowedIPs&#039;&#039;. Das bedeutet, dass verbotene IPs niemals eine Verbindung aufbauen können, auch wenn sie vorher erlaubt wurden.&lt;br /&gt;
&lt;br /&gt;
Regular Expressions sind können ebenfalls verwendet werden:&lt;br /&gt;
 attr &amp;lt;espbridge&amp;gt; allowedIPs 192.0.2.1([0-4][0-9]|50)     # erlaubt IP von 192.168.30.100 bis 192.168.30.150&lt;br /&gt;
&lt;br /&gt;
Alle Details dazu sind in der {{Link2CmdRef|Anker=ESPEasy_bridge_attr_allowedips|Lang=en|Label=Command Reference}} beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Erweiterte Beispiele==&lt;br /&gt;
Hier ein paar Beispiele für unterschiedlichste Anwendungsfälle&lt;br /&gt;
&lt;br /&gt;
===  Schalter in FHEMWEB mit devStateIcons ===&lt;br /&gt;
Beispiel für GPIO 12:&lt;br /&gt;
 attr &amp;lt;ESP&amp;gt; stateFormat {ReadingsVal($name,&amp;quot;presence&amp;quot;,&amp;quot;&amp;quot;) eq &amp;quot;absent&amp;quot; ? &amp;quot;absent&amp;quot; : ReadingsVal($name,&amp;quot;GPIO12&amp;quot;,&amp;quot;&amp;quot;)}&lt;br /&gt;
 attr &amp;lt;ESP&amp;gt; devStateIcon on:ios-on-green:off off:ios-off:on absent:10px-kreis-rot:statusRequest&lt;br /&gt;
 attr &amp;lt;ESP&amp;gt; eventMap /gpio 12 on:on/gpio 12 off:off/&lt;br /&gt;
 attr &amp;lt;ESP&amp;gt; webCmd :&lt;br /&gt;
&lt;br /&gt;
=== on-for-timer und off-for-timer ===&lt;br /&gt;
Beispiel für GPIO 15:&lt;br /&gt;
 attr &amp;lt;ESP&amp;gt; /longpulse 15 on:on-for-time:slider,0,1,60/longpulse 15 off:off-for-time:slider,0,1,60/&lt;br /&gt;
&lt;br /&gt;
=== (on|off)-for-timer und devStateIcons ===&lt;br /&gt;
Beispiel für GPIO 15:&lt;br /&gt;
 attr &amp;lt;ESP&amp;gt; eventMap /longpulse 15 on:on-for-time:slider,0,1,60/longpulse 15 off:off-for-time:slider,0,1,60/gpio 15 on:on/gpio 15 off:off/&lt;br /&gt;
&lt;br /&gt;
=== userSetCmds ===&lt;br /&gt;
Mithilfe des Attributes userSetCmds kann man:&lt;br /&gt;
*Einzelne ESP Easy Befehle nachrüsten&lt;br /&gt;
*Eigene oder nicht unterstützte Plugins integrieren&lt;br /&gt;
*Bereits integrierte Befehle verändern&lt;br /&gt;
*Befehle einzelner Plugins mappen: Statt &#039;set &amp;lt;dev&amp;gt; plugin_a on&#039; kann man so &#039;set &amp;lt;dev&amp;gt; on&#039; verwenden. Das wird z.B. benötigt, um FHEMs setExtentions oder auch um FHEMWEB Widgets nutzen zu können.&lt;br /&gt;
&lt;br /&gt;
Die genrelle Syntax des Attributes ist ein Perl Hash, der die Eigenschaften des ESP Easy Befehls/Plugins beschreibt.&lt;br /&gt;
Folgende Eigenschaften (Keys) gibt es:&lt;br /&gt;
*args: Anzahl der benötigten Parameter. Default: 0&lt;br /&gt;
*url: Die aufzurufende URL. Default: /control?cmd=&lt;br /&gt;
*widget: Das FHEMWEB Widget, dass beim FHEMWEB Setter des Befehls verwendet werden soll. Default: keines&lt;br /&gt;
*usage: Diese Zeichenkette wird zum einen angezeigt, wenn ein falscher oder zu wenige Parameter beim Befehlsaufruf angeben wurden. Zum anderen haben folgende Zeichenketten eine besondere Bedeutung:&lt;br /&gt;
**&amp;lt;0|1|off|on&amp;gt;: Innerhalb des FHEM Befehl kann on/off statt 0/1 angegeben werden. An die ESP Easy Firmware wird 0/1 gesendet.&lt;br /&gt;
**&amp;lt;pin&amp;gt;: Bei dem Paramater handelt es sin um einen GPIO Port. Aliasnamen können verwendet werden. Siehe: get &amp;lt;dev&amp;gt; pinMap&lt;br /&gt;
**&amp;lt;text&amp;gt;: Dieser Paramter wird url encoded an die ESP Easy Firmware gesendet. Wird für die Ausgabe auf (O)led Displays benötigt.&lt;br /&gt;
*cmds: Diese Eigenschaft (key) muss ebenfalls ein Perl Hash sein. Dieser Key definiert die Unterbefehle des Plugins. Alle oben genannten Eigenschaften (Keys) können benutzt werden. Nur der Key &#039;url&#039; kann nicht angegeben werden, da in diesem Fall die URL des Plugins verwendet wird.&lt;br /&gt;
&lt;br /&gt;
Ein einzelner neuer Befehl &#039;myCmd1&#039;:&lt;br /&gt;
 attr &amp;lt;dev&amp;gt; userSetCmds ( myCmd1 =&amp;gt; {} )&lt;br /&gt;
&lt;br /&gt;
Ein einzelner neuer Befehl &#039;myCmd1&#039;. Der erste Paramater enthält einen GPIO Port, der durch Aliasnamen ersetzt werden kann. Der zweite Paramater kann als on/off geschrieben werden, gesendet wird aber 1/0:&lt;br /&gt;
 attr &amp;lt;dev&amp;gt; userSetCmds ( myCmd1 =&amp;gt; { usage =&amp;gt; &amp;quot;&amp;lt;pin&amp;gt; &amp;lt;0|1|off|on&amp;gt;&amp;quot; } )&lt;br /&gt;
&lt;br /&gt;
Zwei neue Befehle, mit allen default Werten:&lt;br /&gt;
 attr &amp;lt;dev&amp;gt; userSetCmds ( myCmd1 =&amp;gt; {}, myCmd2 =&amp;gt; {} )&lt;br /&gt;
&lt;br /&gt;
Zwei neue Befehle, der zweite Befehl verwendet eine abweichende URL:&lt;br /&gt;
 attr &amp;lt;dev&amp;gt; userSetCmds ( myCmd1 =&amp;gt; {}, myCmd2 =&amp;gt; { url =&amp;gt; &amp;quot;/?cmd=&amp;quot; } )&lt;br /&gt;
&lt;br /&gt;
Beispiel für das fiktive Plugin &#039;LED&#039; mit den Unterbefehlen &#039;rgb&#039; und &#039;ct&#039;. Die Unterbefehle &#039;rgb&#039; und &#039;ct&#039; können ohne Angabe des Pluginnamens &#039;LED&#039; verwendet werden. Zusätzlich werden in der FHEMWEB-Ansicht die Slider Widgets hsv/ct verwendet:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;dev&amp;gt; userSetCmds (&lt;br /&gt;
  LED =&amp;gt; {&lt;br /&gt;
    args  =&amp;gt; 2,&lt;br /&gt;
    url   =&amp;gt; &amp;quot;/control?cmd=&amp;quot;,&lt;br /&gt;
    usage =&amp;gt; &amp;quot;&amp;lt;rgb|ct&amp;gt; &amp;lt;rrggbb|colortemp&amp;gt;&amp;quot;,&lt;br /&gt;
    cmds  =&amp;gt; {&lt;br /&gt;
      rgb =&amp;gt; { args =&amp;gt; 1, usage =&amp;gt; &amp;quot;&amp;lt;rrggbb&amp;gt;&amp;quot;,    widget =&amp;gt; &amp;quot;colorpicker,HSV&amp;quot; },&lt;br /&gt;
      ct  =&amp;gt; { args =&amp;gt; 1, usage =&amp;gt; &amp;quot;&amp;lt;colortemp&amp;gt;&amp;quot;, widget =&amp;gt; &amp;quot;colorpicker,CT,2000,10,4000&amp;quot; }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
) &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== useSetExtensions ===&lt;br /&gt;
Mithilfe der FHEM setExtentions kann man die Befehle on-for-timer, off-for-timer, on-till, off-till, blink, intervals, toggle, etc nutzen. Im Gegensatz zu den ESP Easy Firmware Befehlen &#039;pulse&#039;, &#039;longpulse&#039; und &#039;longpulse_ms&#039; laufen die Timer nicht innerhalb der ESP Easy Firmware, sondern in FHEM. Mit allen Vor- und Nachteilen.&lt;br /&gt;
Um die setExtensions nutzen zu können muss das Attribut &#039;useExtensions&#039; auf 1 gesetzt sein. Weiterhin müssen die Befehle &#039;on&#039; und &#039;off&#039;, für das entsprechende Device, verfügbar sein. Das kann man auf verschiedene Weisen realisieren:&lt;br /&gt;
==== setExtensions mit eventMap ====&lt;br /&gt;
In diesem Beispiel wird der Befehl &#039;set &amp;lt;dev&amp;gt; GPIO 15 on&#039; mithilfe des globalen Attributs &#039;eventMap&#039; auf den Befehl &#039;set &amp;lt;dev&amp;gt; on&#039; gemappt.  Gleiches gilt für &#039;off&#039;.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;dev&amp;gt; useSetExtensions 1&lt;br /&gt;
attr &amp;lt;dev&amp;gt; eventMap /gpio 15 on:^on$/gpio 15 off:^off$/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==== setExtentions mit userSetCmds ====&lt;br /&gt;
In diesem Beispiel wird nicht das globale Attribut &#039;eventMap&#039; benutzt, sondern das ESPEasy Attribut &#039;userSetCmds&#039;, um die &#039;on&#039; und &#039;off&#039; Befehle bereitzustellen.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;dev&amp;gt; useSetExtensions 1&lt;br /&gt;
attr &amp;lt;dev&amp;gt; userSetCmds ( on =&amp;gt; {url=&amp;gt;&amp;quot;/control?cmd=gpio,15,1&amp;quot;, args =&amp;gt; -1}, off =&amp;gt; {url=&amp;gt;&amp;quot;/control?cmd=gpio,15,0&amp;quot;, args =&amp;gt; -1} &lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Logging==&lt;br /&gt;
===ESPEasy Bridge===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
2018.02.10 08:48:06.197 4: Connection accepted from eb_10.0.0.148_25654&lt;br /&gt;
2018.02.10 08:48:06.199 4: ESPEasy eb_10.0.0.148_25654: Peer address accepted&lt;br /&gt;
2018.02.10 08:48:06.199 5: ESPEasy eb_10.0.0.148_25654: Received header: {&#039;Content-Length&#039; =&amp;gt; &#039;298&#039;,&#039;Authorization&#039; =&amp;gt; &#039;Basic ***** &#039;,&#039;Host&#039; =&amp;gt; &#039;10.0.0.53&#039;,&#039;Connection&#039; =&amp;gt; &#039;close&#039;}&lt;br /&gt;
2018.02.10 08:48:06.199 5: ESPEasy eb_10.0.0.148_25654: Received content: {&amp;quot;module&amp;quot;:&amp;quot;ESPEasy&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;1.02&amp;quot;,&amp;quot;data&amp;quot;:{&amp;quot;ESP&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;BA_SEN1&amp;quot;,&amp;quot;unit&amp;quot;:4,&amp;quot;version&amp;quot;:9,&amp;quot;build&amp;quot;:137,&amp;quot;sleep&amp;quot;:0,&amp;quot;ip&amp;quot;:&amp;quot;10.0.0.148&amp;quot;},&amp;quot;SENSOR&amp;quot;:{&amp;quot;0&amp;quot;:{&amp;quot;deviceName&amp;quot;:&amp;quot;DHT22&amp;quot;,&amp;quot;valueName&amp;quot;:&amp;quot;temperature&amp;quot;,&amp;quot;type&amp;quot;:2,&amp;quot;value&amp;quot;:&amp;quot;21.5&amp;quot;},&amp;quot;1&amp;quot;:{&amp;quot;deviceName&amp;quot;:&amp;quot;DHT22&amp;quot;,&amp;quot;valueName&amp;quot;:&amp;quot;humidity&amp;quot;,&amp;quot;type&amp;quot;:2,&amp;quot;value&amp;quot;:&amp;quot;12.2&amp;quot;}}}}&lt;br /&gt;
2018.02.10 08:48:06.200 4: ESPEasy eb_10.0.0.148_25654: Basic authentication accepted&lt;br /&gt;
2018.02.10 08:48:06.200 4: ESPEasy eb_10.0.0.148_25654: Send http close &#039;200 OK&#039;&lt;br /&gt;
2018.02.10 08:48:06.202 4: ESPEasy eb_10.0.0.148_25654: Src:&#039;BA_SEN1&#039;/&#039;DHT22&#039; =&amp;gt; ident:BA_SEN1 dev:ESPEasy_BA_SEN1 combinedDevice:1&lt;br /&gt;
2018.02.10 08:48:06.202 5: eb: dispatch BA_SEN1::10.0.0.148::1::0::1::i||unit||4||0|||i||sleep||0||0|||i||build||137||0|||i||version||9||0|||r||temperature||21.5||2|||r||humidity||12.2||2&lt;br /&gt;
2018.02.10 08:48:06.209 4: ESPEasy eb_10.0.0.148_25654: Closing tcp session.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Detail bedeuten die Logeinträge:&lt;br /&gt;
&lt;br /&gt;
;Connection accepted from eb_10.0.0.148_25654&lt;br /&gt;
:Eine TCP Verbindung wurde vom ESP (IP: 10.0.0.148, source port: 25654) zur Bridge &amp;quot;eb&amp;quot; aufgebaut.&lt;br /&gt;
&lt;br /&gt;
;ESPEasy eb_10.0.0.148_25654&lt;br /&gt;
:Es wurde ein temporäres ESPEasy Bridge Devices angelegt, das Daten von der IP 10.0.0.148 und Quellport 25654 empfängt.&lt;br /&gt;
&lt;br /&gt;
;Peer address accepted&lt;br /&gt;
:Die IP Adresse des ESP wurde akzeptiert und die empfangenen Daten werden nun verarbeitet. Wenn die IP Adresse nicht akzeptiert wird, dann wird &#039;&#039;&#039;Peer address rejected&#039;&#039;&#039; gelogged.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;Received header: {&#039;Content-Length&#039; =&amp;gt; &#039;298&#039;,&#039;Authorization&#039; =&amp;gt; &#039;Basic ***** &#039;,&#039;Host&#039; =&amp;gt; &#039;10.0.0.53&#039;,&#039;Connection&#039; =&amp;gt; &#039;close&#039;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:Diese &#039;&#039;received header&#039;&#039; Zeile enthält die Daten des Headers, die via HTTP vom ESP empfangen werden. Ein eventuell vorhandenes Passwort wird maskiert.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;Received content: {&amp;quot;module&amp;quot;:&amp;quot;ESPEasy&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;1.02&amp;quot;,&amp;quot;data&amp;quot;:&amp;quot;ESP&amp;quot;:&amp;quot;name&amp;quot;:&amp;quot;BA_SEN1&amp;quot;,&amp;quot;unit&amp;quot;:4,&amp;quot;version&amp;quot;:9,&amp;quot;build&amp;quot;:137,&amp;quot;sleep&amp;quot;:0,&amp;quot;ip&amp;quot;:&amp;quot;10.0.0.148&amp;quot;},&amp;quot;SENSOR&amp;quot;:&amp;quot;0&amp;quot;:{&amp;quot;deviceName&amp;quot;:&amp;quot;DHT22&amp;quot;,&amp;quot;valueName&amp;quot;:&amp;quot;temperature&amp;quot;,&amp;quot;type&amp;quot;:2,&amp;quot;value&amp;quot;:&amp;quot;21.5&amp;quot;},&amp;quot;1&amp;quot;:&amp;quot;deviceName&amp;quot;:&amp;quot;DHT22&amp;quot;,&amp;quot;valueName&amp;quot;:&amp;quot;humidity&amp;quot;,&amp;quot;type&amp;quot;:2,&amp;quot;value&amp;quot;:&amp;quot;12.2&amp;quot;}}}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:Diese &#039;&#039;received content&#039;&#039; Zeile enthält die Daten, die vom ESP via HTTP empfangenen werden. Mehr oder weniger Klartext im JSON Format.&lt;br /&gt;
&lt;br /&gt;
;Basic authentication accepted&lt;br /&gt;
:In diesem Schritt wird geprüft ob eine Authentifizierung erforderlich und im besten Fall auch korrekt ist.&lt;br /&gt;
:Folgende Meldungen wären an dieser Stelle auch möglich:&lt;br /&gt;
:*No basic authentication required (auf beiden Seiten ist keine basic auth eingerichtet)&lt;br /&gt;
:*No basic authentication active but credentials received (auf FHEM Seite ist keine basic auth eingerichtet, der ESP sendet aber basic auth)&lt;br /&gt;
:*Basic authentication rejected (Username oder Passwort passen nicht zusammen)&lt;br /&gt;
&lt;br /&gt;
;Send http close &#039;200 OK&#039;&lt;br /&gt;
:&amp;quot;Quittung&amp;quot; an den ESP senden. Daraufhin wird der ESP die Verbindung beenden.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;Src:&#039;BA_SEN1&#039;/&#039;DHT22&#039; =&amp;gt; ident:BA_SEN1 dev:ESPEasy_BA_SEN1 combinedDevice:1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:Die Daten wurden vom ESP mit dem Namen BA_SEN1 und dem ESP Device DHT22 gesendet. Auf FHEM Seite werden die Daten dem Device mit dem Ident &amp;quot;BA_SEN1&amp;quot; zugewiesen. Dieses Ident wird vom FHEM Device ESPEasy_BA_SEN1 verwendet. Für diesen ESP ist das Attribut &#039;&#039;combineDevices&#039;&#039; wirksam. Wäre &#039;&#039;combineDevices&#039;&#039; nicht aktiv, dann würde das Ident &amp;quot;BA_SEN1_DHT22&amp;quot; lauten.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;dispatch BA_SEN1::10.0.0.148::1::0::1::i||unit||4||0|||i||sleep||0||0|||i||build||137||0|||i||version||9||0|||r||temperature||21.5||2|||r||humidity||12.2||2&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:Die Daten werden nun von der Bridge an das logische ESPEasy Device weitergegeben.&lt;br /&gt;
:Im Details bedeuten die einzelnen Elemente dieser Zeichenkette:&lt;br /&gt;
:*&#039;&#039;&#039;BA_SEN1::&#039;&#039;&#039;: Daten an das FHEM Device mit dem Ident BA_SEN1 schicken.&lt;br /&gt;
:*&#039;&#039;&#039;10.0.0.148::&#039;&#039;&#039;: IP Adresse des ESPs&lt;br /&gt;
:*&#039;&#039;&#039;1::&#039;&#039;&#039;: autocreate enabled? ja&lt;br /&gt;
:*&#039;&#039;&#039;0::&#039;&#039;&#039;: autosave enabled? nein&lt;br /&gt;
:*&#039;&#039;&#039;1::&#039;&#039;&#039;: wird nicht mehr benutzt&lt;br /&gt;
:*&#039;&#039;&#039;i||unit||4||0|||&#039;&#039;&#039;: Der ESP hat die Unit Nummer 4&lt;br /&gt;
:*&#039;&#039;&#039;i||sleep||1||0|||&#039;&#039;&#039;: Ist der ESP für den deep sleep mode konfiguriert? ja&lt;br /&gt;
:*&#039;&#039;&#039;i||build||137||0|||&#039;&#039;&#039;: ESPEasy build version 137&lt;br /&gt;
:*&#039;&#039;&#039;i||version||9||0|||&#039;&#039;&#039;: ESPEasy Release 9&lt;br /&gt;
:*&#039;&#039;&#039;r||temperature||21.5||2|||&#039;&#039;&#039;: Readingname: temperature, Wert: 21.5, Sensortyp: 2&lt;br /&gt;
:*&#039;&#039;&#039;r||humidity||12.2||2&#039;&#039;&#039;: Readingname: humidity, Wert 12.2, Sensortyp: 2&lt;br /&gt;
:Je nach ESPEasy Firmware Version können die Internals (Zeilen mit i am Anfang) auch &lt;br /&gt;
zusätzliche/andere Informationen aufweisen.&lt;br /&gt;
&lt;br /&gt;
;Closing tcp session.&lt;br /&gt;
:Die tcp Verbindung wird geschlossen, das temporäre ESPEasy Bridge Device wird gelöscht.&lt;br /&gt;
&lt;br /&gt;
===ESPEasy Device===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
2018.02.10 10:08:41.235 5: ESPEasy ESPEasy_BA_SEN1: Received: BA_SEN1::10.0.0.148::1::0::1::i||unit||4||0|||i||sleep||0||0|||i||build||137||0|||i||version||9||0|||r||temperature||21.2||2|||r||humidity||10.3||2&lt;br /&gt;
2018.02.10 10:08:41.236 4: ESPEasy ESPEasy_BA_SEN1: temperature: 21.2&lt;br /&gt;
2018.02.10 10:08:41.237 4: ESPEasy ESPEasy_BA_SEN1: humidity: 10.3&lt;br /&gt;
2018.02.10 10:08:41.237 5: ESPEasy ESPEasy_BA_SEN1: Internals: unit:4 sleep:0 build:137 version:9&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Im Detail:&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;Received: BA_SEN1::10.0.0.148::1::0::1::i||unit||4||0|||i||sleep||0||0|||i||build||137||0|||i||version||9||0|||r||temperature||21.2||2|||r||humidity||10.3||2&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:Das ist wieder die, bereits oben beschriebene, &#039;&#039;dispatch&#039;&#039; Zeichenkette, die jetzt vom logischen Device empfangen wurde.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;ESPEasy ESPEasy_BA_SEN1: temperature: 21.2&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;ESPEasy ESPEasy_BA_SEN1: humidity: 10.3&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:Die Readings &#039;&#039;temperature&#039;&#039; und &#039;&#039;humidity&#039;&#039; wurden aktualisiert.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;ESPEasy ESPEasy_BA_SEN1: Internals: unit:4 sleep:1 build:137 version:9&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:Die Internals &#039;&#039;unit&#039;&#039;, &#039;&#039;sleep&#039;&#039;, &#039;&#039;build&#039;&#039; und &#039;&#039;version&#039;&#039; wurden aktualisiert.&lt;br /&gt;
&lt;br /&gt;
===Zusätzliche Logeinträge===&lt;br /&gt;
Wird ein Device via Autocreate angelegt, gibt es zusätzliche Einträge im Logfile&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
2018.02.10 10:23:52.243 4: ESPEasy eb_10.0.0.148_3446: Src:&#039;BA_SEN1&#039;/&#039;DHT22&#039; =&amp;gt; ident:BA_SEN1 dev:undef combinedDevice:1&lt;br /&gt;
2018.02.10 10:23:52.243 2: ESPEasy eb: Autocreate ESPEasy_BA_SEN1 ESPEasy 10.0.0.148 80 eb BA_SEN1&lt;br /&gt;
2018.02.10 10:23:52.244 4: ESPEasy ESPEasy_BA_SEN1: Opened for BA_SEN1 10.0.0.148:80 using bridge eb&lt;br /&gt;
2018.02.10 10:23:52.258 5: ESPEasy ESPEasy_BA_SEN1: received event: ATTR ESPEasy_BA_SEN1 setState 3&lt;br /&gt;
2018.02.10 10:23:52.262 5: ESPEasy ESPEasy_BA_SEN1: received event: ATTR ESPEasy_BA_SEN1 Interval 300&lt;br /&gt;
2018.02.10 10:23:52.262 5: ESPEasy ESPEasy_BA_SEN1: Start internalTimer +304 =&amp;gt; 2018-02-10 10:28:57&lt;br /&gt;
2018.02.10 10:23:52.266 5: ESPEasy ESPEasy_BA_SEN1: received event: ATTR ESPEasy_BA_SEN1 presenceCheck 1&lt;br /&gt;
2018.02.10 10:23:52.269 5: ESPEasy ESPEasy_BA_SEN1: received event: ATTR ESPEasy_BA_SEN1 readingSwitchText 1&lt;br /&gt;
2018.02.10 10:23:52.271 2: ESPEasy eb: Autosave is disabled: Do not forget to save changes.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
*{{Link2CmdRef|Anker=ESPEasy|Lang=en|Label=FHEM ESPEasy Modul-Dokumentation}}&lt;br /&gt;
*[https://www.letscontrolit.com/wiki/index.php/ESPEasy ESP Easy Firmware Wiki] &lt;br /&gt;
*[https://www.letscontrolit.com/wiki/index.php/ESPEasy_Command_Reference ESP Easy Command Reference]&lt;br /&gt;
*[https://www.letscontrolit.com/wiki/index.php/Tutorial_Rules ESP Easy Rules]&lt;br /&gt;
&lt;br /&gt;
==Credits==&lt;br /&gt;
Vielen Dank an:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;ESP Easy Team&#039;&#039;&#039;, für die kontinuierliche Pflege und Erweiterungen der Software&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Drhrin&#039;&#039;&#039;, für die initiale Umsetzung dieses Wiki-Eintags&lt;/div&gt;</summary>
		<author><name>DDT</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=ESPEasy&amp;diff=28073</id>
		<title>ESPEasy</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=ESPEasy&amp;diff=28073"/>
		<updated>2018-10-14T12:19:26Z</updated>

		<summary type="html">&lt;p&gt;DDT: Added credits&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuerung eines Espressif ESP8266 WLAN-SoC&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef= &lt;br /&gt;
|ModForumArea=Bastelecke/ESP8266&lt;br /&gt;
|ModFTopic=55728&lt;br /&gt;
|ModTechName=34_ESPEasy.pm&lt;br /&gt;
|ModOwner={{Link2FU|7465|dev0}}&lt;br /&gt;
}}&lt;br /&gt;
Dieser Wiki-Artikel soll und kann die {{Link2CmdRef|Anker=ESPEasy|Lang=en|Label=ESPEasy Modul-Dokumentation}}(aka FHEM Command Reference) nicht ersetzen, sondern ergänzt die Dokumentation nur um ein paar Informationen.&lt;br /&gt;
&lt;br /&gt;
== Grundlegende ESP Easy Einstellungen ==&lt;br /&gt;
&lt;br /&gt;
Diese Einstellungen sind in der Weboberfläche des ESP vorzunehmen und bewirken u.a., dass für jedes ESPEasy-Device ein FHEM Device angelegt wird. Das kann bspw. für einen ESP sinnvoll sein, der Relays über GPIOs schalten soll (ESPEasy Device-Type &#039;&#039;Switch Input&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
*Es muss ein einmaliger ESP Devicename vergeben werden (&#039;&#039;Config&#039;&#039; -&amp;gt; &#039;&#039;Main Settings&#039;&#039; -&amp;gt;&#039;&#039;Name&#039;&#039;)&lt;br /&gt;
*Die verwendeten ESP Easy Devices sollten einen ESP-weit einmaligen Namen erhalten (&#039;&#039;Device&#039;&#039; -&amp;gt; &#039;&#039;Edit&#039;&#039; -&amp;gt; &#039;&#039;Task Settings&#039;&#039; -&amp;gt; &#039;&#039;Name&#039;&#039;). Ist dieser Name nicht eindeutig oder wird nicht vergeben, dann gibt es u.a. Probleme mit ESP Easy Rules [link].&lt;br /&gt;
*Jeder Wert, der gesendet werden soll, benötigt ebenfalls einen Namen, der in diesem ESP Device einmalig sein muss (&#039;&#039;Device&#039;&#039; -&amp;gt; &#039;&#039;Edit&#039;&#039; -&amp;gt; &#039;&#039;Optional Settings&#039;&#039; -&amp;gt; &#039;&#039;Value Name&#039;&#039;)&lt;br /&gt;
*Soll dieser Wert nun automatisch in einem Interval von x Sekunden (an FHEM) gesendet werden, dann muss noch das &#039;&#039;Delay&#039;&#039; (&#039;&#039;Device&#039;&#039; -&amp;gt; &#039;&#039;Edit&#039;&#039; -&amp;gt; &#039;&#039;Task Settings&#039;&#039; -&amp;gt; &#039;&#039;Delay&#039;&#039;) angegeben und die Option &#039;&#039;Send Data&#039;&#039; (&#039;&#039;Device&#039;&#039; -&amp;gt; &#039;&#039;Edit&#039;&#039; -&amp;gt; &#039;&#039;Task Settings&#039;&#039; -&amp;gt; &#039;&#039;Send Data&#039;&#039;) aktiviert werden. Die Option &#039;&#039;Send Boot State&#039;&#039; ist an dieser Stelle ebenfalls sinnvoll.&lt;br /&gt;
&lt;br /&gt;
=== Attribut combineDevices ===&lt;br /&gt;
&lt;br /&gt;
Wenn das oben genannte Verhalten (ein FHEM Device pro ESP Easy Device) nicht gewünscht ist, dann kann man mittels des Attributes &#039;&#039;combineDevices&#039;&#039; der {{Link2CmdRef|Anker=ESPEasy_bridge_define|Lang=en|Label=ESPEasy Bridge}} einstellen, ob die ESP Easy Devices eines einzelnen ESPs in ein FHEM Device zusammengeführt werden sollen.&lt;br /&gt;
Diese Funktionalität kann man global einschalten, indem man dem Attribut &#039;&#039;combineDevices&#039;&#039; den Wert &#039;&#039;1&#039;&#039; gibt.&lt;br /&gt;
&lt;br /&gt;
Will man nur von bestimmten ESPs die Devices zusammen fassen, dann kann man eine komma-getrennte Liste der ESPs angeben. Die Liste kann aus ESP Namen, IP Adressen und/oder Netzwerkbereichen bestehen. Netzwerkbereiche können mit einer Netzmaske in dotted decimal (/255.255.255.0) oder in bitmask (/24) Schreibweise angegeben werden. Hostnamen und FQDNs werden nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
Beispiele:&lt;br /&gt;
 attr &amp;lt;esp&amp;gt; combineDevices ESP1,ESP2&lt;br /&gt;
 attr &amp;lt;esp&amp;gt; combineDevices 10.0.0.148,10.0.0.149&lt;br /&gt;
 attr &amp;lt;esp&amp;gt; combineDevices 192.168.124.0/24&lt;br /&gt;
 attr &amp;lt;esp&amp;gt; combineDevices 192.168.124.0/255.255.255.0&lt;br /&gt;
 attr &amp;lt;esp&amp;gt; combineDevices ESP1,ESP2,10.0.0.0/8,192.168.0.0/255.255.0.0&lt;br /&gt;
&lt;br /&gt;
IPv6 Adressen/Bereiche werden zwar von FHEM, allerdings zur Zeit noch nicht von der öffentlichen ESP Easy Distribution unterstützt.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
 attr &amp;lt;esp&amp;gt; combineDevices 2001:1a50:50a8::148,2001:abcd:efff::/48&lt;br /&gt;
&lt;br /&gt;
== Presence Erkennung ==&lt;br /&gt;
Die &amp;quot;Presence Detection&amp;quot;, also die Erkennung, ob ein ESP noch Daten sendet, wurde anhand des Alters der empfangenen (Sensor-)Werte realisiert. Vereinfacht gesagt: Werden keine Readings mehr innerhalb von x Sekunden empfangen (siehe Device-Attribut &#039;&#039;Interval&#039;&#039;), wird das FHEM Device als &amp;quot;absent&amp;quot; gekennzeichnet. Das hat den Vorteil, dass auch ESP Easy Devices, die zwischen dem Senden von Daten in den so genannten Deep Sleep Modus gehen, erkannt werden können.&lt;br /&gt;
&lt;br /&gt;
Das Attribut &#039;&#039;Interval&#039;&#039; gibt unter anderem vor, in welchem zeitlichen Abstand Werte vom ESP erwartet werden, damit der ESP als &amp;quot;present&amp;quot; (und nicht absent) markiert wird.&lt;br /&gt;
&lt;br /&gt;
Wenn ein ESP Easy Device Werte alle 60 Sekunden sendet (Option &#039;&#039;Delay&#039;&#039; in der ESP Easy Device GUI) und das FHEM Device Interval auf 60 gesetzt ist, dann würde das Device-Reading &amp;quot;presence&amp;quot; auf &amp;quot;absent&amp;quot; wechseln, wenn innerhalb von 60-120 Sekunden keine Werte empfangen werden.&lt;br /&gt;
&lt;br /&gt;
Also wäre zum Beispiel die ESP Easy Firmware so zu konfigurieren, dass mindestens ein Wert alle 60 Sekunden gesendet wird. Das Interval-Attribut des entsprechenden FHEM ESPEasy Device müsste ebenfalls auf 60 (default) gesetzt werden. Ein paar Sekunden Toleranz sind im ESPEasy Modul eingebaut.&lt;br /&gt;
&lt;br /&gt;
Wenn man kein ESP Easy Device hat, das Daten an FHEM sendet, dann kann man zusätzlich einen der &amp;quot;System Info&amp;quot; Werte senden lassen und &#039;&#039;combineDevices&#039;&#039; für diesen ESP aktivieren. Es reicht nämlich, wenn ein Reading regelmäßig aktualisiert wird.&lt;br /&gt;
&lt;br /&gt;
Wenn die Presence Erkennung nicht genutzt werden soll, dann muss das Attribut &#039;&#039;presenceCheck&#039;&#039; auf 0 gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
== Sicherheit ==&lt;br /&gt;
&lt;br /&gt;
Wenn eine ESPEasy Bridge in FHEM eingerichtet wurde, dann werden Verbindungen nur von IP Adressen aus [https://tools.ietf.org/html/rfc1918 privaten Bereichen] zugelassen.&lt;br /&gt;
&lt;br /&gt;
Wenn ESP Easy Geräte außerhalb dieser Bereiche Daten an FHEM senden (z.B. über das Internet), dann muss das in der ESPEasy Bridge konfiguriert werden, andernfalls wird die Verbindung abgewiesen.&lt;br /&gt;
&lt;br /&gt;
Einerseits muss die IP Adresse bzw. der IP Bereich erlaubt (Attribute &#039;&#039;allowedIPs&#039;&#039;, &#039;&#039;deniedIPs&#039;&#039;), andererseits die Authentifizierung über &amp;quot;Basic Auth&amp;quot; in der ESPEasy Bridge eingerichtet werden.&lt;br /&gt;
Die Authentifizierung wird über das Attribut &#039;&#039;authentication&#039;&#039; eingeschaltet. Die Benutzerdaten für die Authentifizierung werden über die Set-Befehle &#039;&#039;user&#039;&#039; und &#039;&#039;pass&#039;&#039; der Bridge eingegeben&lt;br /&gt;
{{Hinweis|Hinweis: Username und Passwort werden unverschlüsselt in ./FHEM/FhemUtils/uniqueID gespeichert.}}&lt;br /&gt;
&lt;br /&gt;
=== Attribut authentication ===&lt;br /&gt;
Beispiel:&lt;br /&gt;
 set &amp;lt;espbridge&amp;gt; user MeinUserName&lt;br /&gt;
 set &amp;lt;espbridge&amp;gt; pass sehrgeheim&lt;br /&gt;
 attr &amp;lt;espbridge&amp;gt; authentication 1&lt;br /&gt;
&lt;br /&gt;
=== Attribute allowedIPs / deniedIPs ===&lt;br /&gt;
Beispiel:&lt;br /&gt;
 attr &amp;lt;espbridge&amp;gt; allowedIPs 192.0.2.0/24   # erlaubt ist 192.0.2.0 bis 192.0.2.255&lt;br /&gt;
 attr &amp;lt;espbridge&amp;gt; deniedIPs 192.0.2.0/29    # ausgeschlossen werden aber die IPs von 192.0.2.0 bis 192.0.2.7&lt;br /&gt;
&lt;br /&gt;
Das Attribut &#039;&#039;deniedIPs&#039;&#039; hat Vorrang vor &#039;&#039;allowedIPs&#039;&#039;. Das bedeutet, dass verbotene IPs niemals eine Verbindung aufbauen können, auch wenn sie vorher erlaubt wurden.&lt;br /&gt;
&lt;br /&gt;
Regular Expressions sind können ebenfalls verwendet werden:&lt;br /&gt;
 attr &amp;lt;espbridge&amp;gt; allowedIPs 192.0.2.1([0-4][0-9]|50)     # erlaubt IP von 192.168.30.100 bis 192.168.30.150&lt;br /&gt;
&lt;br /&gt;
Alle Details dazu sind in der {{Link2CmdRef|Anker=ESPEasy_bridge_attr_allowedips|Lang=en|Label=Command Reference}} beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Erweiterte Beispiele==&lt;br /&gt;
Hier ein paar Beispiele für unterschiedlichste Anwendungsfälle&lt;br /&gt;
&lt;br /&gt;
===  Schalter in FHEMWEB mit devStateIcons ===&lt;br /&gt;
Beispiel für GPIO 12:&lt;br /&gt;
 attr &amp;lt;ESP&amp;gt; stateFormat {ReadingsVal($name,&amp;quot;presence&amp;quot;,&amp;quot;&amp;quot;) eq &amp;quot;absent&amp;quot; ? &amp;quot;absent&amp;quot; : ReadingsVal($name,&amp;quot;GPIO12&amp;quot;,&amp;quot;&amp;quot;)}&lt;br /&gt;
 attr &amp;lt;ESP&amp;gt; devStateIcon on:ios-on-green:off off:ios-off:on absent:10px-kreis-rot:statusRequest&lt;br /&gt;
 attr &amp;lt;ESP&amp;gt; eventMap /gpio 12 on:on/gpio 12 off:off/&lt;br /&gt;
 attr &amp;lt;ESP&amp;gt; webCmd :&lt;br /&gt;
&lt;br /&gt;
=== on-for-timer und off-for-timer ===&lt;br /&gt;
Beispiel für GPIO 15:&lt;br /&gt;
 attr &amp;lt;ESP&amp;gt; /longpulse 15 on:on-for-time:slider,0,1,60/longpulse 15 off:off-for-time:slider,0,1,60/&lt;br /&gt;
&lt;br /&gt;
=== (on|off)-for-timer und devStateIcons ===&lt;br /&gt;
Beispiel für GPIO 15:&lt;br /&gt;
 attr &amp;lt;ESP&amp;gt; eventMap /longpulse 15 on:on-for-time:slider,0,1,60/longpulse 15 off:off-for-time:slider,0,1,60/gpio 15 on:on/gpio 15 off:off/&lt;br /&gt;
&lt;br /&gt;
=== userSetCmds ===&lt;br /&gt;
Mithilfe des Attributes userSetCmds kann man:&lt;br /&gt;
*Einzelne ESP Easy Befehle nachrüsten&lt;br /&gt;
*Eigene oder nicht unterstützte Plugins integrieren&lt;br /&gt;
*Bereits integrierte Befehle verändern&lt;br /&gt;
*Befehle einzelner Plugins mappen: Statt &#039;set &amp;lt;dev&amp;gt; plugin_a on&#039; kann man so &#039;set &amp;lt;dev&amp;gt; on&#039; verwenden. Das wird z.B. benötigt, um FHEMs setExtentions oder auch um FHEMWEB Widgets nutzen zu können.&lt;br /&gt;
&lt;br /&gt;
Die genrelle Syntax des Attributes ist ein Perl Hash, der die Eigenschaften des ESP Easy Befehls/Plugins beschreibt.&lt;br /&gt;
Folgende Eigenschaften (Keys) gibt es:&lt;br /&gt;
*args: Anzahl der benötigten Parameter. Default: 0&lt;br /&gt;
*url: Die aufzurufende URL. Default: /control?cmd=&lt;br /&gt;
*widget: Das FHEMWEB Widget, dass beim FHEMWEB Setter des Befehls verwendet werden soll. Default: keines&lt;br /&gt;
*usage: Diese Zeichenkette wird zum einen angezeigt, wenn ein falscher oder zu wenige Parameter beim Befehlsaufruf angeben wurden. Zum anderen haben folgende Zeichenketten eine besondere Bedeutung:&lt;br /&gt;
**&amp;lt;0|1|off|on&amp;gt;: Innerhalb des FHEM Befehl kann on/off statt 0/1 angegeben werden. An die ESP Easy Firmware wird 0/1 gesendet.&lt;br /&gt;
**&amp;lt;pin&amp;gt;: Bei dem Paramater handelt es sin um einen GPIO Port. Aliasnamen können verwendet werden. Siehe: get &amp;lt;dev&amp;gt; pinMap&lt;br /&gt;
**&amp;lt;text&amp;gt;: Dieser Paramter wird url encoded an die ESP Easy Firmware gesendet. Wird für die Ausgabe auf (O)led Displays benötigt.&lt;br /&gt;
*cmds: Diese Eigenschaft (key) muss ebenfalls ein Perl Hash sein. Dieser Key definiert die Unterbefehle des Plugins. Alle oben genannten Eigenschaften (Keys) können benutzt werden. Nur der Key &#039;url&#039; kann nicht angegeben werden, da in diesem Fall die URL des Plugins verwendet wird.&lt;br /&gt;
&lt;br /&gt;
Ein einzelner neuer Befehl &#039;myCmd1&#039;:&lt;br /&gt;
 attr &amp;lt;dev&amp;gt; userSetCmds ( myCmd1 =&amp;gt; {} )&lt;br /&gt;
&lt;br /&gt;
Ein einzelner neuer Befehl &#039;myCmd1&#039;. Der erste Paramater enthält einen GPIO Port, der durch Aliasnamen ersetzt werden kann. Der zweite Paramater kann als on/off geschrieben werden, gesendet wird aber 1/0:&lt;br /&gt;
 attr &amp;lt;dev&amp;gt; userSetCmds ( myCmd1 =&amp;gt; { usage =&amp;gt; &amp;quot;&amp;lt;pin&amp;gt; &amp;lt;0|1|off|on&amp;gt;&amp;quot; } )&lt;br /&gt;
&lt;br /&gt;
Zwei neue Befehle, mit allen default Werten:&lt;br /&gt;
 attr &amp;lt;dev&amp;gt; userSetCmds ( myCmd1 =&amp;gt; {}, myCmd2 =&amp;gt; {} )&lt;br /&gt;
&lt;br /&gt;
Zwei neue Befehle, der zweite Befehl verwendet eine abweichende URL:&lt;br /&gt;
 attr &amp;lt;dev&amp;gt; userSetCmds ( myCmd1 =&amp;gt; {}, myCmd2 =&amp;gt; { url =&amp;gt; &amp;quot;/?cmd=&amp;quot; } )&lt;br /&gt;
&lt;br /&gt;
Beispiel für das fiktive Plugin &#039;LED&#039; mit den Unterbefehlen &#039;rgb&#039; und &#039;ct&#039;. Die Unterbefehle &#039;rgb&#039; und &#039;ct&#039; können ohne Angabe des Pluginnamens &#039;LED&#039; verwendet werden. Zusätzlich werden in der FHEMWEB-Ansicht die Slider Widgets hsv/ct verwendet:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;dev&amp;gt; userSetCmds (&lt;br /&gt;
  LED =&amp;gt; {&lt;br /&gt;
    args  =&amp;gt; 2,&lt;br /&gt;
    url   =&amp;gt; &amp;quot;/control?cmd=&amp;quot;,&lt;br /&gt;
    usage =&amp;gt; &amp;quot;&amp;lt;rgb|ct&amp;gt; &amp;lt;rrggbb|colortemp&amp;gt;&amp;quot;,&lt;br /&gt;
    cmds  =&amp;gt; {&lt;br /&gt;
      rgb =&amp;gt; { args =&amp;gt; 1, usage =&amp;gt; &amp;quot;&amp;lt;rrggbb&amp;gt;&amp;quot;,    widget =&amp;gt; &amp;quot;colorpicker,HSV&amp;quot; },&lt;br /&gt;
      ct  =&amp;gt; { args =&amp;gt; 1, usage =&amp;gt; &amp;quot;&amp;lt;colortemp&amp;gt;&amp;quot;, widget =&amp;gt; &amp;quot;colorpicker,CT,2000,10,4000&amp;quot; }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
) &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== useSetExtensions ===&lt;br /&gt;
Mithilfe der FHEM setExtentions kann man die Befehle on-for-timer, off-for-timer, on-till, off-till, blink, intervals, toggle, etc nutzen. Im Gegensatz zu den ESP Easy Firmware Befehlen &#039;pulse&#039;, &#039;longpulse&#039; und &#039;longpulse_ms&#039; laufen die Timer nicht innerhalb der ESP Easy Firmware, sondern in FHEM. Mit allen Vor- und Nachteilen.&lt;br /&gt;
Um die setExtensions nutzen zu können muss das Attribut &#039;useExtensions&#039; auf 1 gesetzt sein. Weiterhin müssen die Befehle &#039;on&#039; und &#039;off&#039;, für das entsprechende Device, verfügbar sein. Das kann man auf verschiedene Weisen realisieren:&lt;br /&gt;
==== setExtensions mit eventMap ====&lt;br /&gt;
In diesem Beispiel wird der Befehl &#039;set &amp;lt;dev&amp;gt; GPIO 15 on&#039; mithilfe des globalen Attributs &#039;eventMap&#039; auf den Befehl &#039;set &amp;lt;dev&amp;gt; on&#039; gemappt.  Gleiches gilt für &#039;off&#039;.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;dev&amp;gt; useSetExtensions 1&lt;br /&gt;
attr &amp;lt;dev&amp;gt; eventMap /gpio 15 on:^on$/gpio 15 off:^off$/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==== setExtentions mit userSetCmds ====&lt;br /&gt;
In diesem Beispiel wird nicht das globale Attribut &#039;eventMap&#039; benutzt, sondern das ESPEasy Attribut &#039;userSetCmds&#039;, um die &#039;on&#039; und &#039;off&#039; Befehle bereitzustellen.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;dev&amp;gt; useSetExtensions 1&lt;br /&gt;
attr &amp;lt;dev&amp;gt; userSetCmds (&lt;br /&gt;
myPlugin =&amp;gt; &lt;br /&gt;
  {&lt;br /&gt;
    args   =&amp;gt; 1,&lt;br /&gt;
    usage  =&amp;gt; &amp;quot;&amp;lt;0|1|off|on&amp;gt;&amp;quot;,&lt;br /&gt;
    cmds   =&amp;gt; {&lt;br /&gt;
      on  =&amp;gt; { widget =&amp;gt; &amp;quot;noArg&amp;quot; },&lt;br /&gt;
      off =&amp;gt; { widget =&amp;gt; &amp;quot;noArg&amp;quot; },&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Logging==&lt;br /&gt;
===ESPEasy Bridge===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
2018.02.10 08:48:06.197 4: Connection accepted from eb_10.0.0.148_25654&lt;br /&gt;
2018.02.10 08:48:06.199 4: ESPEasy eb_10.0.0.148_25654: Peer address accepted&lt;br /&gt;
2018.02.10 08:48:06.199 5: ESPEasy eb_10.0.0.148_25654: Received header: {&#039;Content-Length&#039; =&amp;gt; &#039;298&#039;,&#039;Authorization&#039; =&amp;gt; &#039;Basic ***** &#039;,&#039;Host&#039; =&amp;gt; &#039;10.0.0.53&#039;,&#039;Connection&#039; =&amp;gt; &#039;close&#039;}&lt;br /&gt;
2018.02.10 08:48:06.199 5: ESPEasy eb_10.0.0.148_25654: Received content: {&amp;quot;module&amp;quot;:&amp;quot;ESPEasy&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;1.02&amp;quot;,&amp;quot;data&amp;quot;:{&amp;quot;ESP&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;BA_SEN1&amp;quot;,&amp;quot;unit&amp;quot;:4,&amp;quot;version&amp;quot;:9,&amp;quot;build&amp;quot;:137,&amp;quot;sleep&amp;quot;:0,&amp;quot;ip&amp;quot;:&amp;quot;10.0.0.148&amp;quot;},&amp;quot;SENSOR&amp;quot;:{&amp;quot;0&amp;quot;:{&amp;quot;deviceName&amp;quot;:&amp;quot;DHT22&amp;quot;,&amp;quot;valueName&amp;quot;:&amp;quot;temperature&amp;quot;,&amp;quot;type&amp;quot;:2,&amp;quot;value&amp;quot;:&amp;quot;21.5&amp;quot;},&amp;quot;1&amp;quot;:{&amp;quot;deviceName&amp;quot;:&amp;quot;DHT22&amp;quot;,&amp;quot;valueName&amp;quot;:&amp;quot;humidity&amp;quot;,&amp;quot;type&amp;quot;:2,&amp;quot;value&amp;quot;:&amp;quot;12.2&amp;quot;}}}}&lt;br /&gt;
2018.02.10 08:48:06.200 4: ESPEasy eb_10.0.0.148_25654: Basic authentication accepted&lt;br /&gt;
2018.02.10 08:48:06.200 4: ESPEasy eb_10.0.0.148_25654: Send http close &#039;200 OK&#039;&lt;br /&gt;
2018.02.10 08:48:06.202 4: ESPEasy eb_10.0.0.148_25654: Src:&#039;BA_SEN1&#039;/&#039;DHT22&#039; =&amp;gt; ident:BA_SEN1 dev:ESPEasy_BA_SEN1 combinedDevice:1&lt;br /&gt;
2018.02.10 08:48:06.202 5: eb: dispatch BA_SEN1::10.0.0.148::1::0::1::i||unit||4||0|||i||sleep||0||0|||i||build||137||0|||i||version||9||0|||r||temperature||21.5||2|||r||humidity||12.2||2&lt;br /&gt;
2018.02.10 08:48:06.209 4: ESPEasy eb_10.0.0.148_25654: Closing tcp session.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Detail bedeuten die Logeinträge:&lt;br /&gt;
&lt;br /&gt;
;Connection accepted from eb_10.0.0.148_25654&lt;br /&gt;
:Eine TCP Verbindung wurde vom ESP (IP: 10.0.0.148, source port: 25654) zur Bridge &amp;quot;eb&amp;quot; aufgebaut.&lt;br /&gt;
&lt;br /&gt;
;ESPEasy eb_10.0.0.148_25654&lt;br /&gt;
:Es wurde ein temporäres ESPEasy Bridge Devices angelegt, das Daten von der IP 10.0.0.148 und Quellport 25654 empfängt.&lt;br /&gt;
&lt;br /&gt;
;Peer address accepted&lt;br /&gt;
:Die IP Adresse des ESP wurde akzeptiert und die empfangenen Daten werden nun verarbeitet. Wenn die IP Adresse nicht akzeptiert wird, dann wird &#039;&#039;&#039;Peer address rejected&#039;&#039;&#039; gelogged.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;Received header: {&#039;Content-Length&#039; =&amp;gt; &#039;298&#039;,&#039;Authorization&#039; =&amp;gt; &#039;Basic ***** &#039;,&#039;Host&#039; =&amp;gt; &#039;10.0.0.53&#039;,&#039;Connection&#039; =&amp;gt; &#039;close&#039;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:Diese &#039;&#039;received header&#039;&#039; Zeile enthält die Daten des Headers, die via HTTP vom ESP empfangen werden. Ein eventuell vorhandenes Passwort wird maskiert.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;Received content: {&amp;quot;module&amp;quot;:&amp;quot;ESPEasy&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;1.02&amp;quot;,&amp;quot;data&amp;quot;:&amp;quot;ESP&amp;quot;:&amp;quot;name&amp;quot;:&amp;quot;BA_SEN1&amp;quot;,&amp;quot;unit&amp;quot;:4,&amp;quot;version&amp;quot;:9,&amp;quot;build&amp;quot;:137,&amp;quot;sleep&amp;quot;:0,&amp;quot;ip&amp;quot;:&amp;quot;10.0.0.148&amp;quot;},&amp;quot;SENSOR&amp;quot;:&amp;quot;0&amp;quot;:{&amp;quot;deviceName&amp;quot;:&amp;quot;DHT22&amp;quot;,&amp;quot;valueName&amp;quot;:&amp;quot;temperature&amp;quot;,&amp;quot;type&amp;quot;:2,&amp;quot;value&amp;quot;:&amp;quot;21.5&amp;quot;},&amp;quot;1&amp;quot;:&amp;quot;deviceName&amp;quot;:&amp;quot;DHT22&amp;quot;,&amp;quot;valueName&amp;quot;:&amp;quot;humidity&amp;quot;,&amp;quot;type&amp;quot;:2,&amp;quot;value&amp;quot;:&amp;quot;12.2&amp;quot;}}}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:Diese &#039;&#039;received content&#039;&#039; Zeile enthält die Daten, die vom ESP via HTTP empfangenen werden. Mehr oder weniger Klartext im JSON Format.&lt;br /&gt;
&lt;br /&gt;
;Basic authentication accepted&lt;br /&gt;
:In diesem Schritt wird geprüft ob eine Authentifizierung erforderlich und im besten Fall auch korrekt ist.&lt;br /&gt;
:Folgende Meldungen wären an dieser Stelle auch möglich:&lt;br /&gt;
:*No basic authentication required (auf beiden Seiten ist keine basic auth eingerichtet)&lt;br /&gt;
:*No basic authentication active but credentials received (auf FHEM Seite ist keine basic auth eingerichtet, der ESP sendet aber basic auth)&lt;br /&gt;
:*Basic authentication rejected (Username oder Passwort passen nicht zusammen)&lt;br /&gt;
&lt;br /&gt;
;Send http close &#039;200 OK&#039;&lt;br /&gt;
:&amp;quot;Quittung&amp;quot; an den ESP senden. Daraufhin wird der ESP die Verbindung beenden.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;Src:&#039;BA_SEN1&#039;/&#039;DHT22&#039; =&amp;gt; ident:BA_SEN1 dev:ESPEasy_BA_SEN1 combinedDevice:1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:Die Daten wurden vom ESP mit dem Namen BA_SEN1 und dem ESP Device DHT22 gesendet. Auf FHEM Seite werden die Daten dem Device mit dem Ident &amp;quot;BA_SEN1&amp;quot; zugewiesen. Dieses Ident wird vom FHEM Device ESPEasy_BA_SEN1 verwendet. Für diesen ESP ist das Attribut &#039;&#039;combineDevices&#039;&#039; wirksam. Wäre &#039;&#039;combineDevices&#039;&#039; nicht aktiv, dann würde das Ident &amp;quot;BA_SEN1_DHT22&amp;quot; lauten.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;dispatch BA_SEN1::10.0.0.148::1::0::1::i||unit||4||0|||i||sleep||0||0|||i||build||137||0|||i||version||9||0|||r||temperature||21.5||2|||r||humidity||12.2||2&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:Die Daten werden nun von der Bridge an das logische ESPEasy Device weitergegeben.&lt;br /&gt;
:Im Details bedeuten die einzelnen Elemente dieser Zeichenkette:&lt;br /&gt;
:*&#039;&#039;&#039;BA_SEN1::&#039;&#039;&#039;: Daten an das FHEM Device mit dem Ident BA_SEN1 schicken.&lt;br /&gt;
:*&#039;&#039;&#039;10.0.0.148::&#039;&#039;&#039;: IP Adresse des ESPs&lt;br /&gt;
:*&#039;&#039;&#039;1::&#039;&#039;&#039;: autocreate enabled? ja&lt;br /&gt;
:*&#039;&#039;&#039;0::&#039;&#039;&#039;: autosave enabled? nein&lt;br /&gt;
:*&#039;&#039;&#039;1::&#039;&#039;&#039;: wird nicht mehr benutzt&lt;br /&gt;
:*&#039;&#039;&#039;i||unit||4||0|||&#039;&#039;&#039;: Der ESP hat die Unit Nummer 4&lt;br /&gt;
:*&#039;&#039;&#039;i||sleep||1||0|||&#039;&#039;&#039;: Ist der ESP für den deep sleep mode konfiguriert? ja&lt;br /&gt;
:*&#039;&#039;&#039;i||build||137||0|||&#039;&#039;&#039;: ESPEasy build version 137&lt;br /&gt;
:*&#039;&#039;&#039;i||version||9||0|||&#039;&#039;&#039;: ESPEasy Release 9&lt;br /&gt;
:*&#039;&#039;&#039;r||temperature||21.5||2|||&#039;&#039;&#039;: Readingname: temperature, Wert: 21.5, Sensortyp: 2&lt;br /&gt;
:*&#039;&#039;&#039;r||humidity||12.2||2&#039;&#039;&#039;: Readingname: humidity, Wert 12.2, Sensortyp: 2&lt;br /&gt;
:Je nach ESPEasy Firmware Version können die Internals (Zeilen mit i am Anfang) auch &lt;br /&gt;
zusätzliche/andere Informationen aufweisen.&lt;br /&gt;
&lt;br /&gt;
;Closing tcp session.&lt;br /&gt;
:Die tcp Verbindung wird geschlossen, das temporäre ESPEasy Bridge Device wird gelöscht.&lt;br /&gt;
&lt;br /&gt;
===ESPEasy Device===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
2018.02.10 10:08:41.235 5: ESPEasy ESPEasy_BA_SEN1: Received: BA_SEN1::10.0.0.148::1::0::1::i||unit||4||0|||i||sleep||0||0|||i||build||137||0|||i||version||9||0|||r||temperature||21.2||2|||r||humidity||10.3||2&lt;br /&gt;
2018.02.10 10:08:41.236 4: ESPEasy ESPEasy_BA_SEN1: temperature: 21.2&lt;br /&gt;
2018.02.10 10:08:41.237 4: ESPEasy ESPEasy_BA_SEN1: humidity: 10.3&lt;br /&gt;
2018.02.10 10:08:41.237 5: ESPEasy ESPEasy_BA_SEN1: Internals: unit:4 sleep:0 build:137 version:9&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Im Detail:&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;Received: BA_SEN1::10.0.0.148::1::0::1::i||unit||4||0|||i||sleep||0||0|||i||build||137||0|||i||version||9||0|||r||temperature||21.2||2|||r||humidity||10.3||2&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:Das ist wieder die, bereits oben beschriebene, &#039;&#039;dispatch&#039;&#039; Zeichenkette, die jetzt vom logischen Device empfangen wurde.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;ESPEasy ESPEasy_BA_SEN1: temperature: 21.2&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;ESPEasy ESPEasy_BA_SEN1: humidity: 10.3&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:Die Readings &#039;&#039;temperature&#039;&#039; und &#039;&#039;humidity&#039;&#039; wurden aktualisiert.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;ESPEasy ESPEasy_BA_SEN1: Internals: unit:4 sleep:1 build:137 version:9&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:Die Internals &#039;&#039;unit&#039;&#039;, &#039;&#039;sleep&#039;&#039;, &#039;&#039;build&#039;&#039; und &#039;&#039;version&#039;&#039; wurden aktualisiert.&lt;br /&gt;
&lt;br /&gt;
===Zusätzliche Logeinträge===&lt;br /&gt;
Wird ein Device via Autocreate angelegt, gibt es zusätzliche Einträge im Logfile&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
2018.02.10 10:23:52.243 4: ESPEasy eb_10.0.0.148_3446: Src:&#039;BA_SEN1&#039;/&#039;DHT22&#039; =&amp;gt; ident:BA_SEN1 dev:undef combinedDevice:1&lt;br /&gt;
2018.02.10 10:23:52.243 2: ESPEasy eb: Autocreate ESPEasy_BA_SEN1 ESPEasy 10.0.0.148 80 eb BA_SEN1&lt;br /&gt;
2018.02.10 10:23:52.244 4: ESPEasy ESPEasy_BA_SEN1: Opened for BA_SEN1 10.0.0.148:80 using bridge eb&lt;br /&gt;
2018.02.10 10:23:52.258 5: ESPEasy ESPEasy_BA_SEN1: received event: ATTR ESPEasy_BA_SEN1 setState 3&lt;br /&gt;
2018.02.10 10:23:52.262 5: ESPEasy ESPEasy_BA_SEN1: received event: ATTR ESPEasy_BA_SEN1 Interval 300&lt;br /&gt;
2018.02.10 10:23:52.262 5: ESPEasy ESPEasy_BA_SEN1: Start internalTimer +304 =&amp;gt; 2018-02-10 10:28:57&lt;br /&gt;
2018.02.10 10:23:52.266 5: ESPEasy ESPEasy_BA_SEN1: received event: ATTR ESPEasy_BA_SEN1 presenceCheck 1&lt;br /&gt;
2018.02.10 10:23:52.269 5: ESPEasy ESPEasy_BA_SEN1: received event: ATTR ESPEasy_BA_SEN1 readingSwitchText 1&lt;br /&gt;
2018.02.10 10:23:52.271 2: ESPEasy eb: Autosave is disabled: Do not forget to save changes.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
*{{Link2CmdRef|Anker=ESPEasy|Lang=en|Label=FHEM ESPEasy Modul-Dokumentation}}&lt;br /&gt;
*[https://www.letscontrolit.com/wiki/index.php/ESPEasy ESP Easy Firmware Wiki] &lt;br /&gt;
*[https://www.letscontrolit.com/wiki/index.php/ESPEasy_Command_Reference ESP Easy Command Reference]&lt;br /&gt;
*[https://www.letscontrolit.com/wiki/index.php/Tutorial_Rules ESP Easy Rules]&lt;br /&gt;
&lt;br /&gt;
==Credits==&lt;br /&gt;
Vielen Dank an:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;ESP Easy Team&#039;&#039;&#039;, für die kontinuierliche Pflege und Erweiterungen der Software&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Drhrin&#039;&#039;&#039;, für die initiale Umsetzung dieses Wiki-Eintags&lt;/div&gt;</summary>
		<author><name>DDT</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=ESPEasy&amp;diff=28047</id>
		<title>ESPEasy</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=ESPEasy&amp;diff=28047"/>
		<updated>2018-10-12T09:20:07Z</updated>

		<summary type="html">&lt;p&gt;DDT: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuerung eines Espressif ESP8266 WLAN-SoC&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef= &lt;br /&gt;
|ModForumArea=Bastelecke/ESP8266&lt;br /&gt;
|ModFTopic=55728&lt;br /&gt;
|ModTechName=34_ESPEasy.pm&lt;br /&gt;
|ModOwner={{Link2FU|7465|dev0}}&lt;br /&gt;
}}&lt;br /&gt;
Dieser Wiki-Artikel soll und kann die {{Link2CmdRef|Anker=ESPEasy|Lang=en|Label=ESPEasy Modul-Dokumentation}}(aka FHEM Command Reference) nicht ersetzen, sondern ergänzt die Dokumentation nur um ein paar Informationen.&lt;br /&gt;
&lt;br /&gt;
== Grundlegende ESP Easy Einstellungen ==&lt;br /&gt;
&lt;br /&gt;
Diese Einstellungen sind in der Weboberfläche des ESP vorzunehmen und bewirken u.a., dass für jedes ESPEasy-Device ein FHEM Device angelegt wird. Das kann bspw. für einen ESP sinnvoll sein, der Relays über GPIOs schalten soll (ESPEasy Device-Type &#039;&#039;Switch Input&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
*Es muss ein einmaliger ESP Devicename vergeben werden (&#039;&#039;Config&#039;&#039; -&amp;gt; &#039;&#039;Main Settings&#039;&#039; -&amp;gt;&#039;&#039;Name&#039;&#039;)&lt;br /&gt;
*Die verwendeten ESP Easy Devices sollten einen ESP-weit einmaligen Namen erhalten (&#039;&#039;Device&#039;&#039; -&amp;gt; &#039;&#039;Edit&#039;&#039; -&amp;gt; &#039;&#039;Task Settings&#039;&#039; -&amp;gt; &#039;&#039;Name&#039;&#039;). Ist dieser Name nicht eindeutig oder wird nicht vergeben, dann gibt es u.a. Probleme mit ESP Easy Rules [link].&lt;br /&gt;
*Jeder Wert, der gesendet werden soll, benötigt ebenfalls einen Namen, der in diesem ESP Device einmalig sein muss (&#039;&#039;Device&#039;&#039; -&amp;gt; &#039;&#039;Edit&#039;&#039; -&amp;gt; &#039;&#039;Optional Settings&#039;&#039; -&amp;gt; &#039;&#039;Value Name&#039;&#039;)&lt;br /&gt;
*Soll dieser Wert nun automatisch in einem Interval von x Sekunden (an FHEM) gesendet werden, dann muss noch das &#039;&#039;Delay&#039;&#039; (&#039;&#039;Device&#039;&#039; -&amp;gt; &#039;&#039;Edit&#039;&#039; -&amp;gt; &#039;&#039;Task Settings&#039;&#039; -&amp;gt; &#039;&#039;Delay&#039;&#039;) angegeben und die Option &#039;&#039;Send Data&#039;&#039; (&#039;&#039;Device&#039;&#039; -&amp;gt; &#039;&#039;Edit&#039;&#039; -&amp;gt; &#039;&#039;Task Settings&#039;&#039; -&amp;gt; &#039;&#039;Send Data&#039;&#039;) aktiviert werden. Die Option &#039;&#039;Send Boot State&#039;&#039; ist an dieser Stelle ebenfalls sinnvoll.&lt;br /&gt;
&lt;br /&gt;
=== Attribut combineDevices ===&lt;br /&gt;
&lt;br /&gt;
Wenn das oben genannte Verhalten (ein FHEM Device pro ESP Easy Device) nicht gewünscht ist, dann kann man mittels des Attributes &#039;&#039;combineDevices&#039;&#039; der {{Link2CmdRef|Anker=ESPEasy_bridge_define|Lang=en|Label=ESPEasy Bridge}} einstellen, ob die ESP Easy Devices eines einzelnen ESPs in ein FHEM Device zusammengeführt werden sollen.&lt;br /&gt;
Diese Funktionalität kann man global einschalten, indem man dem Attribut &#039;&#039;combineDevices&#039;&#039; den Wert &#039;&#039;1&#039;&#039; gibt.&lt;br /&gt;
&lt;br /&gt;
Will man nur von bestimmten ESPs die Devices zusammen fassen, dann kann man eine komma-getrennte Liste der ESPs angeben. Die Liste kann aus ESP Namen, IP Adressen und/oder Netzwerkbereichen bestehen. Netzwerkbereiche können mit einer Netzmaske in dotted decimal (/255.255.255.0) oder in bitmask (/24) Schreibweise angegeben werden. Hostnamen und FQDNs werden nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
Beispiele:&lt;br /&gt;
 attr &amp;lt;esp&amp;gt; combineDevices ESP1,ESP2&lt;br /&gt;
 attr &amp;lt;esp&amp;gt; combineDevices 10.0.0.148,10.0.0.149&lt;br /&gt;
 attr &amp;lt;esp&amp;gt; combineDevices 192.168.124.0/24&lt;br /&gt;
 attr &amp;lt;esp&amp;gt; combineDevices 192.168.124.0/255.255.255.0&lt;br /&gt;
 attr &amp;lt;esp&amp;gt; combineDevices ESP1,ESP2,10.0.0.0/8,192.168.0.0/255.255.0.0&lt;br /&gt;
&lt;br /&gt;
IPv6 Adressen/Bereiche werden zwar von FHEM, allerdings zur Zeit noch nicht von der öffentlichen ESP Easy Distribution unterstützt.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
 attr &amp;lt;esp&amp;gt; combineDevices 2001:1a50:50a8::148,2001:abcd:efff::/48&lt;br /&gt;
&lt;br /&gt;
== Presence Erkennung ==&lt;br /&gt;
Die &amp;quot;Presence Detection&amp;quot;, also die Erkennung, ob ein ESP noch Daten sendet, wurde anhand des Alters der empfangenen (Sensor-)Werte realisiert. Vereinfacht gesagt: Werden keine Readings mehr innerhalb von x Sekunden empfangen (siehe Device-Attribut &#039;&#039;Interval&#039;&#039;), wird das FHEM Device als &amp;quot;absent&amp;quot; gekennzeichnet. Das hat den Vorteil, dass auch ESP Easy Devices, die zwischen dem Senden von Daten in den so genannten Deep Sleep Modus gehen, erkannt werden können.&lt;br /&gt;
&lt;br /&gt;
Das Attribut &#039;&#039;Interval&#039;&#039; gibt unter anderem vor, in welchem zeitlichen Abstand Werte vom ESP erwartet werden, damit der ESP als &amp;quot;present&amp;quot; (und nicht absent) markiert wird.&lt;br /&gt;
&lt;br /&gt;
Wenn ein ESP Easy Device Werte alle 60 Sekunden sendet (Option &#039;&#039;Delay&#039;&#039; in der ESP Easy Device GUI) und das FHEM Device Interval auf 60 gesetzt ist, dann würde das Device-Reading &amp;quot;presence&amp;quot; auf &amp;quot;absent&amp;quot; wechseln, wenn innerhalb von 60-120 Sekunden keine Werte empfangen werden.&lt;br /&gt;
&lt;br /&gt;
Also wäre zum Beispiel die ESP Easy Firmware so zu konfigurieren, dass mindestens ein Wert alle 60 Sekunden gesendet wird. Das Interval-Attribut des entsprechenden FHEM ESPEasy Device müsste ebenfalls auf 60 (default) gesetzt werden. Ein paar Sekunden Toleranz sind im ESPEasy Modul eingebaut.&lt;br /&gt;
&lt;br /&gt;
Wenn man kein ESP Easy Device hat, das Daten an FHEM sendet, dann kann man zusätzlich einen der &amp;quot;System Info&amp;quot; Werte senden lassen und &#039;&#039;combineDevices&#039;&#039; für diesen ESP aktivieren. Es reicht nämlich, wenn ein Reading regelmäßig aktualisiert wird.&lt;br /&gt;
&lt;br /&gt;
Wenn die Presence Erkennung nicht genutzt werden soll, dann muss das Attribut &#039;&#039;presenceCheck&#039;&#039; auf 0 gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
== Sicherheit ==&lt;br /&gt;
&lt;br /&gt;
Wenn eine ESPEasy Bridge in FHEM eingerichtet wurde, dann werden Verbindungen nur von IP Adressen aus [https://tools.ietf.org/html/rfc1918 privaten Bereichen] zugelassen.&lt;br /&gt;
&lt;br /&gt;
Wenn ESP Easy Geräte außerhalb dieser Bereiche Daten an FHEM senden (z.B. über das Internet), dann muss das in der ESPEasy Bridge konfiguriert werden, andernfalls wird die Verbindung abgewiesen.&lt;br /&gt;
&lt;br /&gt;
Einerseits muss die IP Adresse bzw. der IP Bereich erlaubt (Attribute &#039;&#039;allowedIPs&#039;&#039;, &#039;&#039;deniedIPs&#039;&#039;), andererseits die Authentifizierung über &amp;quot;Basic Auth&amp;quot; in der ESPEasy Bridge eingerichtet werden.&lt;br /&gt;
Die Authentifizierung wird über das Attribut &#039;&#039;authentication&#039;&#039; eingeschaltet. Die Benutzerdaten für die Authentifizierung werden über die Set-Befehle &#039;&#039;user&#039;&#039; und &#039;&#039;pass&#039;&#039; der Bridge eingegeben&lt;br /&gt;
{{Hinweis|Hinweis: Username und Passwort werden unverschlüsselt in ./FHEM/FhemUtils/uniqueID gespeichert.}}&lt;br /&gt;
&lt;br /&gt;
=== Attribut authentication ===&lt;br /&gt;
Beispiel:&lt;br /&gt;
 set &amp;lt;espbridge&amp;gt; user MeinUserName&lt;br /&gt;
 set &amp;lt;espbridge&amp;gt; pass sehrgeheim&lt;br /&gt;
 attr &amp;lt;espbridge&amp;gt; authentication 1&lt;br /&gt;
&lt;br /&gt;
=== Attribute allowedIPs / deniedIPs ===&lt;br /&gt;
Beispiel:&lt;br /&gt;
 attr &amp;lt;espbridge&amp;gt; allowedIPs 192.0.2.0/24   # erlaubt ist 192.0.2.0 bis 192.0.2.255&lt;br /&gt;
 attr &amp;lt;espbridge&amp;gt; deniedIPs 192.0.2.0/29    # ausgeschlossen werden aber die IPs von 192.0.2.0 bis 192.0.2.7&lt;br /&gt;
&lt;br /&gt;
Das Attribut &#039;&#039;deniedIPs&#039;&#039; hat Vorrang vor &#039;&#039;allowedIPs&#039;&#039;. Das bedeutet, dass verbotene IPs niemals eine Verbindung aufbauen können, auch wenn sie vorher erlaubt wurden.&lt;br /&gt;
&lt;br /&gt;
Regular Expressions sind können ebenfalls verwendet werden:&lt;br /&gt;
 attr &amp;lt;espbridge&amp;gt; allowedIPs 192.0.2.1([0-4][0-9]|50)     # erlaubt IP von 192.168.30.100 bis 192.168.30.150&lt;br /&gt;
&lt;br /&gt;
Alle Details dazu sind in der {{Link2CmdRef|Anker=ESPEasy_bridge_attr_allowedips|Lang=en|Label=Command Reference}} beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Erweiterte Beispiele==&lt;br /&gt;
Hier ein paar Beispiele für unterschiedlichste Anwendungsfälle&lt;br /&gt;
&lt;br /&gt;
===  Schalter in FHEMWEB mit devStateIcons ===&lt;br /&gt;
Beispiel für GPIO 12:&lt;br /&gt;
 attr &amp;lt;ESP&amp;gt; stateFormat {ReadingsVal($name,&amp;quot;presence&amp;quot;,&amp;quot;&amp;quot;) eq &amp;quot;absent&amp;quot; ? &amp;quot;absent&amp;quot; : ReadingsVal($name,&amp;quot;GPIO12&amp;quot;,&amp;quot;&amp;quot;)}&lt;br /&gt;
 attr &amp;lt;ESP&amp;gt; devStateIcon on:ios-on-green:off off:ios-off:on absent:10px-kreis-rot:statusRequest&lt;br /&gt;
 attr &amp;lt;ESP&amp;gt; eventMap /gpio 12 on:on/gpio 12 off:off/&lt;br /&gt;
 attr &amp;lt;ESP&amp;gt; webCmd :&lt;br /&gt;
&lt;br /&gt;
=== on-for-timer und off-for-timer ===&lt;br /&gt;
Beispiel für GPIO 15:&lt;br /&gt;
 attr &amp;lt;ESP&amp;gt; /longpulse 15 on:on-for-time:slider,0,1,60/longpulse 15 off:off-for-time:slider,0,1,60/&lt;br /&gt;
&lt;br /&gt;
=== (on|off)-for-timer und devStateIcons ===&lt;br /&gt;
Beispiel für GPIO 15:&lt;br /&gt;
 attr &amp;lt;ESP&amp;gt; eventMap /longpulse 15 on:on-for-time:slider,0,1,60/longpulse 15 off:off-for-time:slider,0,1,60/gpio 15 on:on/gpio 15 off:off/&lt;br /&gt;
&lt;br /&gt;
=== userSetCmds ===&lt;br /&gt;
Mithilfe des Attributes userSetCmds kann man:&lt;br /&gt;
*Einzelne ESP Easy Befehle nachrüsten&lt;br /&gt;
*Eigene oder nicht unterstützte Plugins integrieren&lt;br /&gt;
*Bereits integrierte Befehle verändern&lt;br /&gt;
*Befehle einzelner Plugins mappen: Statt &#039;set &amp;lt;dev&amp;gt; plugin_a on&#039; kann man so &#039;set &amp;lt;dev&amp;gt; on&#039; verwenden. Das wird z.B. benötigt, um FHEMs setExtentions oder auch um FHEMWEB Widgets nutzen zu können.&lt;br /&gt;
&lt;br /&gt;
Die genrelle Syntax des Attributes ist ein Perl Hash, der die Eigenschaften des ESP Easy Befehls/Plugins beschreibt.&lt;br /&gt;
Folgende Eigenschaften (Keys) gibt es:&lt;br /&gt;
*args: Anzahl der benötigten Parameter. Default: 0&lt;br /&gt;
*url: Die aufzurufende URL. Default: /control?cmd=&lt;br /&gt;
*widget: Das FHEMWEB Widget, dass beim FHEMWEB Setter des Befehls verwendet werden soll. Default: keines&lt;br /&gt;
*usage: Diese Zeichenkette wird zum einen angezeigt, wenn ein falscher oder zu wenige Parameter beim Befehlsaufruf angeben wurden. Zum anderen haben folgende Zeichenketten eine besondere Bedeutung:&lt;br /&gt;
**&amp;lt;0|1|off|on&amp;gt;: Innerhalb des FHEM Befehl kann on/off statt 0/1 angegeben werden. An die ESP Easy Firmware wird 0/1 gesendet.&lt;br /&gt;
**&amp;lt;pin&amp;gt;: Bei dem Paramater handelt es sin um einen GPIO Port. Aliasnamen können verwendet werden. Siehe: get &amp;lt;dev&amp;gt; pinMap&lt;br /&gt;
**&amp;lt;text&amp;gt;: Dieser Paramter wird url encoded an die ESP Easy Firmware gesendet. Wird für die Ausgabe auf (O)led Displays benötigt.&lt;br /&gt;
*cmds: Diese Eigenschaft (key) muss ebenfalls ein Perl Hash sein. Dieser Key definiert die Unterbefehle des Plugins. Alle oben genannten Eigenschaften (Keys) können benutzt werden. Nur der Key &#039;url&#039; kann nicht angegeben werden, da in diesem Fall die URL des Plugins verwendet wird.&lt;br /&gt;
&lt;br /&gt;
Ein einzelner neuer Befehl &#039;myCmd1&#039;:&lt;br /&gt;
 attr &amp;lt;dev&amp;gt; userSetCmds ( myCmd1 =&amp;gt; {} )&lt;br /&gt;
&lt;br /&gt;
Ein einzelner neuer Befehl &#039;myCmd1&#039;. Der erste Paramater enthält einen GPIO Port, der durch Aliasnamen ersetzt werden kann. Der zweite Paramater kann als on/off geschrieben werden, gesendet wird aber 1/0:&lt;br /&gt;
 attr &amp;lt;dev&amp;gt; userSetCmds ( myCmd1 =&amp;gt; { usage =&amp;gt; &amp;quot;&amp;lt;pin&amp;gt; &amp;lt;0|1|off|on&amp;gt;&amp;quot; } )&lt;br /&gt;
&lt;br /&gt;
Zwei neue Befehle, mit allen default Werten:&lt;br /&gt;
 attr &amp;lt;dev&amp;gt; userSetCmds ( myCmd1 =&amp;gt; {}, myCmd2 =&amp;gt; {} )&lt;br /&gt;
&lt;br /&gt;
Zwei neue Befehle, der zweite Befehl verwendet eine abweichende URL:&lt;br /&gt;
 attr &amp;lt;dev&amp;gt; userSetCmds ( myCmd1 =&amp;gt; {}, myCmd2 =&amp;gt; { url =&amp;gt; &amp;quot;/?cmd=&amp;quot; } )&lt;br /&gt;
&lt;br /&gt;
Beispiel für das fiktive Plugin &#039;LED&#039; mit den Unterbefehlen &#039;rgb&#039; und &#039;ct&#039;. Die Unterbefehle &#039;rgb&#039; und &#039;ct&#039; können ohne Angabe des Pluginnamens &#039;LED&#039; verwendet werden. Zusätzlich werden in der FHEMWEB-Ansicht die Slider Widgets hsv/ct verwendet:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;dev&amp;gt; userSetCmds (&lt;br /&gt;
  LED =&amp;gt; {&lt;br /&gt;
    args  =&amp;gt; 2,&lt;br /&gt;
    url   =&amp;gt; &amp;quot;/control?cmd=&amp;quot;,&lt;br /&gt;
    usage =&amp;gt; &amp;quot;&amp;lt;rgb|ct&amp;gt; &amp;lt;rrggbb|colortemp&amp;gt;&amp;quot;,&lt;br /&gt;
    cmds  =&amp;gt; {&lt;br /&gt;
      rgb =&amp;gt; { args =&amp;gt; 1, usage =&amp;gt; &amp;quot;&amp;lt;rrggbb&amp;gt;&amp;quot;,    widget =&amp;gt; &amp;quot;colorpicker,HSV&amp;quot; },&lt;br /&gt;
      ct  =&amp;gt; { args =&amp;gt; 1, usage =&amp;gt; &amp;quot;&amp;lt;colortemp&amp;gt;&amp;quot;, widget =&amp;gt; &amp;quot;colorpicker,CT,2000,10,4000&amp;quot; }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
) &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== useSetExtensions ===&lt;br /&gt;
Mithilfe der FHEM setExtentions kann man die Befehle on-for-timer, off-for-timer, on-till, off-till, blink, intervals, toggle, etc nutzen. Im Gegensatz zu den ESP Easy Firmware Befehlen &#039;pulse&#039;, &#039;longpulse&#039; und &#039;longpulse_ms&#039; laufen die Timer nicht innerhalb der ESP Easy Firmware, sondern in FHEM. Mit allen Vor- und Nachteilen.&lt;br /&gt;
Um die setExtensions nutzen zu können muss das Attribut &#039;useExtensions&#039; auf 1 gesetzt sein. Weiterhin müssen die Befehle &#039;on&#039; und &#039;off&#039;, für das entsprechende Device, verfügbar sein. Das kann man auf verschiedene Weisen realisieren:&lt;br /&gt;
==== setExtensions mit eventMap ====&lt;br /&gt;
In diesem Beispiel wird der Befehl &#039;set &amp;lt;dev&amp;gt; GPIO 15 on&#039; mithilfe des globalen Attributs &#039;eventMap&#039; auf den Befehl &#039;set &amp;lt;dev&amp;gt; on&#039; gemappt.  Gleiches gilt für &#039;off&#039;.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;dev&amp;gt; useSetExtensions 1&lt;br /&gt;
attr &amp;lt;dev&amp;gt; eventMap /gpio 15 on:^on$/gpio 15 off:^off$/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==== setExtentions mit userSetCmds ====&lt;br /&gt;
In diesem Beispiel wird nicht das globale Attribut &#039;eventMap&#039; benutzt, sondern das ESPEasy Attribut &#039;userSetCmds&#039;, um die &#039;on&#039; und &#039;off&#039; Befehle bereitzustellen.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;dev&amp;gt; useSetExtensions 1&lt;br /&gt;
attr &amp;lt;dev&amp;gt; userSetCmds (&lt;br /&gt;
myPlugin =&amp;gt; &lt;br /&gt;
  {&lt;br /&gt;
    args   =&amp;gt; 1,&lt;br /&gt;
    usage  =&amp;gt; &amp;quot;&amp;lt;0|1|off|on&amp;gt;&amp;quot;,&lt;br /&gt;
    cmds   =&amp;gt; {&lt;br /&gt;
      on  =&amp;gt; { widget =&amp;gt; &amp;quot;noArg&amp;quot; },&lt;br /&gt;
      off =&amp;gt; { widget =&amp;gt; &amp;quot;noArg&amp;quot; },&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Logging==&lt;br /&gt;
===ESPEasy Bridge===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
2018.02.10 08:48:06.197 4: Connection accepted from eb_10.0.0.148_25654&lt;br /&gt;
2018.02.10 08:48:06.199 4: ESPEasy eb_10.0.0.148_25654: Peer address accepted&lt;br /&gt;
2018.02.10 08:48:06.199 5: ESPEasy eb_10.0.0.148_25654: Received header: {&#039;Content-Length&#039; =&amp;gt; &#039;298&#039;,&#039;Authorization&#039; =&amp;gt; &#039;Basic ***** &#039;,&#039;Host&#039; =&amp;gt; &#039;10.0.0.53&#039;,&#039;Connection&#039; =&amp;gt; &#039;close&#039;}&lt;br /&gt;
2018.02.10 08:48:06.199 5: ESPEasy eb_10.0.0.148_25654: Received content: {&amp;quot;module&amp;quot;:&amp;quot;ESPEasy&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;1.02&amp;quot;,&amp;quot;data&amp;quot;:{&amp;quot;ESP&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;BA_SEN1&amp;quot;,&amp;quot;unit&amp;quot;:4,&amp;quot;version&amp;quot;:9,&amp;quot;build&amp;quot;:137,&amp;quot;sleep&amp;quot;:0,&amp;quot;ip&amp;quot;:&amp;quot;10.0.0.148&amp;quot;},&amp;quot;SENSOR&amp;quot;:{&amp;quot;0&amp;quot;:{&amp;quot;deviceName&amp;quot;:&amp;quot;DHT22&amp;quot;,&amp;quot;valueName&amp;quot;:&amp;quot;temperature&amp;quot;,&amp;quot;type&amp;quot;:2,&amp;quot;value&amp;quot;:&amp;quot;21.5&amp;quot;},&amp;quot;1&amp;quot;:{&amp;quot;deviceName&amp;quot;:&amp;quot;DHT22&amp;quot;,&amp;quot;valueName&amp;quot;:&amp;quot;humidity&amp;quot;,&amp;quot;type&amp;quot;:2,&amp;quot;value&amp;quot;:&amp;quot;12.2&amp;quot;}}}}&lt;br /&gt;
2018.02.10 08:48:06.200 4: ESPEasy eb_10.0.0.148_25654: Basic authentication accepted&lt;br /&gt;
2018.02.10 08:48:06.200 4: ESPEasy eb_10.0.0.148_25654: Send http close &#039;200 OK&#039;&lt;br /&gt;
2018.02.10 08:48:06.202 4: ESPEasy eb_10.0.0.148_25654: Src:&#039;BA_SEN1&#039;/&#039;DHT22&#039; =&amp;gt; ident:BA_SEN1 dev:ESPEasy_BA_SEN1 combinedDevice:1&lt;br /&gt;
2018.02.10 08:48:06.202 5: eb: dispatch BA_SEN1::10.0.0.148::1::0::1::i||unit||4||0|||i||sleep||0||0|||i||build||137||0|||i||version||9||0|||r||temperature||21.5||2|||r||humidity||12.2||2&lt;br /&gt;
2018.02.10 08:48:06.209 4: ESPEasy eb_10.0.0.148_25654: Closing tcp session.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Detail bedeuten die Logeinträge:&lt;br /&gt;
&lt;br /&gt;
;Connection accepted from eb_10.0.0.148_25654&lt;br /&gt;
:Eine TCP Verbindung wurde vom ESP (IP: 10.0.0.148, source port: 25654) zur Bridge &amp;quot;eb&amp;quot; aufgebaut.&lt;br /&gt;
&lt;br /&gt;
;ESPEasy eb_10.0.0.148_25654&lt;br /&gt;
:Es wurde ein temporäres ESPEasy Bridge Devices angelegt, das Daten von der IP 10.0.0.148 und Quellport 25654 empfängt.&lt;br /&gt;
&lt;br /&gt;
;Peer address accepted&lt;br /&gt;
:Die IP Adresse des ESP wurde akzeptiert und die empfangenen Daten werden nun verarbeitet. Wenn die IP Adresse nicht akzeptiert wird, dann wird &#039;&#039;&#039;Peer address rejected&#039;&#039;&#039; gelogged.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;Received header: {&#039;Content-Length&#039; =&amp;gt; &#039;298&#039;,&#039;Authorization&#039; =&amp;gt; &#039;Basic ***** &#039;,&#039;Host&#039; =&amp;gt; &#039;10.0.0.53&#039;,&#039;Connection&#039; =&amp;gt; &#039;close&#039;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:Diese &#039;&#039;received header&#039;&#039; Zeile enthält die Daten des Headers, die via HTTP vom ESP empfangen werden. Ein eventuell vorhandenes Passwort wird maskiert.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;Received content: {&amp;quot;module&amp;quot;:&amp;quot;ESPEasy&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;1.02&amp;quot;,&amp;quot;data&amp;quot;:&amp;quot;ESP&amp;quot;:&amp;quot;name&amp;quot;:&amp;quot;BA_SEN1&amp;quot;,&amp;quot;unit&amp;quot;:4,&amp;quot;version&amp;quot;:9,&amp;quot;build&amp;quot;:137,&amp;quot;sleep&amp;quot;:0,&amp;quot;ip&amp;quot;:&amp;quot;10.0.0.148&amp;quot;},&amp;quot;SENSOR&amp;quot;:&amp;quot;0&amp;quot;:{&amp;quot;deviceName&amp;quot;:&amp;quot;DHT22&amp;quot;,&amp;quot;valueName&amp;quot;:&amp;quot;temperature&amp;quot;,&amp;quot;type&amp;quot;:2,&amp;quot;value&amp;quot;:&amp;quot;21.5&amp;quot;},&amp;quot;1&amp;quot;:&amp;quot;deviceName&amp;quot;:&amp;quot;DHT22&amp;quot;,&amp;quot;valueName&amp;quot;:&amp;quot;humidity&amp;quot;,&amp;quot;type&amp;quot;:2,&amp;quot;value&amp;quot;:&amp;quot;12.2&amp;quot;}}}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:Diese &#039;&#039;received content&#039;&#039; Zeile enthält die Daten, die vom ESP via HTTP empfangenen werden. Mehr oder weniger Klartext im JSON Format.&lt;br /&gt;
&lt;br /&gt;
;Basic authentication accepted&lt;br /&gt;
:In diesem Schritt wird geprüft ob eine Authentifizierung erforderlich und im besten Fall auch korrekt ist.&lt;br /&gt;
:Folgende Meldungen wären an dieser Stelle auch möglich:&lt;br /&gt;
:*No basic authentication required (auf beiden Seiten ist keine basic auth eingerichtet)&lt;br /&gt;
:*No basic authentication active but credentials received (auf FHEM Seite ist keine basic auth eingerichtet, der ESP sendet aber basic auth)&lt;br /&gt;
:*Basic authentication rejected (Username oder Passwort passen nicht zusammen)&lt;br /&gt;
&lt;br /&gt;
;Send http close &#039;200 OK&#039;&lt;br /&gt;
:&amp;quot;Quittung&amp;quot; an den ESP senden. Daraufhin wird der ESP die Verbindung beenden.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;Src:&#039;BA_SEN1&#039;/&#039;DHT22&#039; =&amp;gt; ident:BA_SEN1 dev:ESPEasy_BA_SEN1 combinedDevice:1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:Die Daten wurden vom ESP mit dem Namen BA_SEN1 und dem ESP Device DHT22 gesendet. Auf FHEM Seite werden die Daten dem Device mit dem Ident &amp;quot;BA_SEN1&amp;quot; zugewiesen. Dieses Ident wird vom FHEM Device ESPEasy_BA_SEN1 verwendet. Für diesen ESP ist das Attribut &#039;&#039;combineDevices&#039;&#039; wirksam. Wäre &#039;&#039;combineDevices&#039;&#039; nicht aktiv, dann würde das Ident &amp;quot;BA_SEN1_DHT22&amp;quot; lauten.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;dispatch BA_SEN1::10.0.0.148::1::0::1::i||unit||4||0|||i||sleep||0||0|||i||build||137||0|||i||version||9||0|||r||temperature||21.5||2|||r||humidity||12.2||2&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:Die Daten werden nun von der Bridge an das logische ESPEasy Device weitergegeben.&lt;br /&gt;
:Im Details bedeuten die einzelnen Elemente dieser Zeichenkette:&lt;br /&gt;
:*&#039;&#039;&#039;BA_SEN1::&#039;&#039;&#039;: Daten an das FHEM Device mit dem Ident BA_SEN1 schicken.&lt;br /&gt;
:*&#039;&#039;&#039;10.0.0.148::&#039;&#039;&#039;: IP Adresse des ESPs&lt;br /&gt;
:*&#039;&#039;&#039;1::&#039;&#039;&#039;: autocreate enabled? ja&lt;br /&gt;
:*&#039;&#039;&#039;0::&#039;&#039;&#039;: autosave enabled? nein&lt;br /&gt;
:*&#039;&#039;&#039;1::&#039;&#039;&#039;: wird nicht mehr benutzt&lt;br /&gt;
:*&#039;&#039;&#039;i||unit||4||0|||&#039;&#039;&#039;: Der ESP hat die Unit Nummer 4&lt;br /&gt;
:*&#039;&#039;&#039;i||sleep||1||0|||&#039;&#039;&#039;: Ist der ESP für den deep sleep mode konfiguriert? ja&lt;br /&gt;
:*&#039;&#039;&#039;i||build||137||0|||&#039;&#039;&#039;: ESPEasy build version 137&lt;br /&gt;
:*&#039;&#039;&#039;i||version||9||0|||&#039;&#039;&#039;: ESPEasy Release 9&lt;br /&gt;
:*&#039;&#039;&#039;r||temperature||21.5||2|||&#039;&#039;&#039;: Readingname: temperature, Wert: 21.5, Sensortyp: 2&lt;br /&gt;
:*&#039;&#039;&#039;r||humidity||12.2||2&#039;&#039;&#039;: Readingname: humidity, Wert 12.2, Sensortyp: 2&lt;br /&gt;
:Je nach ESPEasy Firmware Version können die Internals (Zeilen mit i am Anfang) auch &lt;br /&gt;
zusätzliche/andere Informationen aufweisen.&lt;br /&gt;
&lt;br /&gt;
;Closing tcp session.&lt;br /&gt;
:Die tcp Verbindung wird geschlossen, das temporäre ESPEasy Bridge Device wird gelöscht.&lt;br /&gt;
&lt;br /&gt;
===ESPEasy Device===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
2018.02.10 10:08:41.235 5: ESPEasy ESPEasy_BA_SEN1: Received: BA_SEN1::10.0.0.148::1::0::1::i||unit||4||0|||i||sleep||0||0|||i||build||137||0|||i||version||9||0|||r||temperature||21.2||2|||r||humidity||10.3||2&lt;br /&gt;
2018.02.10 10:08:41.236 4: ESPEasy ESPEasy_BA_SEN1: temperature: 21.2&lt;br /&gt;
2018.02.10 10:08:41.237 4: ESPEasy ESPEasy_BA_SEN1: humidity: 10.3&lt;br /&gt;
2018.02.10 10:08:41.237 5: ESPEasy ESPEasy_BA_SEN1: Internals: unit:4 sleep:0 build:137 version:9&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Im Detail:&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;Received: BA_SEN1::10.0.0.148::1::0::1::i||unit||4||0|||i||sleep||0||0|||i||build||137||0|||i||version||9||0|||r||temperature||21.2||2|||r||humidity||10.3||2&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:Das ist wieder die, bereits oben beschriebene, &#039;&#039;dispatch&#039;&#039; Zeichenkette, die jetzt vom logischen Device empfangen wurde.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;ESPEasy ESPEasy_BA_SEN1: temperature: 21.2&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;ESPEasy ESPEasy_BA_SEN1: humidity: 10.3&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:Die Readings &#039;&#039;temperature&#039;&#039; und &#039;&#039;humidity&#039;&#039; wurden aktualisiert.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;ESPEasy ESPEasy_BA_SEN1: Internals: unit:4 sleep:1 build:137 version:9&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:Die Internals &#039;&#039;unit&#039;&#039;, &#039;&#039;sleep&#039;&#039;, &#039;&#039;build&#039;&#039; und &#039;&#039;version&#039;&#039; wurden aktualisiert.&lt;br /&gt;
&lt;br /&gt;
===Zusätzliche Logeinträge===&lt;br /&gt;
Wird ein Device via Autocreate angelegt, gibt es zusätzliche Einträge im Logfile&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
2018.02.10 10:23:52.243 4: ESPEasy eb_10.0.0.148_3446: Src:&#039;BA_SEN1&#039;/&#039;DHT22&#039; =&amp;gt; ident:BA_SEN1 dev:undef combinedDevice:1&lt;br /&gt;
2018.02.10 10:23:52.243 2: ESPEasy eb: Autocreate ESPEasy_BA_SEN1 ESPEasy 10.0.0.148 80 eb BA_SEN1&lt;br /&gt;
2018.02.10 10:23:52.244 4: ESPEasy ESPEasy_BA_SEN1: Opened for BA_SEN1 10.0.0.148:80 using bridge eb&lt;br /&gt;
2018.02.10 10:23:52.258 5: ESPEasy ESPEasy_BA_SEN1: received event: ATTR ESPEasy_BA_SEN1 setState 3&lt;br /&gt;
2018.02.10 10:23:52.262 5: ESPEasy ESPEasy_BA_SEN1: received event: ATTR ESPEasy_BA_SEN1 Interval 300&lt;br /&gt;
2018.02.10 10:23:52.262 5: ESPEasy ESPEasy_BA_SEN1: Start internalTimer +304 =&amp;gt; 2018-02-10 10:28:57&lt;br /&gt;
2018.02.10 10:23:52.266 5: ESPEasy ESPEasy_BA_SEN1: received event: ATTR ESPEasy_BA_SEN1 presenceCheck 1&lt;br /&gt;
2018.02.10 10:23:52.269 5: ESPEasy ESPEasy_BA_SEN1: received event: ATTR ESPEasy_BA_SEN1 readingSwitchText 1&lt;br /&gt;
2018.02.10 10:23:52.271 2: ESPEasy eb: Autosave is disabled: Do not forget to save changes.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
*{{Link2CmdRef|Anker=ESPEasy|Lang=en|Label=FHEM ESPEasy Modul-Dokumentation}}&lt;br /&gt;
*[https://www.letscontrolit.com/wiki/index.php/ESPEasy ESP Easy Firmware Wiki] &lt;br /&gt;
*[https://www.letscontrolit.com/wiki/index.php/ESPEasy_Command_Reference ESP Easy Command Reference]&lt;br /&gt;
*[https://www.letscontrolit.com/wiki/index.php/Tutorial_Rules ESP Easy Rules]&lt;/div&gt;</summary>
		<author><name>DDT</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=ESPEasy&amp;diff=28046</id>
		<title>ESPEasy</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=ESPEasy&amp;diff=28046"/>
		<updated>2018-10-12T09:19:01Z</updated>

		<summary type="html">&lt;p&gt;DDT: {{Baustelle}} entfernt.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuerung eines Espressif ESP8266 WLAN-SoC&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef= &lt;br /&gt;
|ModForumArea=Bastelecke/ESP8266&lt;br /&gt;
|ModFTopic=55728&lt;br /&gt;
|ModTechName=34_ESPEasy.pm&lt;br /&gt;
|ModOwner={{Link2FU|7465|dev0}}&lt;br /&gt;
}}&lt;br /&gt;
Dieser Wiki-Artikel soll und kann die {{Link2CmdRef|Anker=ESPEasy|Lang=en|Label=ESPEasy Modul-Dokumentation}}(aka FHEM Command Reference) nicht ersetzen, sondern ergänzt die Dokumentation nur um ein paar Informationen.&lt;br /&gt;
&lt;br /&gt;
== Grundlegende ESP Easy Einstellungen ==&lt;br /&gt;
&lt;br /&gt;
Diese Einstellungen sind in der Weboberfläche des ESP vorzunehmen und bewirken u.a., dass für jedes ESPEasy-Device ein FHEM Device angelegt wird. Das kann bspw. für einen ESP sinnvoll sein, der Relays über GPIOs schalten soll (ESPEasy Device-Type &#039;&#039;Switch Input&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
*Es muss ein einmaliger ESP Devicename vergeben werden (&#039;&#039;Config&#039;&#039; -&amp;gt; &#039;&#039;Main Settings&#039;&#039; -&amp;gt;&#039;&#039;Name&#039;&#039;)&lt;br /&gt;
*Die verwendeten ESP Easy Devices sollten einen ESP-weit einmaligen Namen erhalten (&#039;&#039;Device&#039;&#039; -&amp;gt; &#039;&#039;Edit&#039;&#039; -&amp;gt; &#039;&#039;Task Settings&#039;&#039; -&amp;gt; &#039;&#039;Name&#039;&#039;). Ist dieser Name nicht eindeutig oder wird nicht vergeben, dann gibt es u.a. Probleme mit ESP Easy Rules [link].&lt;br /&gt;
*Jeder Wert, der gesendet werden soll, benötigt ebenfalls einen Namen, der in diesem ESP Device einmalig sein muss (&#039;&#039;Device&#039;&#039; -&amp;gt; &#039;&#039;Edit&#039;&#039; -&amp;gt; &#039;&#039;Optional Settings&#039;&#039; -&amp;gt; &#039;&#039;Value Name&#039;&#039;)&lt;br /&gt;
*Soll dieser Wert nun automatisch in einem Interval von x Sekunden (an FHEM) gesendet werden, dann muss noch das &#039;&#039;Delay&#039;&#039; (&#039;&#039;Device&#039;&#039; -&amp;gt; &#039;&#039;Edit&#039;&#039; -&amp;gt; &#039;&#039;Task Settings&#039;&#039; -&amp;gt; &#039;&#039;Delay&#039;&#039;) angegeben und die Option &#039;&#039;Send Data&#039;&#039; (&#039;&#039;Device&#039;&#039; -&amp;gt; &#039;&#039;Edit&#039;&#039; -&amp;gt; &#039;&#039;Task Settings&#039;&#039; -&amp;gt; &#039;&#039;Send Data&#039;&#039;) aktiviert werden. Die Option &#039;&#039;Send Boot State&#039;&#039; ist an dieser Stelle ebenfalls sinnvoll.&lt;br /&gt;
&lt;br /&gt;
=== Attribut combineDevices ===&lt;br /&gt;
&lt;br /&gt;
Wenn das oben genannte Verhalten (ein FHEM Device pro ESP Easy Device) nicht gewünscht ist, dann kann man mittels des Attributes &#039;&#039;combineDevices&#039;&#039; der {{Link2CmdRef|Anker=ESPEasy_bridge_define|Lang=en|Label=ESPEasy Bridge}} einstellen, ob die ESP Easy Devices eines einzelnen ESPs in ein FHEM Device zusammengeführt werden sollen.&lt;br /&gt;
Diese Funktionalität kann man global einschalten, indem man dem Attribut &#039;&#039;combineDevices&#039;&#039; den Wert &#039;&#039;1&#039;&#039; gibt.&lt;br /&gt;
&lt;br /&gt;
Will man nur von bestimmten ESPs die Devices zusammen fassen, dann kann man eine komma-getrennte Liste der ESPs angeben. Die Liste kann aus ESP Namen, IP Adressen und/oder Netzwerkbereichen bestehen. Netzwerkbereiche können mit einer Netzmaske in dotted decimal (/255.255.255.0) oder in bitmask (/24) Schreibweise angegeben werden. Hostnamen und FQDNs werden nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
Beispiele:&lt;br /&gt;
 attr &amp;lt;esp&amp;gt; combineDevices ESP1,ESP2&lt;br /&gt;
 attr &amp;lt;esp&amp;gt; combineDevices 10.0.0.148,10.0.0.149&lt;br /&gt;
 attr &amp;lt;esp&amp;gt; combineDevices 192.168.124.0/24&lt;br /&gt;
 attr &amp;lt;esp&amp;gt; combineDevices 192.168.124.0/255.255.255.0&lt;br /&gt;
 attr &amp;lt;esp&amp;gt; combineDevices ESP1,ESP2,10.0.0.0/8,192.168.0.0/255.255.0.0&lt;br /&gt;
&lt;br /&gt;
IPv6 Adressen/Bereiche werden zwar von FHEM, allerdings zur Zeit noch nicht von der öffentlichen ESP Easy Distribution unterstützt.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
 attr &amp;lt;esp&amp;gt; combineDevices 2001:1a50:50a8::148,2001:abcd:efff::/48&lt;br /&gt;
&lt;br /&gt;
== Presence Erkennung ==&lt;br /&gt;
Die &amp;quot;Presence Detection&amp;quot;, also die Erkennung, ob ein ESP noch Daten sendet, wurde anhand des Alters der empfangenen (Sensor-)Werte realisiert. Vereinfacht gesagt: Werden keine Readings mehr innerhalb von x Sekunden empfangen (siehe Device-Attribut &#039;&#039;Interval&#039;&#039;), wird das FHEM Device als &amp;quot;absent&amp;quot; gekennzeichnet. Das hat den Vorteil, dass auch ESP Easy Devices, die zwischen dem Senden von Daten in den so genannten Deep Sleep Modus gehen, erkannt werden können.&lt;br /&gt;
&lt;br /&gt;
Das Attribut &#039;&#039;Interval&#039;&#039; gibt unter anderem vor, in welchem zeitlichen Abstand Werte vom ESP erwartet werden, damit der ESP als &amp;quot;present&amp;quot; (und nicht absent) markiert wird.&lt;br /&gt;
&lt;br /&gt;
Wenn ein ESP Easy Device Werte alle 60 Sekunden sendet (Option &#039;&#039;Delay&#039;&#039; in der ESP Easy Device GUI) und das FHEM Device Interval auf 60 gesetzt ist, dann würde das Device-Reading &amp;quot;presence&amp;quot; auf &amp;quot;absent&amp;quot; wechseln, wenn innerhalb von 60-120 Sekunden keine Werte empfangen werden.&lt;br /&gt;
&lt;br /&gt;
Also wäre zum Beispiel die ESP Easy Firmware so zu konfigurieren, dass mindestens ein Wert alle 60 Sekunden gesendet wird. Das Interval-Attribut des entsprechenden FHEM ESPEasy Device müsste ebenfalls auf 60 (default) gesetzt werden. Ein paar Sekunden Toleranz sind im ESPEasy Modul eingebaut.&lt;br /&gt;
&lt;br /&gt;
Wenn man kein ESP Easy Device hat, das Daten an FHEM sendet, dann kann man zusätzlich einen der &amp;quot;System Info&amp;quot; Werte senden lassen und &#039;&#039;combineDevices&#039;&#039; für diesen ESP aktivieren. Es reicht nämlich, wenn ein Reading regelmäßig aktualisiert wird.&lt;br /&gt;
&lt;br /&gt;
Wenn die Presence Erkennung nicht genutzt werden soll, dann muss das Attribut &#039;&#039;presenceCheck&#039;&#039; auf 0 gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
== Sicherheit ==&lt;br /&gt;
&lt;br /&gt;
Wenn eine ESPEasy Bridge in FHEM eingerichtet wurde, dann werden Verbindungen nur von IP Adressen aus [https://tools.ietf.org/html/rfc1918 privaten Bereichen] zugelassen.&lt;br /&gt;
&lt;br /&gt;
Wenn ESP Easy Geräte außerhalb dieser Bereiche Daten an FHEM senden (z.B. über das Internet), dann muss das in der ESPEasy Bridge konfiguriert werden, andernfalls wird die Verbindung abgewiesen.&lt;br /&gt;
&lt;br /&gt;
Einerseits muss die IP Adresse bzw. der IP Bereich erlaubt (Attribute &#039;&#039;allowedIPs&#039;&#039;, &#039;&#039;deniedIPs&#039;&#039;), andererseits die Authentifizierung über &amp;quot;Basic Auth&amp;quot; in der ESPEasy Bridge eingerichtet werden.&lt;br /&gt;
Die Authentifizierung wird über das Attribut &#039;&#039;authentication&#039;&#039; eingeschaltet. Die Benutzerdaten für die Authentifizierung werden über die Set-Befehle &#039;&#039;user&#039;&#039; und &#039;&#039;pass&#039;&#039; der Bridge eingegeben&lt;br /&gt;
{{Hinweis|Hinweis: Username und Passwort werden unverschlüsselt in ./FHEM/FhemUtils/uniqueID gespeichert.}}&lt;br /&gt;
&lt;br /&gt;
=== Attribut authentication ===&lt;br /&gt;
Beispiel:&lt;br /&gt;
 set &amp;lt;espbridge&amp;gt; user MeinUserName&lt;br /&gt;
 set &amp;lt;espbridge&amp;gt; pass sehrgeheim&lt;br /&gt;
 attr &amp;lt;espbridge&amp;gt; authentication 1&lt;br /&gt;
&lt;br /&gt;
=== Attribute allowedIPs / deniedIPs ===&lt;br /&gt;
Beispiel:&lt;br /&gt;
 attr &amp;lt;espbridge&amp;gt; allowedIPs 192.0.2.0/24   # erlaubt ist 192.0.2.0 bis 192.0.2.255&lt;br /&gt;
 attr &amp;lt;espbridge&amp;gt; deniedIPs 192.0.2.0/29    # ausgeschlossen werden aber die IPs von 192.0.2.0 bis 192.0.2.7&lt;br /&gt;
&lt;br /&gt;
Das Attribut &#039;&#039;deniedIPs&#039;&#039; hat Vorrang vor &#039;&#039;allowedIPs&#039;&#039;. Das bedeutet, dass verbotene IPs niemals eine Verbindung aufbauen können, auch wenn sie vorher erlaubt wurden.&lt;br /&gt;
&lt;br /&gt;
Regular Expressions sind können ebenfalls verwendet werden:&lt;br /&gt;
 attr &amp;lt;espbridge&amp;gt; allowedIPs 192.0.2.1([0-4][0-9]|50)     # erlaubt IP von 192.168.30.100 bis 192.168.30.150&lt;br /&gt;
&lt;br /&gt;
Alle Details dazu sind in der {{Link2CmdRef|Anker=ESPEasy_bridge_attr_allowedips|Lang=en|Label=Command Reference}} beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Erweiterte Beispiele==&lt;br /&gt;
Hier ein paar Beispiele für unterschiedlichste Anwendungsfälle&lt;br /&gt;
&lt;br /&gt;
===  Schalter in FHEMWEB mit devStateIcons ===&lt;br /&gt;
Beispiel für GPIO 12:&lt;br /&gt;
 attr &amp;lt;ESP&amp;gt; stateFormat {ReadingsVal($name,&amp;quot;presence&amp;quot;,&amp;quot;&amp;quot;) eq &amp;quot;absent&amp;quot; ? &amp;quot;absent&amp;quot; : ReadingsVal($name,&amp;quot;GPIO12&amp;quot;,&amp;quot;&amp;quot;)}&lt;br /&gt;
 attr &amp;lt;ESP&amp;gt; devStateIcon on:ios-on-green:off off:ios-off:on absent:10px-kreis-rot:statusRequest&lt;br /&gt;
 attr &amp;lt;ESP&amp;gt; eventMap /gpio 12 on:on/gpio 12 off:off/&lt;br /&gt;
 attr &amp;lt;ESP&amp;gt; webCmd :&lt;br /&gt;
&lt;br /&gt;
=== on-for-timer und off-for-timer ===&lt;br /&gt;
Beispiel für GPIO 15:&lt;br /&gt;
 attr &amp;lt;ESP&amp;gt; /longpulse 15 on:on-for-time:slider,0,1,60/longpulse 15 off:off-for-time:slider,0,1,60/&lt;br /&gt;
&lt;br /&gt;
=== (on|off)-for-timer und devStateIcons ===&lt;br /&gt;
Beispiel für GPIO 15:&lt;br /&gt;
 attr &amp;lt;ESP&amp;gt; eventMap /longpulse 15 on:on-for-time:slider,0,1,60/longpulse 15 off:off-for-time:slider,0,1,60/gpio 15 on:on/gpio 15 off:off/&lt;br /&gt;
&lt;br /&gt;
=== userSetCmds ===&lt;br /&gt;
Mithilfe des Attributes userSetCmds kann man:&lt;br /&gt;
*Einzelne ESP Easy Befehle nachrüsten&lt;br /&gt;
*Eigene oder nicht unterstützte Plugins integrieren&lt;br /&gt;
*Bereits integrierte Befehle verändern&lt;br /&gt;
*Befehle einzelner Plugins mappen: Statt &#039;set &amp;lt;dev&amp;gt; plugin_a on&#039; kann man so &#039;set &amp;lt;dev&amp;gt; on&#039; verwenden. Das wird z.B. benötigt, um FHEMs setExtentions oder auch um FHEMWEB Widgets nutzen zu können.&lt;br /&gt;
&lt;br /&gt;
Die genrelle Syntax des Attributes ist ein Perl Hash, der die Eigenschaften des ESP Easy Befehls/Plugins beschreibt.&lt;br /&gt;
Folgende Eigenschaften (Keys) gibt es:&lt;br /&gt;
*args: Anzahl der benötigten Parameter. Default: 0&lt;br /&gt;
*url: Die aufzurufende URL. Default: /control?cmd=&lt;br /&gt;
*widget: Das FHEMWEB Widget, dass beim FHEMWEB Setter des Befehls verwendet werden soll. Default: keines&lt;br /&gt;
*usage: Diese Zeichenkette wird zum einen angezeigt, wenn ein falscher oder zu wenige Parameter beim Befehlsaufruf angeben wurden. Zum anderen haben folgende Zeichenketten eine besondere Bedeutung:&lt;br /&gt;
**&amp;lt;0|1|off|on&amp;gt;: Innerhalb des FHEM Befehl kann on/off statt 0/1 angegeben werden. An die ESP Easy Firmware wird 0/1 gesendet.&lt;br /&gt;
**&amp;lt;pin&amp;gt;: Bei dem Paramater handelt es sin um einen GPIO Port. Aliasnamen können verwendet werden. Siehe: get &amp;lt;dev&amp;gt; pinMap&lt;br /&gt;
**&amp;lt;text&amp;gt;: Dieser Paramter wird url encoded an die ESP Easy Firmware gesendet. Wird für die Ausgabe auf (O)led Displays benötigt.&lt;br /&gt;
*cmds: Diese Eigenschaft (key) muss ebenfalls ein Perl Hash sein. Dieser Key definiert die Unterbefehle des Plugins. Alle oben genannten Eigenschaften (Keys) können benutzt werden. Nur der Key &#039;url&#039; kann nicht angegeben werden, da in diesem Fall die URL des Plugins verwendet wird.&lt;br /&gt;
&lt;br /&gt;
Ein einzelner neuer Befehl &#039;myCmd1&#039;:&lt;br /&gt;
 attr &amp;lt;dev&amp;gt; userSetCmds ( myCmd1 =&amp;gt; {} )&lt;br /&gt;
&lt;br /&gt;
Ein einzelner neuer Befehl &#039;myCmd1&#039;. Der erste Paramater enthält einen GPIO Port, der durch Aliasnamen ersetzt werden kann. Der zweite Paramater kann als on/off geschrieben werden, gesendet wird aber 1/0:&lt;br /&gt;
 attr &amp;lt;dev&amp;gt; userSetCmds ( myCmd1 =&amp;gt; { usage =&amp;gt; &amp;quot;&amp;lt;pin&amp;gt; &amp;lt;0|1|off|on&amp;gt;&amp;quot; } )&lt;br /&gt;
&lt;br /&gt;
Zwei neue Befehle, mit allen default Werten:&lt;br /&gt;
 attr &amp;lt;dev&amp;gt; userSetCmds ( myCmd1 =&amp;gt; {}, myCmd2 =&amp;gt; {} )&lt;br /&gt;
&lt;br /&gt;
Zwei neue Befehle, der zweite Befehl verwendet eine abweichende URL:&lt;br /&gt;
 attr &amp;lt;dev&amp;gt; userSetCmds ( myCmd1 =&amp;gt; {}, myCmd2 =&amp;gt; { url =&amp;gt; &amp;quot;/?cmd=&amp;quot; } )&lt;br /&gt;
&lt;br /&gt;
Beispiel für das fiktive Plugin &#039;LED&#039; mit den Unterbefehlen &#039;rgb&#039; und &#039;ct&#039;. Die Unterbefehle &#039;rgb&#039; und &#039;ct&#039; können ohne Angabe des Pluginnamens &#039;LED&#039; verwendet werden. Zusätzlich werden in der FHEMWEB-Ansicht die Slider Widgets hsv/ct verwendet:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;dev&amp;gt; userSetCmds (&lt;br /&gt;
  LED =&amp;gt; {&lt;br /&gt;
    args  =&amp;gt; 2,&lt;br /&gt;
    url   =&amp;gt; &amp;quot;/control?cmd=&amp;quot;,&lt;br /&gt;
    usage =&amp;gt; &amp;quot;&amp;lt;rgb|ct&amp;gt; &amp;lt;rrggbb|colortemp&amp;gt;&amp;quot;,&lt;br /&gt;
    cmds  =&amp;gt; {&lt;br /&gt;
      rgb =&amp;gt; { args =&amp;gt; 1, usage =&amp;gt; &amp;quot;&amp;lt;rrggbb&amp;gt;&amp;quot;,    widget =&amp;gt; &amp;quot;colorpicker,HSV&amp;quot; },&lt;br /&gt;
      ct  =&amp;gt; { args =&amp;gt; 1, usage =&amp;gt; &amp;quot;&amp;lt;colortemp&amp;gt;&amp;quot;, widget =&amp;gt; &amp;quot;colorpicker,CT,2000,10,4000&amp;quot; }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
) &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== setExtensions ===&lt;br /&gt;
Mithilfe der FHEM setExtentions kann man die Befehle on-for-timer, off-for-timer, on-till, off-till, blink, intervals, toggle, etc nutzen. Im Gegensatz zu den ESP Easy Firmware Befehlen &#039;pulse&#039;, &#039;longpulse&#039; und &#039;longpulse_ms&#039; laufen die Timer nicht innerhalb der ESP Easy Firmware, sondern in FHEM. Mit allen Vor- und Nachteilen.&lt;br /&gt;
Um die setExtensions nutzen zu können muss das Attribut &#039;useExtensions&#039; auf 1 gesetzt sein. Weiterhin müssen die Befehle &#039;on&#039; und &#039;off&#039;, für das entsprechende Device, verfügbar sein. Das kann man auf verschiedene Weisen realisieren:&lt;br /&gt;
==== setExtensions mit eventMap ====&lt;br /&gt;
In diesem Beispiel wird der Befehl &#039;set &amp;lt;dev&amp;gt; GPIO 15 on&#039; mithilfe des globalen Attributs &#039;eventMap&#039; auf den Befehl &#039;set &amp;lt;dev&amp;gt; on&#039; gemappt.  Gleiches gilt für &#039;off&#039;.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;dev&amp;gt; useSetExtensions 1&lt;br /&gt;
attr &amp;lt;dev&amp;gt; eventMap /gpio 15 on:^on$/gpio 15 off:^off$/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==== setExtentions mit userSetCmds ====&lt;br /&gt;
In diesem Beispiel wird nicht das globale Attribut &#039;eventMap&#039; benutzt, sondern das ESPEasy Attribut &#039;userSetCmds&#039;, um die &#039;on&#039; und &#039;off&#039; Befehle bereitzustellen.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;dev&amp;gt; useSetExtensions 1&lt;br /&gt;
attr &amp;lt;dev&amp;gt; userSetCmds (&lt;br /&gt;
myPlugin =&amp;gt; &lt;br /&gt;
  {&lt;br /&gt;
    args   =&amp;gt; 1,&lt;br /&gt;
    usage  =&amp;gt; &amp;quot;&amp;lt;0|1|off|on&amp;gt;&amp;quot;,&lt;br /&gt;
    cmds   =&amp;gt; {&lt;br /&gt;
      on  =&amp;gt; { widget =&amp;gt; &amp;quot;noArg&amp;quot; },&lt;br /&gt;
      off =&amp;gt; { widget =&amp;gt; &amp;quot;noArg&amp;quot; },&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Logging==&lt;br /&gt;
===ESPEasy Bridge===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
2018.02.10 08:48:06.197 4: Connection accepted from eb_10.0.0.148_25654&lt;br /&gt;
2018.02.10 08:48:06.199 4: ESPEasy eb_10.0.0.148_25654: Peer address accepted&lt;br /&gt;
2018.02.10 08:48:06.199 5: ESPEasy eb_10.0.0.148_25654: Received header: {&#039;Content-Length&#039; =&amp;gt; &#039;298&#039;,&#039;Authorization&#039; =&amp;gt; &#039;Basic ***** &#039;,&#039;Host&#039; =&amp;gt; &#039;10.0.0.53&#039;,&#039;Connection&#039; =&amp;gt; &#039;close&#039;}&lt;br /&gt;
2018.02.10 08:48:06.199 5: ESPEasy eb_10.0.0.148_25654: Received content: {&amp;quot;module&amp;quot;:&amp;quot;ESPEasy&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;1.02&amp;quot;,&amp;quot;data&amp;quot;:{&amp;quot;ESP&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;BA_SEN1&amp;quot;,&amp;quot;unit&amp;quot;:4,&amp;quot;version&amp;quot;:9,&amp;quot;build&amp;quot;:137,&amp;quot;sleep&amp;quot;:0,&amp;quot;ip&amp;quot;:&amp;quot;10.0.0.148&amp;quot;},&amp;quot;SENSOR&amp;quot;:{&amp;quot;0&amp;quot;:{&amp;quot;deviceName&amp;quot;:&amp;quot;DHT22&amp;quot;,&amp;quot;valueName&amp;quot;:&amp;quot;temperature&amp;quot;,&amp;quot;type&amp;quot;:2,&amp;quot;value&amp;quot;:&amp;quot;21.5&amp;quot;},&amp;quot;1&amp;quot;:{&amp;quot;deviceName&amp;quot;:&amp;quot;DHT22&amp;quot;,&amp;quot;valueName&amp;quot;:&amp;quot;humidity&amp;quot;,&amp;quot;type&amp;quot;:2,&amp;quot;value&amp;quot;:&amp;quot;12.2&amp;quot;}}}}&lt;br /&gt;
2018.02.10 08:48:06.200 4: ESPEasy eb_10.0.0.148_25654: Basic authentication accepted&lt;br /&gt;
2018.02.10 08:48:06.200 4: ESPEasy eb_10.0.0.148_25654: Send http close &#039;200 OK&#039;&lt;br /&gt;
2018.02.10 08:48:06.202 4: ESPEasy eb_10.0.0.148_25654: Src:&#039;BA_SEN1&#039;/&#039;DHT22&#039; =&amp;gt; ident:BA_SEN1 dev:ESPEasy_BA_SEN1 combinedDevice:1&lt;br /&gt;
2018.02.10 08:48:06.202 5: eb: dispatch BA_SEN1::10.0.0.148::1::0::1::i||unit||4||0|||i||sleep||0||0|||i||build||137||0|||i||version||9||0|||r||temperature||21.5||2|||r||humidity||12.2||2&lt;br /&gt;
2018.02.10 08:48:06.209 4: ESPEasy eb_10.0.0.148_25654: Closing tcp session.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Detail bedeuten die Logeinträge:&lt;br /&gt;
&lt;br /&gt;
;Connection accepted from eb_10.0.0.148_25654&lt;br /&gt;
:Eine TCP Verbindung wurde vom ESP (IP: 10.0.0.148, source port: 25654) zur Bridge &amp;quot;eb&amp;quot; aufgebaut.&lt;br /&gt;
&lt;br /&gt;
;ESPEasy eb_10.0.0.148_25654&lt;br /&gt;
:Es wurde ein temporäres ESPEasy Bridge Devices angelegt, das Daten von der IP 10.0.0.148 und Quellport 25654 empfängt.&lt;br /&gt;
&lt;br /&gt;
;Peer address accepted&lt;br /&gt;
:Die IP Adresse des ESP wurde akzeptiert und die empfangenen Daten werden nun verarbeitet. Wenn die IP Adresse nicht akzeptiert wird, dann wird &#039;&#039;&#039;Peer address rejected&#039;&#039;&#039; gelogged.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;Received header: {&#039;Content-Length&#039; =&amp;gt; &#039;298&#039;,&#039;Authorization&#039; =&amp;gt; &#039;Basic ***** &#039;,&#039;Host&#039; =&amp;gt; &#039;10.0.0.53&#039;,&#039;Connection&#039; =&amp;gt; &#039;close&#039;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:Diese &#039;&#039;received header&#039;&#039; Zeile enthält die Daten des Headers, die via HTTP vom ESP empfangen werden. Ein eventuell vorhandenes Passwort wird maskiert.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;Received content: {&amp;quot;module&amp;quot;:&amp;quot;ESPEasy&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;1.02&amp;quot;,&amp;quot;data&amp;quot;:&amp;quot;ESP&amp;quot;:&amp;quot;name&amp;quot;:&amp;quot;BA_SEN1&amp;quot;,&amp;quot;unit&amp;quot;:4,&amp;quot;version&amp;quot;:9,&amp;quot;build&amp;quot;:137,&amp;quot;sleep&amp;quot;:0,&amp;quot;ip&amp;quot;:&amp;quot;10.0.0.148&amp;quot;},&amp;quot;SENSOR&amp;quot;:&amp;quot;0&amp;quot;:{&amp;quot;deviceName&amp;quot;:&amp;quot;DHT22&amp;quot;,&amp;quot;valueName&amp;quot;:&amp;quot;temperature&amp;quot;,&amp;quot;type&amp;quot;:2,&amp;quot;value&amp;quot;:&amp;quot;21.5&amp;quot;},&amp;quot;1&amp;quot;:&amp;quot;deviceName&amp;quot;:&amp;quot;DHT22&amp;quot;,&amp;quot;valueName&amp;quot;:&amp;quot;humidity&amp;quot;,&amp;quot;type&amp;quot;:2,&amp;quot;value&amp;quot;:&amp;quot;12.2&amp;quot;}}}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:Diese &#039;&#039;received content&#039;&#039; Zeile enthält die Daten, die vom ESP via HTTP empfangenen werden. Mehr oder weniger Klartext im JSON Format.&lt;br /&gt;
&lt;br /&gt;
;Basic authentication accepted&lt;br /&gt;
:In diesem Schritt wird geprüft ob eine Authentifizierung erforderlich und im besten Fall auch korrekt ist.&lt;br /&gt;
:Folgende Meldungen wären an dieser Stelle auch möglich:&lt;br /&gt;
:*No basic authentication required (auf beiden Seiten ist keine basic auth eingerichtet)&lt;br /&gt;
:*No basic authentication active but credentials received (auf FHEM Seite ist keine basic auth eingerichtet, der ESP sendet aber basic auth)&lt;br /&gt;
:*Basic authentication rejected (Username oder Passwort passen nicht zusammen)&lt;br /&gt;
&lt;br /&gt;
;Send http close &#039;200 OK&#039;&lt;br /&gt;
:&amp;quot;Quittung&amp;quot; an den ESP senden. Daraufhin wird der ESP die Verbindung beenden.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;Src:&#039;BA_SEN1&#039;/&#039;DHT22&#039; =&amp;gt; ident:BA_SEN1 dev:ESPEasy_BA_SEN1 combinedDevice:1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:Die Daten wurden vom ESP mit dem Namen BA_SEN1 und dem ESP Device DHT22 gesendet. Auf FHEM Seite werden die Daten dem Device mit dem Ident &amp;quot;BA_SEN1&amp;quot; zugewiesen. Dieses Ident wird vom FHEM Device ESPEasy_BA_SEN1 verwendet. Für diesen ESP ist das Attribut &#039;&#039;combineDevices&#039;&#039; wirksam. Wäre &#039;&#039;combineDevices&#039;&#039; nicht aktiv, dann würde das Ident &amp;quot;BA_SEN1_DHT22&amp;quot; lauten.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;dispatch BA_SEN1::10.0.0.148::1::0::1::i||unit||4||0|||i||sleep||0||0|||i||build||137||0|||i||version||9||0|||r||temperature||21.5||2|||r||humidity||12.2||2&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:Die Daten werden nun von der Bridge an das logische ESPEasy Device weitergegeben.&lt;br /&gt;
:Im Details bedeuten die einzelnen Elemente dieser Zeichenkette:&lt;br /&gt;
:*&#039;&#039;&#039;BA_SEN1::&#039;&#039;&#039;: Daten an das FHEM Device mit dem Ident BA_SEN1 schicken.&lt;br /&gt;
:*&#039;&#039;&#039;10.0.0.148::&#039;&#039;&#039;: IP Adresse des ESPs&lt;br /&gt;
:*&#039;&#039;&#039;1::&#039;&#039;&#039;: autocreate enabled? ja&lt;br /&gt;
:*&#039;&#039;&#039;0::&#039;&#039;&#039;: autosave enabled? nein&lt;br /&gt;
:*&#039;&#039;&#039;1::&#039;&#039;&#039;: wird nicht mehr benutzt&lt;br /&gt;
:*&#039;&#039;&#039;i||unit||4||0|||&#039;&#039;&#039;: Der ESP hat die Unit Nummer 4&lt;br /&gt;
:*&#039;&#039;&#039;i||sleep||1||0|||&#039;&#039;&#039;: Ist der ESP für den deep sleep mode konfiguriert? ja&lt;br /&gt;
:*&#039;&#039;&#039;i||build||137||0|||&#039;&#039;&#039;: ESPEasy build version 137&lt;br /&gt;
:*&#039;&#039;&#039;i||version||9||0|||&#039;&#039;&#039;: ESPEasy Release 9&lt;br /&gt;
:*&#039;&#039;&#039;r||temperature||21.5||2|||&#039;&#039;&#039;: Readingname: temperature, Wert: 21.5, Sensortyp: 2&lt;br /&gt;
:*&#039;&#039;&#039;r||humidity||12.2||2&#039;&#039;&#039;: Readingname: humidity, Wert 12.2, Sensortyp: 2&lt;br /&gt;
:Je nach ESPEasy Firmware Version können die Internals (Zeilen mit i am Anfang) auch &lt;br /&gt;
zusätzliche/andere Informationen aufweisen.&lt;br /&gt;
&lt;br /&gt;
;Closing tcp session.&lt;br /&gt;
:Die tcp Verbindung wird geschlossen, das temporäre ESPEasy Bridge Device wird gelöscht.&lt;br /&gt;
&lt;br /&gt;
===ESPEasy Device===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
2018.02.10 10:08:41.235 5: ESPEasy ESPEasy_BA_SEN1: Received: BA_SEN1::10.0.0.148::1::0::1::i||unit||4||0|||i||sleep||0||0|||i||build||137||0|||i||version||9||0|||r||temperature||21.2||2|||r||humidity||10.3||2&lt;br /&gt;
2018.02.10 10:08:41.236 4: ESPEasy ESPEasy_BA_SEN1: temperature: 21.2&lt;br /&gt;
2018.02.10 10:08:41.237 4: ESPEasy ESPEasy_BA_SEN1: humidity: 10.3&lt;br /&gt;
2018.02.10 10:08:41.237 5: ESPEasy ESPEasy_BA_SEN1: Internals: unit:4 sleep:0 build:137 version:9&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Im Detail:&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;Received: BA_SEN1::10.0.0.148::1::0::1::i||unit||4||0|||i||sleep||0||0|||i||build||137||0|||i||version||9||0|||r||temperature||21.2||2|||r||humidity||10.3||2&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:Das ist wieder die, bereits oben beschriebene, &#039;&#039;dispatch&#039;&#039; Zeichenkette, die jetzt vom logischen Device empfangen wurde.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;ESPEasy ESPEasy_BA_SEN1: temperature: 21.2&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;ESPEasy ESPEasy_BA_SEN1: humidity: 10.3&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:Die Readings &#039;&#039;temperature&#039;&#039; und &#039;&#039;humidity&#039;&#039; wurden aktualisiert.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;ESPEasy ESPEasy_BA_SEN1: Internals: unit:4 sleep:1 build:137 version:9&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:Die Internals &#039;&#039;unit&#039;&#039;, &#039;&#039;sleep&#039;&#039;, &#039;&#039;build&#039;&#039; und &#039;&#039;version&#039;&#039; wurden aktualisiert.&lt;br /&gt;
&lt;br /&gt;
===Zusätzliche Logeinträge===&lt;br /&gt;
Wird ein Device via Autocreate angelegt, gibt es zusätzliche Einträge im Logfile&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
2018.02.10 10:23:52.243 4: ESPEasy eb_10.0.0.148_3446: Src:&#039;BA_SEN1&#039;/&#039;DHT22&#039; =&amp;gt; ident:BA_SEN1 dev:undef combinedDevice:1&lt;br /&gt;
2018.02.10 10:23:52.243 2: ESPEasy eb: Autocreate ESPEasy_BA_SEN1 ESPEasy 10.0.0.148 80 eb BA_SEN1&lt;br /&gt;
2018.02.10 10:23:52.244 4: ESPEasy ESPEasy_BA_SEN1: Opened for BA_SEN1 10.0.0.148:80 using bridge eb&lt;br /&gt;
2018.02.10 10:23:52.258 5: ESPEasy ESPEasy_BA_SEN1: received event: ATTR ESPEasy_BA_SEN1 setState 3&lt;br /&gt;
2018.02.10 10:23:52.262 5: ESPEasy ESPEasy_BA_SEN1: received event: ATTR ESPEasy_BA_SEN1 Interval 300&lt;br /&gt;
2018.02.10 10:23:52.262 5: ESPEasy ESPEasy_BA_SEN1: Start internalTimer +304 =&amp;gt; 2018-02-10 10:28:57&lt;br /&gt;
2018.02.10 10:23:52.266 5: ESPEasy ESPEasy_BA_SEN1: received event: ATTR ESPEasy_BA_SEN1 presenceCheck 1&lt;br /&gt;
2018.02.10 10:23:52.269 5: ESPEasy ESPEasy_BA_SEN1: received event: ATTR ESPEasy_BA_SEN1 readingSwitchText 1&lt;br /&gt;
2018.02.10 10:23:52.271 2: ESPEasy eb: Autosave is disabled: Do not forget to save changes.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
*{{Link2CmdRef|Anker=ESPEasy|Lang=en|Label=FHEM ESPEasy Modul-Dokumentation}}&lt;br /&gt;
*[https://www.letscontrolit.com/wiki/index.php/ESPEasy ESP Easy Firmware Wiki] &lt;br /&gt;
*[https://www.letscontrolit.com/wiki/index.php/ESPEasy_Command_Reference ESP Easy Command Reference]&lt;br /&gt;
*[https://www.letscontrolit.com/wiki/index.php/Tutorial_Rules ESP Easy Rules]&lt;/div&gt;</summary>
		<author><name>DDT</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=ESPEasy&amp;diff=28045</id>
		<title>ESPEasy</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=ESPEasy&amp;diff=28045"/>
		<updated>2018-10-12T09:09:07Z</updated>

		<summary type="html">&lt;p&gt;DDT: Beispiele für setExtensions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuerung eines Espressif ESP8266 WLAN-SoC&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef= &lt;br /&gt;
|ModForumArea=Bastelecke/ESP8266&lt;br /&gt;
|ModFTopic=55728&lt;br /&gt;
|ModTechName=34_ESPEasy.pm&lt;br /&gt;
|ModOwner={{Link2FU|7465|dev0}}&lt;br /&gt;
}}&lt;br /&gt;
Dieser Wiki-Artikel soll und kann die {{Link2CmdRef|Anker=ESPEasy|Lang=en|Label=ESPEasy Modul-Dokumentation}}(aka FHEM Command Reference) nicht ersetzen, sondern ergänzt die Dokumentation nur um ein paar Informationen.&lt;br /&gt;
&lt;br /&gt;
== Grundlegende ESP Easy Einstellungen ==&lt;br /&gt;
&lt;br /&gt;
Diese Einstellungen sind in der Weboberfläche des ESP vorzunehmen und bewirken u.a., dass für jedes ESPEasy-Device ein FHEM Device angelegt wird. Das kann bspw. für einen ESP sinnvoll sein, der Relays über GPIOs schalten soll (ESPEasy Device-Type &#039;&#039;Switch Input&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
*Es muss ein einmaliger ESP Devicename vergeben werden (&#039;&#039;Config&#039;&#039; -&amp;gt; &#039;&#039;Main Settings&#039;&#039; -&amp;gt;&#039;&#039;Name&#039;&#039;)&lt;br /&gt;
*Die verwendeten ESP Easy Devices sollten einen ESP-weit einmaligen Namen erhalten (&#039;&#039;Device&#039;&#039; -&amp;gt; &#039;&#039;Edit&#039;&#039; -&amp;gt; &#039;&#039;Task Settings&#039;&#039; -&amp;gt; &#039;&#039;Name&#039;&#039;). Ist dieser Name nicht eindeutig oder wird nicht vergeben, dann gibt es u.a. Probleme mit ESP Easy Rules [link].&lt;br /&gt;
*Jeder Wert, der gesendet werden soll, benötigt ebenfalls einen Namen, der in diesem ESP Device einmalig sein muss (&#039;&#039;Device&#039;&#039; -&amp;gt; &#039;&#039;Edit&#039;&#039; -&amp;gt; &#039;&#039;Optional Settings&#039;&#039; -&amp;gt; &#039;&#039;Value Name&#039;&#039;)&lt;br /&gt;
*Soll dieser Wert nun automatisch in einem Interval von x Sekunden (an FHEM) gesendet werden, dann muss noch das &#039;&#039;Delay&#039;&#039; (&#039;&#039;Device&#039;&#039; -&amp;gt; &#039;&#039;Edit&#039;&#039; -&amp;gt; &#039;&#039;Task Settings&#039;&#039; -&amp;gt; &#039;&#039;Delay&#039;&#039;) angegeben und die Option &#039;&#039;Send Data&#039;&#039; (&#039;&#039;Device&#039;&#039; -&amp;gt; &#039;&#039;Edit&#039;&#039; -&amp;gt; &#039;&#039;Task Settings&#039;&#039; -&amp;gt; &#039;&#039;Send Data&#039;&#039;) aktiviert werden. Die Option &#039;&#039;Send Boot State&#039;&#039; ist an dieser Stelle ebenfalls sinnvoll.&lt;br /&gt;
&lt;br /&gt;
=== Attribut combineDevices ===&lt;br /&gt;
&lt;br /&gt;
Wenn das oben genannte Verhalten (ein FHEM Device pro ESP Easy Device) nicht gewünscht ist, dann kann man mittels des Attributes &#039;&#039;combineDevices&#039;&#039; der {{Link2CmdRef|Anker=ESPEasy_bridge_define|Lang=en|Label=ESPEasy Bridge}} einstellen, ob die ESP Easy Devices eines einzelnen ESPs in ein FHEM Device zusammengeführt werden sollen.&lt;br /&gt;
Diese Funktionalität kann man global einschalten, indem man dem Attribut &#039;&#039;combineDevices&#039;&#039; den Wert &#039;&#039;1&#039;&#039; gibt.&lt;br /&gt;
&lt;br /&gt;
Will man nur von bestimmten ESPs die Devices zusammen fassen, dann kann man eine komma-getrennte Liste der ESPs angeben. Die Liste kann aus ESP Namen, IP Adressen und/oder Netzwerkbereichen bestehen. Netzwerkbereiche können mit einer Netzmaske in dotted decimal (/255.255.255.0) oder in bitmask (/24) Schreibweise angegeben werden. Hostnamen und FQDNs werden nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
Beispiele:&lt;br /&gt;
 attr &amp;lt;esp&amp;gt; combineDevices ESP1,ESP2&lt;br /&gt;
 attr &amp;lt;esp&amp;gt; combineDevices 10.0.0.148,10.0.0.149&lt;br /&gt;
 attr &amp;lt;esp&amp;gt; combineDevices 192.168.124.0/24&lt;br /&gt;
 attr &amp;lt;esp&amp;gt; combineDevices 192.168.124.0/255.255.255.0&lt;br /&gt;
 attr &amp;lt;esp&amp;gt; combineDevices ESP1,ESP2,10.0.0.0/8,192.168.0.0/255.255.0.0&lt;br /&gt;
&lt;br /&gt;
IPv6 Adressen/Bereiche werden zwar von FHEM, allerdings zur Zeit noch nicht von der öffentlichen ESP Easy Distribution unterstützt.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
 attr &amp;lt;esp&amp;gt; combineDevices 2001:1a50:50a8::148,2001:abcd:efff::/48&lt;br /&gt;
&lt;br /&gt;
== Presence Erkennung ==&lt;br /&gt;
Die &amp;quot;Presence Detection&amp;quot;, also die Erkennung, ob ein ESP noch Daten sendet, wurde anhand des Alters der empfangenen (Sensor-)Werte realisiert. Vereinfacht gesagt: Werden keine Readings mehr innerhalb von x Sekunden empfangen (siehe Device-Attribut &#039;&#039;Interval&#039;&#039;), wird das FHEM Device als &amp;quot;absent&amp;quot; gekennzeichnet. Das hat den Vorteil, dass auch ESP Easy Devices, die zwischen dem Senden von Daten in den so genannten Deep Sleep Modus gehen, erkannt werden können.&lt;br /&gt;
&lt;br /&gt;
Das Attribut &#039;&#039;Interval&#039;&#039; gibt unter anderem vor, in welchem zeitlichen Abstand Werte vom ESP erwartet werden, damit der ESP als &amp;quot;present&amp;quot; (und nicht absent) markiert wird.&lt;br /&gt;
&lt;br /&gt;
Wenn ein ESP Easy Device Werte alle 60 Sekunden sendet (Option &#039;&#039;Delay&#039;&#039; in der ESP Easy Device GUI) und das FHEM Device Interval auf 60 gesetzt ist, dann würde das Device-Reading &amp;quot;presence&amp;quot; auf &amp;quot;absent&amp;quot; wechseln, wenn innerhalb von 60-120 Sekunden keine Werte empfangen werden.&lt;br /&gt;
&lt;br /&gt;
Also wäre zum Beispiel die ESP Easy Firmware so zu konfigurieren, dass mindestens ein Wert alle 60 Sekunden gesendet wird. Das Interval-Attribut des entsprechenden FHEM ESPEasy Device müsste ebenfalls auf 60 (default) gesetzt werden. Ein paar Sekunden Toleranz sind im ESPEasy Modul eingebaut.&lt;br /&gt;
&lt;br /&gt;
Wenn man kein ESP Easy Device hat, das Daten an FHEM sendet, dann kann man zusätzlich einen der &amp;quot;System Info&amp;quot; Werte senden lassen und &#039;&#039;combineDevices&#039;&#039; für diesen ESP aktivieren. Es reicht nämlich, wenn ein Reading regelmäßig aktualisiert wird.&lt;br /&gt;
&lt;br /&gt;
Wenn die Presence Erkennung nicht genutzt werden soll, dann muss das Attribut &#039;&#039;presenceCheck&#039;&#039; auf 0 gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
== Sicherheit ==&lt;br /&gt;
&lt;br /&gt;
Wenn eine ESPEasy Bridge in FHEM eingerichtet wurde, dann werden Verbindungen nur von IP Adressen aus [https://tools.ietf.org/html/rfc1918 privaten Bereichen] zugelassen.&lt;br /&gt;
&lt;br /&gt;
Wenn ESP Easy Geräte außerhalb dieser Bereiche Daten an FHEM senden (z.B. über das Internet), dann muss das in der ESPEasy Bridge konfiguriert werden, andernfalls wird die Verbindung abgewiesen.&lt;br /&gt;
&lt;br /&gt;
Einerseits muss die IP Adresse bzw. der IP Bereich erlaubt (Attribute &#039;&#039;allowedIPs&#039;&#039;, &#039;&#039;deniedIPs&#039;&#039;), andererseits die Authentifizierung über &amp;quot;Basic Auth&amp;quot; in der ESPEasy Bridge eingerichtet werden.&lt;br /&gt;
Die Authentifizierung wird über das Attribut &#039;&#039;authentication&#039;&#039; eingeschaltet. Die Benutzerdaten für die Authentifizierung werden über die Set-Befehle &#039;&#039;user&#039;&#039; und &#039;&#039;pass&#039;&#039; der Bridge eingegeben&lt;br /&gt;
{{Hinweis|Hinweis: Username und Passwort werden unverschlüsselt in ./FHEM/FhemUtils/uniqueID gespeichert.}}&lt;br /&gt;
&lt;br /&gt;
=== Attribut authentication ===&lt;br /&gt;
Beispiel:&lt;br /&gt;
 set &amp;lt;espbridge&amp;gt; user MeinUserName&lt;br /&gt;
 set &amp;lt;espbridge&amp;gt; pass sehrgeheim&lt;br /&gt;
 attr &amp;lt;espbridge&amp;gt; authentication 1&lt;br /&gt;
&lt;br /&gt;
=== Attribute allowedIPs / deniedIPs ===&lt;br /&gt;
Beispiel:&lt;br /&gt;
 attr &amp;lt;espbridge&amp;gt; allowedIPs 192.0.2.0/24   # erlaubt ist 192.0.2.0 bis 192.0.2.255&lt;br /&gt;
 attr &amp;lt;espbridge&amp;gt; deniedIPs 192.0.2.0/29    # ausgeschlossen werden aber die IPs von 192.0.2.0 bis 192.0.2.7&lt;br /&gt;
&lt;br /&gt;
Das Attribut &#039;&#039;deniedIPs&#039;&#039; hat Vorrang vor &#039;&#039;allowedIPs&#039;&#039;. Das bedeutet, dass verbotene IPs niemals eine Verbindung aufbauen können, auch wenn sie vorher erlaubt wurden.&lt;br /&gt;
&lt;br /&gt;
Regular Expressions sind können ebenfalls verwendet werden:&lt;br /&gt;
 attr &amp;lt;espbridge&amp;gt; allowedIPs 192.0.2.1([0-4][0-9]|50)     # erlaubt IP von 192.168.30.100 bis 192.168.30.150&lt;br /&gt;
&lt;br /&gt;
Alle Details dazu sind in der {{Link2CmdRef|Anker=ESPEasy_bridge_attr_allowedips|Lang=en|Label=Command Reference}} beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Erweiterte Beispiele==&lt;br /&gt;
Hier ein paar Beispiele für unterschiedlichste Anwendungsfälle&lt;br /&gt;
&lt;br /&gt;
===  Schalter in FHEMWEB mit devStateIcons ===&lt;br /&gt;
Beispiel für GPIO 12:&lt;br /&gt;
 attr &amp;lt;ESP&amp;gt; stateFormat {ReadingsVal($name,&amp;quot;presence&amp;quot;,&amp;quot;&amp;quot;) eq &amp;quot;absent&amp;quot; ? &amp;quot;absent&amp;quot; : ReadingsVal($name,&amp;quot;GPIO12&amp;quot;,&amp;quot;&amp;quot;)}&lt;br /&gt;
 attr &amp;lt;ESP&amp;gt; devStateIcon on:ios-on-green:off off:ios-off:on absent:10px-kreis-rot:statusRequest&lt;br /&gt;
 attr &amp;lt;ESP&amp;gt; eventMap /gpio 12 on:on/gpio 12 off:off/&lt;br /&gt;
 attr &amp;lt;ESP&amp;gt; webCmd :&lt;br /&gt;
&lt;br /&gt;
=== on-for-timer und off-for-timer ===&lt;br /&gt;
Beispiel für GPIO 15:&lt;br /&gt;
 attr &amp;lt;ESP&amp;gt; /longpulse 15 on:on-for-time:slider,0,1,60/longpulse 15 off:off-for-time:slider,0,1,60/&lt;br /&gt;
&lt;br /&gt;
=== (on|off)-for-timer und devStateIcons ===&lt;br /&gt;
Beispiel für GPIO 15:&lt;br /&gt;
 attr &amp;lt;ESP&amp;gt; eventMap /longpulse 15 on:on-for-time:slider,0,1,60/longpulse 15 off:off-for-time:slider,0,1,60/gpio 15 on:on/gpio 15 off:off/&lt;br /&gt;
&lt;br /&gt;
=== userSetCmds ===&lt;br /&gt;
Mithilfe des Attributes userSetCmds kann man:&lt;br /&gt;
*Einzelne ESP Easy Befehle nachrüsten&lt;br /&gt;
*Eigene oder nicht unterstützte Plugins integrieren&lt;br /&gt;
*Bereits integrierte Befehle verändern&lt;br /&gt;
*Befehle einzelner Plugins mappen: Statt &#039;set &amp;lt;dev&amp;gt; plugin_a on&#039; kann man so &#039;set &amp;lt;dev&amp;gt; on&#039; verwenden. Das wird z.B. benötigt, um FHEMs setExtentions oder auch um FHEMWEB Widgets nutzen zu können.&lt;br /&gt;
&lt;br /&gt;
Die genrelle Syntax des Attributes ist ein Perl Hash, der die Eigenschaften des ESP Easy Befehls/Plugins beschreibt.&lt;br /&gt;
Folgende Eigenschaften (Keys) gibt es:&lt;br /&gt;
*args: Anzahl der benötigten Parameter. Default: 0&lt;br /&gt;
*url: Die aufzurufende URL. Default: /control?cmd=&lt;br /&gt;
*widget: Das FHEMWEB Widget, dass beim FHEMWEB Setter des Befehls verwendet werden soll. Default: keines&lt;br /&gt;
*usage: Diese Zeichenkette wird zum einen angezeigt, wenn ein falscher oder zu wenige Parameter beim Befehlsaufruf angeben wurden. Zum anderen haben folgende Zeichenketten eine besondere Bedeutung:&lt;br /&gt;
**&amp;lt;0|1|off|on&amp;gt;: Innerhalb des FHEM Befehl kann on/off statt 0/1 angegeben werden. An die ESP Easy Firmware wird 0/1 gesendet.&lt;br /&gt;
**&amp;lt;pin&amp;gt;: Bei dem Paramater handelt es sin um einen GPIO Port. Aliasnamen können verwendet werden. Siehe: get &amp;lt;dev&amp;gt; pinMap&lt;br /&gt;
**&amp;lt;text&amp;gt;: Dieser Paramter wird url encoded an die ESP Easy Firmware gesendet. Wird für die Ausgabe auf (O)led Displays benötigt.&lt;br /&gt;
*cmds: Diese Eigenschaft (key) muss ebenfalls ein Perl Hash sein. Dieser Key definiert die Unterbefehle des Plugins. Alle oben genannten Eigenschaften (Keys) können benutzt werden. Nur der Key &#039;url&#039; kann nicht angegeben werden, da in diesem Fall die URL des Plugins verwendet wird.&lt;br /&gt;
&lt;br /&gt;
Ein einzelner neuer Befehl &#039;myCmd1&#039;:&lt;br /&gt;
 attr &amp;lt;dev&amp;gt; userSetCmds ( myCmd1 =&amp;gt; {} )&lt;br /&gt;
&lt;br /&gt;
Ein einzelner neuer Befehl &#039;myCmd1&#039;. Der erste Paramater enthält einen GPIO Port, der durch Aliasnamen ersetzt werden kann. Der zweite Paramater kann als on/off geschrieben werden, gesendet wird aber 1/0:&lt;br /&gt;
 attr &amp;lt;dev&amp;gt; userSetCmds ( myCmd1 =&amp;gt; { usage =&amp;gt; &amp;quot;&amp;lt;pin&amp;gt; &amp;lt;0|1|off|on&amp;gt;&amp;quot; } )&lt;br /&gt;
&lt;br /&gt;
Zwei neue Befehle, mit allen default Werten:&lt;br /&gt;
 attr &amp;lt;dev&amp;gt; userSetCmds ( myCmd1 =&amp;gt; {}, myCmd2 =&amp;gt; {} )&lt;br /&gt;
&lt;br /&gt;
Zwei neue Befehle, der zweite Befehl verwendet eine abweichende URL:&lt;br /&gt;
 attr &amp;lt;dev&amp;gt; userSetCmds ( myCmd1 =&amp;gt; {}, myCmd2 =&amp;gt; { url =&amp;gt; &amp;quot;/?cmd=&amp;quot; } )&lt;br /&gt;
&lt;br /&gt;
Beispiel für das fiktive Plugin &#039;LED&#039; mit den Unterbefehlen &#039;rgb&#039; und &#039;ct&#039;. Die Unterbefehle &#039;rgb&#039; und &#039;ct&#039; können ohne Angabe des Pluginnamens &#039;LED&#039; verwendet werden. Zusätzlich werden in der FHEMWEB-Ansicht die Slider Widgets hsv/ct verwendet:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;dev&amp;gt; userSetCmds (&lt;br /&gt;
  LED =&amp;gt; {&lt;br /&gt;
    args  =&amp;gt; 2,&lt;br /&gt;
    url   =&amp;gt; &amp;quot;/control?cmd=&amp;quot;,&lt;br /&gt;
    usage =&amp;gt; &amp;quot;&amp;lt;rgb|ct&amp;gt; &amp;lt;rrggbb|colortemp&amp;gt;&amp;quot;,&lt;br /&gt;
    cmds  =&amp;gt; {&lt;br /&gt;
      rgb =&amp;gt; { args =&amp;gt; 1, usage =&amp;gt; &amp;quot;&amp;lt;rrggbb&amp;gt;&amp;quot;,    widget =&amp;gt; &amp;quot;colorpicker,HSV&amp;quot; },&lt;br /&gt;
      ct  =&amp;gt; { args =&amp;gt; 1, usage =&amp;gt; &amp;quot;&amp;lt;colortemp&amp;gt;&amp;quot;, widget =&amp;gt; &amp;quot;colorpicker,CT,2000,10,4000&amp;quot; }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
) &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== setExtensions ===&lt;br /&gt;
Mithilfe der FHEM setExtentions kann man die Befehle on-for-timer, off-for-timer, on-till, off-till, blink, intervals, toggle, etc nutzen. Im Gegensatz zu den ESP Easy Firmware Befehlen &#039;pulse&#039;, &#039;longpulse&#039; und &#039;longpulse_ms&#039; laufen die Timer nicht innerhalb der ESP Easy Firmware, sondern in FHEM. Mit allen Vor- und Nachteilen.&lt;br /&gt;
Um die setExtensions nutzen zu können muss das Attribut &#039;useExtensions&#039; auf 1 gesetzt sein. Weiterhin müssen die Befehle &#039;on&#039; und &#039;off&#039;, für das entsprechende Device, verfügbar sein. Das kann man auf verschiedene Weisen realisieren:&lt;br /&gt;
==== setExtensions mit eventMap ====&lt;br /&gt;
In diesem Beispiel wird der Befehl &#039;set &amp;lt;dev&amp;gt; GPIO 15 on&#039; mithilfe des globalen Attributs &#039;eventMap&#039; auf den Befehl &#039;set &amp;lt;dev&amp;gt; on&#039; gemappt.  Gleiches gilt für &#039;off&#039;.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;dev&amp;gt; useSetExtensions 1&lt;br /&gt;
attr &amp;lt;dev&amp;gt; eventMap /gpio 15 on:^on$/gpio 15 off:^off$/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==== setExtentions mit userSetCmds ====&lt;br /&gt;
In diesem Beispiel wird nicht das globale Attribut &#039;eventMap&#039; benutzt, sondern das ESPEasy Attribut &#039;userSetCmds&#039;, um die &#039;on&#039; und &#039;off&#039; Befehle bereitzustellen.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;dev&amp;gt; useSetExtensions 1&lt;br /&gt;
attr &amp;lt;dev&amp;gt; userSetCmds (&lt;br /&gt;
myPlugin =&amp;gt; &lt;br /&gt;
  {&lt;br /&gt;
    args   =&amp;gt; 1,&lt;br /&gt;
    usage  =&amp;gt; &amp;quot;&amp;lt;0|1|off|on&amp;gt;&amp;quot;,&lt;br /&gt;
    cmds   =&amp;gt; {&lt;br /&gt;
      on  =&amp;gt; { widget =&amp;gt; &amp;quot;noArg&amp;quot; },&lt;br /&gt;
      off =&amp;gt; { widget =&amp;gt; &amp;quot;noArg&amp;quot; },&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Logging==&lt;br /&gt;
===ESPEasy Bridge===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
2018.02.10 08:48:06.197 4: Connection accepted from eb_10.0.0.148_25654&lt;br /&gt;
2018.02.10 08:48:06.199 4: ESPEasy eb_10.0.0.148_25654: Peer address accepted&lt;br /&gt;
2018.02.10 08:48:06.199 5: ESPEasy eb_10.0.0.148_25654: Received header: {&#039;Content-Length&#039; =&amp;gt; &#039;298&#039;,&#039;Authorization&#039; =&amp;gt; &#039;Basic ***** &#039;,&#039;Host&#039; =&amp;gt; &#039;10.0.0.53&#039;,&#039;Connection&#039; =&amp;gt; &#039;close&#039;}&lt;br /&gt;
2018.02.10 08:48:06.199 5: ESPEasy eb_10.0.0.148_25654: Received content: {&amp;quot;module&amp;quot;:&amp;quot;ESPEasy&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;1.02&amp;quot;,&amp;quot;data&amp;quot;:{&amp;quot;ESP&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;BA_SEN1&amp;quot;,&amp;quot;unit&amp;quot;:4,&amp;quot;version&amp;quot;:9,&amp;quot;build&amp;quot;:137,&amp;quot;sleep&amp;quot;:0,&amp;quot;ip&amp;quot;:&amp;quot;10.0.0.148&amp;quot;},&amp;quot;SENSOR&amp;quot;:{&amp;quot;0&amp;quot;:{&amp;quot;deviceName&amp;quot;:&amp;quot;DHT22&amp;quot;,&amp;quot;valueName&amp;quot;:&amp;quot;temperature&amp;quot;,&amp;quot;type&amp;quot;:2,&amp;quot;value&amp;quot;:&amp;quot;21.5&amp;quot;},&amp;quot;1&amp;quot;:{&amp;quot;deviceName&amp;quot;:&amp;quot;DHT22&amp;quot;,&amp;quot;valueName&amp;quot;:&amp;quot;humidity&amp;quot;,&amp;quot;type&amp;quot;:2,&amp;quot;value&amp;quot;:&amp;quot;12.2&amp;quot;}}}}&lt;br /&gt;
2018.02.10 08:48:06.200 4: ESPEasy eb_10.0.0.148_25654: Basic authentication accepted&lt;br /&gt;
2018.02.10 08:48:06.200 4: ESPEasy eb_10.0.0.148_25654: Send http close &#039;200 OK&#039;&lt;br /&gt;
2018.02.10 08:48:06.202 4: ESPEasy eb_10.0.0.148_25654: Src:&#039;BA_SEN1&#039;/&#039;DHT22&#039; =&amp;gt; ident:BA_SEN1 dev:ESPEasy_BA_SEN1 combinedDevice:1&lt;br /&gt;
2018.02.10 08:48:06.202 5: eb: dispatch BA_SEN1::10.0.0.148::1::0::1::i||unit||4||0|||i||sleep||0||0|||i||build||137||0|||i||version||9||0|||r||temperature||21.5||2|||r||humidity||12.2||2&lt;br /&gt;
2018.02.10 08:48:06.209 4: ESPEasy eb_10.0.0.148_25654: Closing tcp session.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Detail bedeuten die Logeinträge:&lt;br /&gt;
&lt;br /&gt;
;Connection accepted from eb_10.0.0.148_25654&lt;br /&gt;
:Eine TCP Verbindung wurde vom ESP (IP: 10.0.0.148, source port: 25654) zur Bridge &amp;quot;eb&amp;quot; aufgebaut.&lt;br /&gt;
&lt;br /&gt;
;ESPEasy eb_10.0.0.148_25654&lt;br /&gt;
:Es wurde ein temporäres ESPEasy Bridge Devices angelegt, das Daten von der IP 10.0.0.148 und Quellport 25654 empfängt.&lt;br /&gt;
&lt;br /&gt;
;Peer address accepted&lt;br /&gt;
:Die IP Adresse des ESP wurde akzeptiert und die empfangenen Daten werden nun verarbeitet. Wenn die IP Adresse nicht akzeptiert wird, dann wird &#039;&#039;&#039;Peer address rejected&#039;&#039;&#039; gelogged.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;Received header: {&#039;Content-Length&#039; =&amp;gt; &#039;298&#039;,&#039;Authorization&#039; =&amp;gt; &#039;Basic ***** &#039;,&#039;Host&#039; =&amp;gt; &#039;10.0.0.53&#039;,&#039;Connection&#039; =&amp;gt; &#039;close&#039;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:Diese &#039;&#039;received header&#039;&#039; Zeile enthält die Daten des Headers, die via HTTP vom ESP empfangen werden. Ein eventuell vorhandenes Passwort wird maskiert.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;Received content: {&amp;quot;module&amp;quot;:&amp;quot;ESPEasy&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;1.02&amp;quot;,&amp;quot;data&amp;quot;:&amp;quot;ESP&amp;quot;:&amp;quot;name&amp;quot;:&amp;quot;BA_SEN1&amp;quot;,&amp;quot;unit&amp;quot;:4,&amp;quot;version&amp;quot;:9,&amp;quot;build&amp;quot;:137,&amp;quot;sleep&amp;quot;:0,&amp;quot;ip&amp;quot;:&amp;quot;10.0.0.148&amp;quot;},&amp;quot;SENSOR&amp;quot;:&amp;quot;0&amp;quot;:{&amp;quot;deviceName&amp;quot;:&amp;quot;DHT22&amp;quot;,&amp;quot;valueName&amp;quot;:&amp;quot;temperature&amp;quot;,&amp;quot;type&amp;quot;:2,&amp;quot;value&amp;quot;:&amp;quot;21.5&amp;quot;},&amp;quot;1&amp;quot;:&amp;quot;deviceName&amp;quot;:&amp;quot;DHT22&amp;quot;,&amp;quot;valueName&amp;quot;:&amp;quot;humidity&amp;quot;,&amp;quot;type&amp;quot;:2,&amp;quot;value&amp;quot;:&amp;quot;12.2&amp;quot;}}}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:Diese &#039;&#039;received content&#039;&#039; Zeile enthält die Daten, die vom ESP via HTTP empfangenen werden. Mehr oder weniger Klartext im JSON Format.&lt;br /&gt;
&lt;br /&gt;
;Basic authentication accepted&lt;br /&gt;
:In diesem Schritt wird geprüft ob eine Authentifizierung erforderlich und im besten Fall auch korrekt ist.&lt;br /&gt;
:Folgende Meldungen wären an dieser Stelle auch möglich:&lt;br /&gt;
:*No basic authentication required (auf beiden Seiten ist keine basic auth eingerichtet)&lt;br /&gt;
:*No basic authentication active but credentials received (auf FHEM Seite ist keine basic auth eingerichtet, der ESP sendet aber basic auth)&lt;br /&gt;
:*Basic authentication rejected (Username oder Passwort passen nicht zusammen)&lt;br /&gt;
&lt;br /&gt;
;Send http close &#039;200 OK&#039;&lt;br /&gt;
:&amp;quot;Quittung&amp;quot; an den ESP senden. Daraufhin wird der ESP die Verbindung beenden.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;Src:&#039;BA_SEN1&#039;/&#039;DHT22&#039; =&amp;gt; ident:BA_SEN1 dev:ESPEasy_BA_SEN1 combinedDevice:1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:Die Daten wurden vom ESP mit dem Namen BA_SEN1 und dem ESP Device DHT22 gesendet. Auf FHEM Seite werden die Daten dem Device mit dem Ident &amp;quot;BA_SEN1&amp;quot; zugewiesen. Dieses Ident wird vom FHEM Device ESPEasy_BA_SEN1 verwendet. Für diesen ESP ist das Attribut &#039;&#039;combineDevices&#039;&#039; wirksam. Wäre &#039;&#039;combineDevices&#039;&#039; nicht aktiv, dann würde das Ident &amp;quot;BA_SEN1_DHT22&amp;quot; lauten.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;dispatch BA_SEN1::10.0.0.148::1::0::1::i||unit||4||0|||i||sleep||0||0|||i||build||137||0|||i||version||9||0|||r||temperature||21.5||2|||r||humidity||12.2||2&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:Die Daten werden nun von der Bridge an das logische ESPEasy Device weitergegeben.&lt;br /&gt;
:Im Details bedeuten die einzelnen Elemente dieser Zeichenkette:&lt;br /&gt;
:*&#039;&#039;&#039;BA_SEN1::&#039;&#039;&#039;: Daten an das FHEM Device mit dem Ident BA_SEN1 schicken.&lt;br /&gt;
:*&#039;&#039;&#039;10.0.0.148::&#039;&#039;&#039;: IP Adresse des ESPs&lt;br /&gt;
:*&#039;&#039;&#039;1::&#039;&#039;&#039;: autocreate enabled? ja&lt;br /&gt;
:*&#039;&#039;&#039;0::&#039;&#039;&#039;: autosave enabled? nein&lt;br /&gt;
:*&#039;&#039;&#039;1::&#039;&#039;&#039;: wird nicht mehr benutzt&lt;br /&gt;
:*&#039;&#039;&#039;i||unit||4||0|||&#039;&#039;&#039;: Der ESP hat die Unit Nummer 4&lt;br /&gt;
:*&#039;&#039;&#039;i||sleep||1||0|||&#039;&#039;&#039;: Ist der ESP für den deep sleep mode konfiguriert? ja&lt;br /&gt;
:*&#039;&#039;&#039;i||build||137||0|||&#039;&#039;&#039;: ESPEasy build version 137&lt;br /&gt;
:*&#039;&#039;&#039;i||version||9||0|||&#039;&#039;&#039;: ESPEasy Release 9&lt;br /&gt;
:*&#039;&#039;&#039;r||temperature||21.5||2|||&#039;&#039;&#039;: Readingname: temperature, Wert: 21.5, Sensortyp: 2&lt;br /&gt;
:*&#039;&#039;&#039;r||humidity||12.2||2&#039;&#039;&#039;: Readingname: humidity, Wert 12.2, Sensortyp: 2&lt;br /&gt;
:Je nach ESPEasy Firmware Version können die Internals (Zeilen mit i am Anfang) auch &lt;br /&gt;
zusätzliche/andere Informationen aufweisen.&lt;br /&gt;
&lt;br /&gt;
;Closing tcp session.&lt;br /&gt;
:Die tcp Verbindung wird geschlossen, das temporäre ESPEasy Bridge Device wird gelöscht.&lt;br /&gt;
&lt;br /&gt;
===ESPEasy Device===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
2018.02.10 10:08:41.235 5: ESPEasy ESPEasy_BA_SEN1: Received: BA_SEN1::10.0.0.148::1::0::1::i||unit||4||0|||i||sleep||0||0|||i||build||137||0|||i||version||9||0|||r||temperature||21.2||2|||r||humidity||10.3||2&lt;br /&gt;
2018.02.10 10:08:41.236 4: ESPEasy ESPEasy_BA_SEN1: temperature: 21.2&lt;br /&gt;
2018.02.10 10:08:41.237 4: ESPEasy ESPEasy_BA_SEN1: humidity: 10.3&lt;br /&gt;
2018.02.10 10:08:41.237 5: ESPEasy ESPEasy_BA_SEN1: Internals: unit:4 sleep:0 build:137 version:9&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Im Detail:&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;Received: BA_SEN1::10.0.0.148::1::0::1::i||unit||4||0|||i||sleep||0||0|||i||build||137||0|||i||version||9||0|||r||temperature||21.2||2|||r||humidity||10.3||2&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:Das ist wieder die, bereits oben beschriebene, &#039;&#039;dispatch&#039;&#039; Zeichenkette, die jetzt vom logischen Device empfangen wurde.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;ESPEasy ESPEasy_BA_SEN1: temperature: 21.2&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;ESPEasy ESPEasy_BA_SEN1: humidity: 10.3&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:Die Readings &#039;&#039;temperature&#039;&#039; und &#039;&#039;humidity&#039;&#039; wurden aktualisiert.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;ESPEasy ESPEasy_BA_SEN1: Internals: unit:4 sleep:1 build:137 version:9&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:Die Internals &#039;&#039;unit&#039;&#039;, &#039;&#039;sleep&#039;&#039;, &#039;&#039;build&#039;&#039; und &#039;&#039;version&#039;&#039; wurden aktualisiert.&lt;br /&gt;
&lt;br /&gt;
===Zusätzliche Logeinträge===&lt;br /&gt;
Wird ein Device via Autocreate angelegt, gibt es zusätzliche Einträge im Logfile&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
2018.02.10 10:23:52.243 4: ESPEasy eb_10.0.0.148_3446: Src:&#039;BA_SEN1&#039;/&#039;DHT22&#039; =&amp;gt; ident:BA_SEN1 dev:undef combinedDevice:1&lt;br /&gt;
2018.02.10 10:23:52.243 2: ESPEasy eb: Autocreate ESPEasy_BA_SEN1 ESPEasy 10.0.0.148 80 eb BA_SEN1&lt;br /&gt;
2018.02.10 10:23:52.244 4: ESPEasy ESPEasy_BA_SEN1: Opened for BA_SEN1 10.0.0.148:80 using bridge eb&lt;br /&gt;
2018.02.10 10:23:52.258 5: ESPEasy ESPEasy_BA_SEN1: received event: ATTR ESPEasy_BA_SEN1 setState 3&lt;br /&gt;
2018.02.10 10:23:52.262 5: ESPEasy ESPEasy_BA_SEN1: received event: ATTR ESPEasy_BA_SEN1 Interval 300&lt;br /&gt;
2018.02.10 10:23:52.262 5: ESPEasy ESPEasy_BA_SEN1: Start internalTimer +304 =&amp;gt; 2018-02-10 10:28:57&lt;br /&gt;
2018.02.10 10:23:52.266 5: ESPEasy ESPEasy_BA_SEN1: received event: ATTR ESPEasy_BA_SEN1 presenceCheck 1&lt;br /&gt;
2018.02.10 10:23:52.269 5: ESPEasy ESPEasy_BA_SEN1: received event: ATTR ESPEasy_BA_SEN1 readingSwitchText 1&lt;br /&gt;
2018.02.10 10:23:52.271 2: ESPEasy eb: Autosave is disabled: Do not forget to save changes.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
*{{Link2CmdRef|Anker=ESPEasy|Lang=en|Label=FHEM ESPEasy Modul-Dokumentation}}&lt;br /&gt;
*[https://www.letscontrolit.com/wiki/index.php/ESPEasy ESP Easy Firmware Wiki] &lt;br /&gt;
*[https://www.letscontrolit.com/wiki/index.php/ESPEasy_Command_Reference ESP Easy Command Reference]&lt;br /&gt;
*[https://www.letscontrolit.com/wiki/index.php/Tutorial_Rules ESP Easy Rules]&lt;/div&gt;</summary>
		<author><name>DDT</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=ESPEasy&amp;diff=28044</id>
		<title>ESPEasy</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=ESPEasy&amp;diff=28044"/>
		<updated>2018-10-12T05:59:31Z</updated>

		<summary type="html">&lt;p&gt;DDT: Attribut userSetCmds hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuerung eines Espressif ESP8266 WLAN-SoC&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef= &lt;br /&gt;
|ModForumArea=Bastelecke/ESP8266&lt;br /&gt;
|ModFTopic=55728&lt;br /&gt;
|ModTechName=34_ESPEasy.pm&lt;br /&gt;
|ModOwner={{Link2FU|7465|dev0}}&lt;br /&gt;
}}&lt;br /&gt;
Dieser Wiki-Artikel soll und kann die {{Link2CmdRef|Anker=ESPEasy|Lang=en|Label=ESPEasy Modul-Dokumentation}}(aka FHEM Command Reference) nicht ersetzen, sondern ergänzt die Dokumentation nur um ein paar Informationen.&lt;br /&gt;
&lt;br /&gt;
== Grundlegende ESP Easy Einstellungen ==&lt;br /&gt;
&lt;br /&gt;
Diese Einstellungen sind in der Weboberfläche des ESP vorzunehmen und bewirken u.a., dass für jedes ESPEasy-Device ein FHEM Device angelegt wird. Das kann bspw. für einen ESP sinnvoll sein, der Relays über GPIOs schalten soll (ESPEasy Device-Type &#039;&#039;Switch Input&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
*Es muss ein einmaliger ESP Devicename vergeben werden (&#039;&#039;Config&#039;&#039; -&amp;gt; &#039;&#039;Main Settings&#039;&#039; -&amp;gt;&#039;&#039;Name&#039;&#039;)&lt;br /&gt;
*Die verwendeten ESP Easy Devices sollten einen ESP-weit einmaligen Namen erhalten (&#039;&#039;Device&#039;&#039; -&amp;gt; &#039;&#039;Edit&#039;&#039; -&amp;gt; &#039;&#039;Task Settings&#039;&#039; -&amp;gt; &#039;&#039;Name&#039;&#039;). Ist dieser Name nicht eindeutig oder wird nicht vergeben, dann gibt es u.a. Probleme mit ESP Easy Rules [link].&lt;br /&gt;
*Jeder Wert, der gesendet werden soll, benötigt ebenfalls einen Namen, der in diesem ESP Device einmalig sein muss (&#039;&#039;Device&#039;&#039; -&amp;gt; &#039;&#039;Edit&#039;&#039; -&amp;gt; &#039;&#039;Optional Settings&#039;&#039; -&amp;gt; &#039;&#039;Value Name&#039;&#039;)&lt;br /&gt;
*Soll dieser Wert nun automatisch in einem Interval von x Sekunden (an FHEM) gesendet werden, dann muss noch das &#039;&#039;Delay&#039;&#039; (&#039;&#039;Device&#039;&#039; -&amp;gt; &#039;&#039;Edit&#039;&#039; -&amp;gt; &#039;&#039;Task Settings&#039;&#039; -&amp;gt; &#039;&#039;Delay&#039;&#039;) angegeben und die Option &#039;&#039;Send Data&#039;&#039; (&#039;&#039;Device&#039;&#039; -&amp;gt; &#039;&#039;Edit&#039;&#039; -&amp;gt; &#039;&#039;Task Settings&#039;&#039; -&amp;gt; &#039;&#039;Send Data&#039;&#039;) aktiviert werden. Die Option &#039;&#039;Send Boot State&#039;&#039; ist an dieser Stelle ebenfalls sinnvoll.&lt;br /&gt;
&lt;br /&gt;
=== Attribut combineDevices ===&lt;br /&gt;
&lt;br /&gt;
Wenn das oben genannte Verhalten (ein FHEM Device pro ESP Easy Device) nicht gewünscht ist, dann kann man mittels des Attributes &#039;&#039;combineDevices&#039;&#039; der {{Link2CmdRef|Anker=ESPEasy_bridge_define|Lang=en|Label=ESPEasy Bridge}} einstellen, ob die ESP Easy Devices eines einzelnen ESPs in ein FHEM Device zusammengeführt werden sollen.&lt;br /&gt;
Diese Funktionalität kann man global einschalten, indem man dem Attribut &#039;&#039;combineDevices&#039;&#039; den Wert &#039;&#039;1&#039;&#039; gibt.&lt;br /&gt;
&lt;br /&gt;
Will man nur von bestimmten ESPs die Devices zusammen fassen, dann kann man eine komma-getrennte Liste der ESPs angeben. Die Liste kann aus ESP Namen, IP Adressen und/oder Netzwerkbereichen bestehen. Netzwerkbereiche können mit einer Netzmaske in dotted decimal (/255.255.255.0) oder in bitmask (/24) Schreibweise angegeben werden. Hostnamen und FQDNs werden nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
Beispiele:&lt;br /&gt;
 attr &amp;lt;esp&amp;gt; combineDevices ESP1,ESP2&lt;br /&gt;
 attr &amp;lt;esp&amp;gt; combineDevices 10.0.0.148,10.0.0.149&lt;br /&gt;
 attr &amp;lt;esp&amp;gt; combineDevices 192.168.124.0/24&lt;br /&gt;
 attr &amp;lt;esp&amp;gt; combineDevices 192.168.124.0/255.255.255.0&lt;br /&gt;
 attr &amp;lt;esp&amp;gt; combineDevices ESP1,ESP2,10.0.0.0/8,192.168.0.0/255.255.0.0&lt;br /&gt;
&lt;br /&gt;
IPv6 Adressen/Bereiche werden zwar von FHEM, allerdings zur Zeit noch nicht von der öffentlichen ESP Easy Distribution unterstützt.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
 attr &amp;lt;esp&amp;gt; combineDevices 2001:1a50:50a8::148,2001:abcd:efff::/48&lt;br /&gt;
&lt;br /&gt;
== Presence Erkennung ==&lt;br /&gt;
Die &amp;quot;Presence Detection&amp;quot;, also die Erkennung, ob ein ESP noch Daten sendet, wurde anhand des Alters der empfangenen (Sensor-)Werte realisiert. Vereinfacht gesagt: Werden keine Readings mehr innerhalb von x Sekunden empfangen (siehe Device-Attribut &#039;&#039;Interval&#039;&#039;), wird das FHEM Device als &amp;quot;absent&amp;quot; gekennzeichnet. Das hat den Vorteil, dass auch ESP Easy Devices, die zwischen dem Senden von Daten in den so genannten Deep Sleep Modus gehen, erkannt werden können.&lt;br /&gt;
&lt;br /&gt;
Das Attribut &#039;&#039;Interval&#039;&#039; gibt unter anderem vor, in welchem zeitlichen Abstand Werte vom ESP erwartet werden, damit der ESP als &amp;quot;present&amp;quot; (und nicht absent) markiert wird.&lt;br /&gt;
&lt;br /&gt;
Wenn ein ESP Easy Device Werte alle 60 Sekunden sendet (Option &#039;&#039;Delay&#039;&#039; in der ESP Easy Device GUI) und das FHEM Device Interval auf 60 gesetzt ist, dann würde das Device-Reading &amp;quot;presence&amp;quot; auf &amp;quot;absent&amp;quot; wechseln, wenn innerhalb von 60-120 Sekunden keine Werte empfangen werden.&lt;br /&gt;
&lt;br /&gt;
Also wäre zum Beispiel die ESP Easy Firmware so zu konfigurieren, dass mindestens ein Wert alle 60 Sekunden gesendet wird. Das Interval-Attribut des entsprechenden FHEM ESPEasy Device müsste ebenfalls auf 60 (default) gesetzt werden. Ein paar Sekunden Toleranz sind im ESPEasy Modul eingebaut.&lt;br /&gt;
&lt;br /&gt;
Wenn man kein ESP Easy Device hat, das Daten an FHEM sendet, dann kann man zusätzlich einen der &amp;quot;System Info&amp;quot; Werte senden lassen und &#039;&#039;combineDevices&#039;&#039; für diesen ESP aktivieren. Es reicht nämlich, wenn ein Reading regelmäßig aktualisiert wird.&lt;br /&gt;
&lt;br /&gt;
Wenn die Presence Erkennung nicht genutzt werden soll, dann muss das Attribut &#039;&#039;presenceCheck&#039;&#039; auf 0 gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
== Sicherheit ==&lt;br /&gt;
&lt;br /&gt;
Wenn eine ESPEasy Bridge in FHEM eingerichtet wurde, dann werden Verbindungen nur von IP Adressen aus [https://tools.ietf.org/html/rfc1918 privaten Bereichen] zugelassen.&lt;br /&gt;
&lt;br /&gt;
Wenn ESP Easy Geräte außerhalb dieser Bereiche Daten an FHEM senden (z.B. über das Internet), dann muss das in der ESPEasy Bridge konfiguriert werden, andernfalls wird die Verbindung abgewiesen.&lt;br /&gt;
&lt;br /&gt;
Einerseits muss die IP Adresse bzw. der IP Bereich erlaubt (Attribute &#039;&#039;allowedIPs&#039;&#039;, &#039;&#039;deniedIPs&#039;&#039;), andererseits die Authentifizierung über &amp;quot;Basic Auth&amp;quot; in der ESPEasy Bridge eingerichtet werden.&lt;br /&gt;
Die Authentifizierung wird über das Attribut &#039;&#039;authentication&#039;&#039; eingeschaltet. Die Benutzerdaten für die Authentifizierung werden über die Set-Befehle &#039;&#039;user&#039;&#039; und &#039;&#039;pass&#039;&#039; der Bridge eingegeben&lt;br /&gt;
{{Hinweis|Hinweis: Username und Passwort werden unverschlüsselt in ./FHEM/FhemUtils/uniqueID gespeichert.}}&lt;br /&gt;
&lt;br /&gt;
=== Attribut authentication ===&lt;br /&gt;
Beispiel:&lt;br /&gt;
 set &amp;lt;espbridge&amp;gt; user MeinUserName&lt;br /&gt;
 set &amp;lt;espbridge&amp;gt; pass sehrgeheim&lt;br /&gt;
 attr &amp;lt;espbridge&amp;gt; authentication 1&lt;br /&gt;
&lt;br /&gt;
=== Attribute allowedIPs / deniedIPs ===&lt;br /&gt;
Beispiel:&lt;br /&gt;
 attr &amp;lt;espbridge&amp;gt; allowedIPs 192.0.2.0/24   # erlaubt ist 192.0.2.0 bis 192.0.2.255&lt;br /&gt;
 attr &amp;lt;espbridge&amp;gt; deniedIPs 192.0.2.0/29    # ausgeschlossen werden aber die IPs von 192.0.2.0 bis 192.0.2.7&lt;br /&gt;
&lt;br /&gt;
Das Attribut &#039;&#039;deniedIPs&#039;&#039; hat Vorrang vor &#039;&#039;allowedIPs&#039;&#039;. Das bedeutet, dass verbotene IPs niemals eine Verbindung aufbauen können, auch wenn sie vorher erlaubt wurden.&lt;br /&gt;
&lt;br /&gt;
Regular Expressions sind können ebenfalls verwendet werden:&lt;br /&gt;
 attr &amp;lt;espbridge&amp;gt; allowedIPs 192.0.2.1([0-4][0-9]|50)     # erlaubt IP von 192.168.30.100 bis 192.168.30.150&lt;br /&gt;
&lt;br /&gt;
Alle Details dazu sind in der {{Link2CmdRef|Anker=ESPEasy_bridge_attr_allowedips|Lang=en|Label=Command Reference}} beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Erweiterte Beispiele==&lt;br /&gt;
Hier ein paar Beispiele für unterschiedlichste Anwendungsfälle&lt;br /&gt;
&lt;br /&gt;
===  Schalter in FHEMWEB mit devStateIcons ===&lt;br /&gt;
Beispiel für GPIO 12:&lt;br /&gt;
 attr &amp;lt;ESP&amp;gt; stateFormat {ReadingsVal($name,&amp;quot;presence&amp;quot;,&amp;quot;&amp;quot;) eq &amp;quot;absent&amp;quot; ? &amp;quot;absent&amp;quot; : ReadingsVal($name,&amp;quot;GPIO12&amp;quot;,&amp;quot;&amp;quot;)}&lt;br /&gt;
 attr &amp;lt;ESP&amp;gt; devStateIcon on:ios-on-green:off off:ios-off:on absent:10px-kreis-rot:statusRequest&lt;br /&gt;
 attr &amp;lt;ESP&amp;gt; eventMap /gpio 12 on:on/gpio 12 off:off/&lt;br /&gt;
 attr &amp;lt;ESP&amp;gt; webCmd :&lt;br /&gt;
&lt;br /&gt;
=== on-for-timer und off-for-timer ===&lt;br /&gt;
Beispiel für GPIO 15:&lt;br /&gt;
 attr &amp;lt;ESP&amp;gt; /longpulse 15 on:on-for-time:slider,0,1,60/longpulse 15 off:off-for-time:slider,0,1,60/&lt;br /&gt;
&lt;br /&gt;
=== (on|off)-for-timer und devStateIcons ===&lt;br /&gt;
Beispiel für GPIO 15:&lt;br /&gt;
 attr &amp;lt;ESP&amp;gt; eventMap /longpulse 15 on:on-for-time:slider,0,1,60/longpulse 15 off:off-for-time:slider,0,1,60/gpio 15 on:on/gpio 15 off:off/&lt;br /&gt;
&lt;br /&gt;
=== userSetCmds ===&lt;br /&gt;
Mithilfe des Attributes userSetCmds kann man:&lt;br /&gt;
*Einzelne ESP Easy Befehle nachrüsten&lt;br /&gt;
*Eigene oder nicht unterstützte Plugins integrieren&lt;br /&gt;
*Bereits integrierte Befehle verändern&lt;br /&gt;
*Befehle einzelner Plugins mappen: Statt &#039;set &amp;lt;dev&amp;gt; plugin_a on&#039; kann man so &#039;set &amp;lt;dev&amp;gt; on&#039; verwenden. Das wird z.B. benötigt, um FHEMs setExtentions oder auch um FHEMWEB Widgets nutzen zu können.&lt;br /&gt;
&lt;br /&gt;
Die genrelle Syntax des Attributes ist ein Perl Hash, der die Eigenschaften des ESP Easy Befehls/Plugins beschreibt.&lt;br /&gt;
Folgende Eigenschaften (Keys) gibt es:&lt;br /&gt;
*args: Anzahl der benötigten Parameter. Default: 0&lt;br /&gt;
*url: Die aufzurufende URL. Default: /control?cmd=&lt;br /&gt;
*widget: Das FHEMWEB Widget, dass beim FHEMWEB Setter des Befehls verwendet werden soll. Default: keines&lt;br /&gt;
*usage: Diese Zeichenkette wird zum einen angezeigt, wenn ein falscher oder zu wenige Parameter beim Befehlsaufruf angeben wurden. Zum anderen haben folgende Zeichenketten eine besondere Bedeutung:&lt;br /&gt;
**&amp;lt;0|1|off|on&amp;gt;: Innerhalb des FHEM Befehl kann on/off statt 0/1 angegeben werden. An die ESP Easy Firmware wird 0/1 gesendet.&lt;br /&gt;
**&amp;lt;pin&amp;gt;: Bei dem Paramater handelt es sin um einen GPIO Port. Aliasnamen können verwendet werden. Siehe: get &amp;lt;dev&amp;gt; pinMap&lt;br /&gt;
**&amp;lt;text&amp;gt;: Dieser Paramter wird url encoded an die ESP Easy Firmware gesendet. Wird für die Ausgabe auf (O)led Displays benötigt.&lt;br /&gt;
*cmds: Diese Eigenschaft (key) muss ebenfalls ein Perl Hash sein. Dieser Key definiert die Unterbefehle des Plugins. Alle oben genannten Eigenschaften (Keys) können benutzt werden. Nur der Key &#039;url&#039; kann nicht angegeben werden, da in diesem Fall die URL des Plugins verwendet wird.&lt;br /&gt;
&lt;br /&gt;
Ein einzelner neuer Befehl &#039;myCmd1&#039;:&lt;br /&gt;
 attr &amp;lt;dev&amp;gt; userSetCmds ( myCmd1 =&amp;gt; {} )&lt;br /&gt;
&lt;br /&gt;
Ein einzelner neuer Befehl &#039;myCmd1&#039;. Der erste Paramater enthält einen GPIO Port, der durch Aliasnamen ersetzt werden kann. Der zweite Paramater kann als on/off geschrieben werden, gesendet wird aber 1/0:&lt;br /&gt;
 attr &amp;lt;dev&amp;gt; userSetCmds ( myCmd1 =&amp;gt; { usage =&amp;gt; &amp;quot;&amp;lt;pin&amp;gt; &amp;lt;0|1|off|on&amp;gt;&amp;quot; } )&lt;br /&gt;
&lt;br /&gt;
Zwei neue Befehle, mit allen default Werten:&lt;br /&gt;
 attr &amp;lt;dev&amp;gt; userSetCmds ( myCmd1 =&amp;gt; {}, myCmd2 =&amp;gt; {} )&lt;br /&gt;
&lt;br /&gt;
Zwei neue Befehle, der zweite Befehl verwendet eine abweichende URL:&lt;br /&gt;
 attr &amp;lt;dev&amp;gt; userSetCmds ( myCmd1 =&amp;gt; {}, myCmd2 =&amp;gt; { url =&amp;gt; &amp;quot;/?cmd=&amp;quot; } )&lt;br /&gt;
&lt;br /&gt;
Beispiel für das fiktive Plugin &#039;LED&#039; mit den Unterbefehlen &#039;rgb&#039; und &#039;ct&#039;. Die Unterbefehle &#039;rgb&#039; und &#039;ct&#039; können ohne Angabe des Pluginnamens &#039;LED&#039; verwendet werden. Zusätzlich werden in der FHEMWEB-Ansicht die Slider Widgets hsv/ct verwendet:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
attr &amp;lt;dev&amp;gt; userSetCmds (&lt;br /&gt;
  LED =&amp;gt; {&lt;br /&gt;
    args  =&amp;gt; 2,&lt;br /&gt;
    url   =&amp;gt; &amp;quot;/control?cmd=&amp;quot;,&lt;br /&gt;
    usage =&amp;gt; &amp;quot;&amp;lt;rgb|ct&amp;gt; &amp;lt;rrggbb|colortemp&amp;gt;&amp;quot;,&lt;br /&gt;
    cmds  =&amp;gt; {&lt;br /&gt;
      rgb =&amp;gt; { args =&amp;gt; 1, usage =&amp;gt; &amp;quot;&amp;lt;rrggbb&amp;gt;&amp;quot;,    widget =&amp;gt; &amp;quot;colorpicker,HSV&amp;quot; },&lt;br /&gt;
      ct  =&amp;gt; { args =&amp;gt; 1, usage =&amp;gt; &amp;quot;&amp;lt;colortemp&amp;gt;&amp;quot;, widget =&amp;gt; &amp;quot;colorpicker,CT,2000,10,4000&amp;quot; }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
) &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Logging==&lt;br /&gt;
===ESPEasy Bridge===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
2018.02.10 08:48:06.197 4: Connection accepted from eb_10.0.0.148_25654&lt;br /&gt;
2018.02.10 08:48:06.199 4: ESPEasy eb_10.0.0.148_25654: Peer address accepted&lt;br /&gt;
2018.02.10 08:48:06.199 5: ESPEasy eb_10.0.0.148_25654: Received header: {&#039;Content-Length&#039; =&amp;gt; &#039;298&#039;,&#039;Authorization&#039; =&amp;gt; &#039;Basic ***** &#039;,&#039;Host&#039; =&amp;gt; &#039;10.0.0.53&#039;,&#039;Connection&#039; =&amp;gt; &#039;close&#039;}&lt;br /&gt;
2018.02.10 08:48:06.199 5: ESPEasy eb_10.0.0.148_25654: Received content: {&amp;quot;module&amp;quot;:&amp;quot;ESPEasy&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;1.02&amp;quot;,&amp;quot;data&amp;quot;:{&amp;quot;ESP&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;BA_SEN1&amp;quot;,&amp;quot;unit&amp;quot;:4,&amp;quot;version&amp;quot;:9,&amp;quot;build&amp;quot;:137,&amp;quot;sleep&amp;quot;:0,&amp;quot;ip&amp;quot;:&amp;quot;10.0.0.148&amp;quot;},&amp;quot;SENSOR&amp;quot;:{&amp;quot;0&amp;quot;:{&amp;quot;deviceName&amp;quot;:&amp;quot;DHT22&amp;quot;,&amp;quot;valueName&amp;quot;:&amp;quot;temperature&amp;quot;,&amp;quot;type&amp;quot;:2,&amp;quot;value&amp;quot;:&amp;quot;21.5&amp;quot;},&amp;quot;1&amp;quot;:{&amp;quot;deviceName&amp;quot;:&amp;quot;DHT22&amp;quot;,&amp;quot;valueName&amp;quot;:&amp;quot;humidity&amp;quot;,&amp;quot;type&amp;quot;:2,&amp;quot;value&amp;quot;:&amp;quot;12.2&amp;quot;}}}}&lt;br /&gt;
2018.02.10 08:48:06.200 4: ESPEasy eb_10.0.0.148_25654: Basic authentication accepted&lt;br /&gt;
2018.02.10 08:48:06.200 4: ESPEasy eb_10.0.0.148_25654: Send http close &#039;200 OK&#039;&lt;br /&gt;
2018.02.10 08:48:06.202 4: ESPEasy eb_10.0.0.148_25654: Src:&#039;BA_SEN1&#039;/&#039;DHT22&#039; =&amp;gt; ident:BA_SEN1 dev:ESPEasy_BA_SEN1 combinedDevice:1&lt;br /&gt;
2018.02.10 08:48:06.202 5: eb: dispatch BA_SEN1::10.0.0.148::1::0::1::i||unit||4||0|||i||sleep||0||0|||i||build||137||0|||i||version||9||0|||r||temperature||21.5||2|||r||humidity||12.2||2&lt;br /&gt;
2018.02.10 08:48:06.209 4: ESPEasy eb_10.0.0.148_25654: Closing tcp session.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Detail bedeuten die Logeinträge:&lt;br /&gt;
&lt;br /&gt;
;Connection accepted from eb_10.0.0.148_25654&lt;br /&gt;
:Eine TCP Verbindung wurde vom ESP (IP: 10.0.0.148, source port: 25654) zur Bridge &amp;quot;eb&amp;quot; aufgebaut.&lt;br /&gt;
&lt;br /&gt;
;ESPEasy eb_10.0.0.148_25654&lt;br /&gt;
:Es wurde ein temporäres ESPEasy Bridge Devices angelegt, das Daten von der IP 10.0.0.148 und Quellport 25654 empfängt.&lt;br /&gt;
&lt;br /&gt;
;Peer address accepted&lt;br /&gt;
:Die IP Adresse des ESP wurde akzeptiert und die empfangenen Daten werden nun verarbeitet. Wenn die IP Adresse nicht akzeptiert wird, dann wird &#039;&#039;&#039;Peer address rejected&#039;&#039;&#039; gelogged.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;Received header: {&#039;Content-Length&#039; =&amp;gt; &#039;298&#039;,&#039;Authorization&#039; =&amp;gt; &#039;Basic ***** &#039;,&#039;Host&#039; =&amp;gt; &#039;10.0.0.53&#039;,&#039;Connection&#039; =&amp;gt; &#039;close&#039;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:Diese &#039;&#039;received header&#039;&#039; Zeile enthält die Daten des Headers, die via HTTP vom ESP empfangen werden. Ein eventuell vorhandenes Passwort wird maskiert.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;Received content: {&amp;quot;module&amp;quot;:&amp;quot;ESPEasy&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;1.02&amp;quot;,&amp;quot;data&amp;quot;:&amp;quot;ESP&amp;quot;:&amp;quot;name&amp;quot;:&amp;quot;BA_SEN1&amp;quot;,&amp;quot;unit&amp;quot;:4,&amp;quot;version&amp;quot;:9,&amp;quot;build&amp;quot;:137,&amp;quot;sleep&amp;quot;:0,&amp;quot;ip&amp;quot;:&amp;quot;10.0.0.148&amp;quot;},&amp;quot;SENSOR&amp;quot;:&amp;quot;0&amp;quot;:{&amp;quot;deviceName&amp;quot;:&amp;quot;DHT22&amp;quot;,&amp;quot;valueName&amp;quot;:&amp;quot;temperature&amp;quot;,&amp;quot;type&amp;quot;:2,&amp;quot;value&amp;quot;:&amp;quot;21.5&amp;quot;},&amp;quot;1&amp;quot;:&amp;quot;deviceName&amp;quot;:&amp;quot;DHT22&amp;quot;,&amp;quot;valueName&amp;quot;:&amp;quot;humidity&amp;quot;,&amp;quot;type&amp;quot;:2,&amp;quot;value&amp;quot;:&amp;quot;12.2&amp;quot;}}}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:Diese &#039;&#039;received content&#039;&#039; Zeile enthält die Daten, die vom ESP via HTTP empfangenen werden. Mehr oder weniger Klartext im JSON Format.&lt;br /&gt;
&lt;br /&gt;
;Basic authentication accepted&lt;br /&gt;
:In diesem Schritt wird geprüft ob eine Authentifizierung erforderlich und im besten Fall auch korrekt ist.&lt;br /&gt;
:Folgende Meldungen wären an dieser Stelle auch möglich:&lt;br /&gt;
:*No basic authentication required (auf beiden Seiten ist keine basic auth eingerichtet)&lt;br /&gt;
:*No basic authentication active but credentials received (auf FHEM Seite ist keine basic auth eingerichtet, der ESP sendet aber basic auth)&lt;br /&gt;
:*Basic authentication rejected (Username oder Passwort passen nicht zusammen)&lt;br /&gt;
&lt;br /&gt;
;Send http close &#039;200 OK&#039;&lt;br /&gt;
:&amp;quot;Quittung&amp;quot; an den ESP senden. Daraufhin wird der ESP die Verbindung beenden.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;Src:&#039;BA_SEN1&#039;/&#039;DHT22&#039; =&amp;gt; ident:BA_SEN1 dev:ESPEasy_BA_SEN1 combinedDevice:1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:Die Daten wurden vom ESP mit dem Namen BA_SEN1 und dem ESP Device DHT22 gesendet. Auf FHEM Seite werden die Daten dem Device mit dem Ident &amp;quot;BA_SEN1&amp;quot; zugewiesen. Dieses Ident wird vom FHEM Device ESPEasy_BA_SEN1 verwendet. Für diesen ESP ist das Attribut &#039;&#039;combineDevices&#039;&#039; wirksam. Wäre &#039;&#039;combineDevices&#039;&#039; nicht aktiv, dann würde das Ident &amp;quot;BA_SEN1_DHT22&amp;quot; lauten.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;dispatch BA_SEN1::10.0.0.148::1::0::1::i||unit||4||0|||i||sleep||0||0|||i||build||137||0|||i||version||9||0|||r||temperature||21.5||2|||r||humidity||12.2||2&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:Die Daten werden nun von der Bridge an das logische ESPEasy Device weitergegeben.&lt;br /&gt;
:Im Details bedeuten die einzelnen Elemente dieser Zeichenkette:&lt;br /&gt;
:*&#039;&#039;&#039;BA_SEN1::&#039;&#039;&#039;: Daten an das FHEM Device mit dem Ident BA_SEN1 schicken.&lt;br /&gt;
:*&#039;&#039;&#039;10.0.0.148::&#039;&#039;&#039;: IP Adresse des ESPs&lt;br /&gt;
:*&#039;&#039;&#039;1::&#039;&#039;&#039;: autocreate enabled? ja&lt;br /&gt;
:*&#039;&#039;&#039;0::&#039;&#039;&#039;: autosave enabled? nein&lt;br /&gt;
:*&#039;&#039;&#039;1::&#039;&#039;&#039;: wird nicht mehr benutzt&lt;br /&gt;
:*&#039;&#039;&#039;i||unit||4||0|||&#039;&#039;&#039;: Der ESP hat die Unit Nummer 4&lt;br /&gt;
:*&#039;&#039;&#039;i||sleep||1||0|||&#039;&#039;&#039;: Ist der ESP für den deep sleep mode konfiguriert? ja&lt;br /&gt;
:*&#039;&#039;&#039;i||build||137||0|||&#039;&#039;&#039;: ESPEasy build version 137&lt;br /&gt;
:*&#039;&#039;&#039;i||version||9||0|||&#039;&#039;&#039;: ESPEasy Release 9&lt;br /&gt;
:*&#039;&#039;&#039;r||temperature||21.5||2|||&#039;&#039;&#039;: Readingname: temperature, Wert: 21.5, Sensortyp: 2&lt;br /&gt;
:*&#039;&#039;&#039;r||humidity||12.2||2&#039;&#039;&#039;: Readingname: humidity, Wert 12.2, Sensortyp: 2&lt;br /&gt;
:Je nach ESPEasy Firmware Version können die Internals (Zeilen mit i am Anfang) auch &lt;br /&gt;
zusätzliche/andere Informationen aufweisen.&lt;br /&gt;
&lt;br /&gt;
;Closing tcp session.&lt;br /&gt;
:Die tcp Verbindung wird geschlossen, das temporäre ESPEasy Bridge Device wird gelöscht.&lt;br /&gt;
&lt;br /&gt;
===ESPEasy Device===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
2018.02.10 10:08:41.235 5: ESPEasy ESPEasy_BA_SEN1: Received: BA_SEN1::10.0.0.148::1::0::1::i||unit||4||0|||i||sleep||0||0|||i||build||137||0|||i||version||9||0|||r||temperature||21.2||2|||r||humidity||10.3||2&lt;br /&gt;
2018.02.10 10:08:41.236 4: ESPEasy ESPEasy_BA_SEN1: temperature: 21.2&lt;br /&gt;
2018.02.10 10:08:41.237 4: ESPEasy ESPEasy_BA_SEN1: humidity: 10.3&lt;br /&gt;
2018.02.10 10:08:41.237 5: ESPEasy ESPEasy_BA_SEN1: Internals: unit:4 sleep:0 build:137 version:9&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Im Detail:&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;Received: BA_SEN1::10.0.0.148::1::0::1::i||unit||4||0|||i||sleep||0||0|||i||build||137||0|||i||version||9||0|||r||temperature||21.2||2|||r||humidity||10.3||2&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:Das ist wieder die, bereits oben beschriebene, &#039;&#039;dispatch&#039;&#039; Zeichenkette, die jetzt vom logischen Device empfangen wurde.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;ESPEasy ESPEasy_BA_SEN1: temperature: 21.2&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;ESPEasy ESPEasy_BA_SEN1: humidity: 10.3&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:Die Readings &#039;&#039;temperature&#039;&#039; und &#039;&#039;humidity&#039;&#039; wurden aktualisiert.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;nowiki&amp;gt;ESPEasy ESPEasy_BA_SEN1: Internals: unit:4 sleep:1 build:137 version:9&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:Die Internals &#039;&#039;unit&#039;&#039;, &#039;&#039;sleep&#039;&#039;, &#039;&#039;build&#039;&#039; und &#039;&#039;version&#039;&#039; wurden aktualisiert.&lt;br /&gt;
&lt;br /&gt;
===Zusätzliche Logeinträge===&lt;br /&gt;
Wird ein Device via Autocreate angelegt, gibt es zusätzliche Einträge im Logfile&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
2018.02.10 10:23:52.243 4: ESPEasy eb_10.0.0.148_3446: Src:&#039;BA_SEN1&#039;/&#039;DHT22&#039; =&amp;gt; ident:BA_SEN1 dev:undef combinedDevice:1&lt;br /&gt;
2018.02.10 10:23:52.243 2: ESPEasy eb: Autocreate ESPEasy_BA_SEN1 ESPEasy 10.0.0.148 80 eb BA_SEN1&lt;br /&gt;
2018.02.10 10:23:52.244 4: ESPEasy ESPEasy_BA_SEN1: Opened for BA_SEN1 10.0.0.148:80 using bridge eb&lt;br /&gt;
2018.02.10 10:23:52.258 5: ESPEasy ESPEasy_BA_SEN1: received event: ATTR ESPEasy_BA_SEN1 setState 3&lt;br /&gt;
2018.02.10 10:23:52.262 5: ESPEasy ESPEasy_BA_SEN1: received event: ATTR ESPEasy_BA_SEN1 Interval 300&lt;br /&gt;
2018.02.10 10:23:52.262 5: ESPEasy ESPEasy_BA_SEN1: Start internalTimer +304 =&amp;gt; 2018-02-10 10:28:57&lt;br /&gt;
2018.02.10 10:23:52.266 5: ESPEasy ESPEasy_BA_SEN1: received event: ATTR ESPEasy_BA_SEN1 presenceCheck 1&lt;br /&gt;
2018.02.10 10:23:52.269 5: ESPEasy ESPEasy_BA_SEN1: received event: ATTR ESPEasy_BA_SEN1 readingSwitchText 1&lt;br /&gt;
2018.02.10 10:23:52.271 2: ESPEasy eb: Autosave is disabled: Do not forget to save changes.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
*{{Link2CmdRef|Anker=ESPEasy|Lang=en|Label=FHEM ESPEasy Modul-Dokumentation}}&lt;br /&gt;
*[https://www.letscontrolit.com/wiki/index.php/ESPEasy ESP Easy Firmware Wiki] &lt;br /&gt;
*[https://www.letscontrolit.com/wiki/index.php/ESPEasy_Command_Reference ESP Easy Command Reference]&lt;br /&gt;
*[https://www.letscontrolit.com/wiki/index.php/Tutorial_Rules ESP Easy Rules]&lt;/div&gt;</summary>
		<author><name>DDT</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SmartVISU_Installation&amp;diff=21449</id>
		<title>SmartVISU Installation</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SmartVISU_Installation&amp;diff=21449"/>
		<updated>2017-05-06T12:05:57Z</updated>

		<summary type="html">&lt;p&gt;DDT: moved / bring forward: &amp;quot;Config.ini kopieren&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:smartVISU Installation}}&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel beschreibt die Installation des Web-Frontends [[smartVISU]] und berücksichtigt mehrerer Alternativen für unterschiedliche Web-Server. Zum Betrieb von smartVISU mit FHEM ist die Installation und Konfiguration von [[fronthem]] erforderlich.&lt;br /&gt;
&lt;br /&gt;
Alle Artikel zur Thematik fronthem/smartVISU sind [[:Kategorie:fronthem/smartVISU|hier]] kategorisiert. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
Für die Installation ist es immer sinnvoll, von einem auf aktuellem Stand befindlichen System zu starten.&lt;br /&gt;
&lt;br /&gt;
Für das Betriebssystem (Linuxderivat)&lt;br /&gt;
 sudo apt-get update&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get upgrade&lt;br /&gt;
&lt;br /&gt;
Für FHEM&lt;br /&gt;
 &amp;lt;code&amp;gt;update&amp;lt;/code&amp;gt; in der Eingabezeile&lt;br /&gt;
&lt;br /&gt;
Die Installation lässt sich in 4 Bereiche unterteilen.&lt;br /&gt;
&lt;br /&gt;
== Webserver installieren ==&lt;br /&gt;
&lt;br /&gt;
Welcher Webserver zum Einsatz kommt, ist unerheblich. Im Folgenden sind Beispiele für lighttpd, nginx und Apache2 zu finden. Es wird nur &#039;&#039;&#039;eine&#039;&#039;&#039; Installation benötigt.&lt;br /&gt;
&lt;br /&gt;
=== lighttpd ===&lt;br /&gt;
Dieses Beispiel basiert auf diesem {{Link2Forum|Topic= 27291|Message=208880|LinkText=Forumsbeitrag}}.&lt;br /&gt;
&lt;br /&gt;
Webserver installieren:&lt;br /&gt;
 sudo apt-get install lighttpd&lt;br /&gt;
&lt;br /&gt;
PHP installieren:&lt;br /&gt;
 sudo apt-get install php5-common php5-cgi php5&lt;br /&gt;
&lt;br /&gt;
PHP konfigurieren:&lt;br /&gt;
 sudo lighty-enable-mod fastcgi-php&lt;br /&gt;
&lt;br /&gt;
Webserver-Dienst einmal neu starten, damit die Einstellungen wirksam werden:&lt;br /&gt;
 sudo service lighttpd force-reload&lt;br /&gt;
&lt;br /&gt;
Welchseln in des Root-Verzeichnis des Webservers (bei Bedarf, wenn sich das Root-Verzeichnis einer Distribution woanders ist, muss dieser Pfad entsprechend angepasst werden):&lt;br /&gt;
 cd /var/www&lt;br /&gt;
&lt;br /&gt;
Setzen des Besitzers und der Gruppe für das Root-Verzeichnis (TODO: Ist dieser Schritt wirklich notwendig?):&lt;br /&gt;
 sudo chown www-data:www-data /var/www&lt;br /&gt;
&lt;br /&gt;
Setzen der Berechtigungen des Root-Verzeichnis (TODO: Ist dieser Schritt wirklich notwendig?):&lt;br /&gt;
 sudo chmod 775 /var/www&lt;br /&gt;
&lt;br /&gt;
=== nginx ===&lt;br /&gt;
==== mit PHP5 ====&lt;br /&gt;
&lt;br /&gt;
Dieses Beispiel basiert auf diesem {{Link2Forum|Topic=30909|Message=273180|LinkText=Forumsbeitrag}}.&lt;br /&gt;
&lt;br /&gt;
Für die Installation des Webservers und PHP5 werden folgende Pakete benötigt:&lt;br /&gt;
 sudo apt-get install nginx php5-fpm&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration für PHP muss in der entsprechenden Konfigurationsdatei vorgenommen werden:&lt;br /&gt;
 sudo nano /etc/nginx/sites-enabled/default&lt;br /&gt;
&lt;br /&gt;
Folgende Konfiguration sollte direkt funktionieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
         listen 80;&lt;br /&gt;
         root /var/www;&lt;br /&gt;
         index index.html index.php;&lt;br /&gt;
         server_name localhost;&lt;br /&gt;
         location / {&lt;br /&gt;
               try_files $uri $uri/ /index.php?$args;&lt;br /&gt;
         }&lt;br /&gt;
         location ~ \.php$ {&lt;br /&gt;
                 try_files $uri =404;&lt;br /&gt;
                 fastcgi_pass unix:/var/run/php5-fpm.sock;&lt;br /&gt;
                 fastcgi_index index.php;&lt;br /&gt;
                 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;&lt;br /&gt;
                 include fastcgi_params;&lt;br /&gt;
          }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== mit PHP7 ====&lt;br /&gt;
Ubuntu 16.04 läuft standardmäßig mit PHP7. Der Betrieb ist noch nicht zu 100% getestet und daher ohne Garantie.&lt;br /&gt;
&lt;br /&gt;
Für die Installation des Webservers und PHP werden folgende Pakete benötigt:&lt;br /&gt;
 sudo apt-get install nginx php7.0-fpm&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration für PHP muss in der entsprechenden Konfigurationsdatei vorgenommen werden:&lt;br /&gt;
 sudo nano /etc/nginx/sites-enabled/default&lt;br /&gt;
&lt;br /&gt;
Folgende Konfiguration sollte direkt funktionieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
        listen 80 default_server;&lt;br /&gt;
        listen [::]:80 default_server;&lt;br /&gt;
        root /var/www/html;&lt;br /&gt;
        index index.php index.html index.htm index.nginx-debian.html;&lt;br /&gt;
&lt;br /&gt;
        server_name _;&lt;br /&gt;
&lt;br /&gt;
        location / {&lt;br /&gt;
                try_files $uri $uri/ =404;&lt;br /&gt;
        }&lt;br /&gt;
        location ~ \.php$ {&lt;br /&gt;
                 try_files $uri =404;&lt;br /&gt;
                 fastcgi_split_path_info ^(.+\.php)(/.+)$;&lt;br /&gt;
                 fastcgi_pass unix:/run/php/php7.0-fpm.sock;&lt;br /&gt;
                 fastcgi_index index.php;&lt;br /&gt;
                 include fastcgi.conf;&lt;br /&gt;
                 fastcgi_read_timeout 600;&lt;br /&gt;
         }&lt;br /&gt;
         location ~* \.(js|css|png|jpg|jpeg|gif|ico|eot|otf|ttf|woff)$ {&lt;br /&gt;
                 access_log off; log_not_found off; expires 30d;&lt;br /&gt;
         }&lt;br /&gt;
         location = /robots.txt { access_log off; log_not_found off; }&lt;br /&gt;
         location ~ /\. { deny all; access_log off; log_not_found off; }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Apache2 ===&lt;br /&gt;
&lt;br /&gt;
Dieses Beispiel basiert auf diesem [http://www.meintechblog.de/2015/06/smartvisu-mit-fhem-die-perfekte-visualisierung-teil-1-basics/ Blogeintrag].&lt;br /&gt;
&lt;br /&gt;
Für die Installation des Webservers und PHP5 werden folgende Pakete benötigt:&lt;br /&gt;
 sudo apt-get install apache2 php5 libapache2-mod-php5&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Für das git /cleaninstall: da liegt die erweiterte smartVISU, mit Mandanten und reparierten widgets (wo nötig) - ansonsten aber unverfälscht und nicht mit widgets erweitert.&lt;br /&gt;
&lt;br /&gt;
== smartVISU Installation ==&lt;br /&gt;
&lt;br /&gt;
Für das Klonen (Herunterladen) wird folgendes Paket benötigt:&lt;br /&gt;
 sudo apt-get install git&lt;br /&gt;
&lt;br /&gt;
;Verfügbare Versionen (Stand Juli 2016):&lt;br /&gt;
Bis zur V2.7 gibt es ein offizielles Release, auf dem sowohl die Dokumentation auf der Seite [www.smartVISU.de] basiert, als auch das nachfolgend beschriebene smartvisu-cleaninstall.&lt;br /&gt;
&lt;br /&gt;
Die nicht offizielle V2.8 kann aus den Entwicklungszweig von smartVISU heruntergeladen werden, muss aber im Anschluss um die Erweiterungen für den Betrieb mit FHEM ergänzt werden. Ob es ein offizielles Release V2.8 geben wird, ist derzeit unbekannt. Unabhängig davon wird an einem Fork in Zusammenhang für den Betrieb mit FHEM gearbeitet.&lt;br /&gt;
&lt;br /&gt;
Zwar sollten alle Widgets, die auf V2.7 lauffähig sind, auch mit V2.8 kompatibel sein, dieses ist derzeit aber nicht getestet und kann nicht garantiert werden. Die Widgets müssen bei Bedarf entsprechend angepasst werden. Andererseits gibt es bereits Widgets, die V2.8 voraussetzen. Bei manchen Widgets sind die Voraussetzungen ist der Dokumentation beschrieben.&lt;br /&gt;
&lt;br /&gt;
Die Unterschiede zwischen V2.7 und V2.8 sind in diesem {{Link2Forum|Topic=54506|Message=469401|LinkText=Beitrag}} zusammengefasst. &lt;br /&gt;
&lt;br /&gt;
Derzeit kann aber bereits empfohlen werden, bei einer Neuinstallation gleich V2.8 zu installieren {{Link2Forum|Topic=53881|Message=471075|LinkText=(Forum)}}.&lt;br /&gt;
 &lt;br /&gt;
=== smartVISU-cleaninstall, V2.7 ===&lt;br /&gt;
==== Herunterladen ====&lt;br /&gt;
Für die Installation gibt es ein fertig zusammengestelltes Paket aus dem git-Repo von Jörg Herrmanns ([https://github.com/herrmannj/smartvisu-cleaninstall]).&lt;br /&gt;
&lt;br /&gt;
Hierbei handelt es sich um das Original smartVISU inkl. einigen Anpassungen (fhem-Treiber, Widget-Korrekturen, ...).&lt;br /&gt;
&lt;br /&gt;
Einrichten eines Installationsordners im home-Verzeichnis:&lt;br /&gt;
 mkdir ~/install&lt;br /&gt;
&lt;br /&gt;
Wechseln in das Verzeichnis:&lt;br /&gt;
 cd ~/install&lt;br /&gt;
&lt;br /&gt;
Klonen der Pakets:&lt;br /&gt;
 git clone https://github.com/herrmannj/smartvisu-cleaninstall.git&lt;br /&gt;
Dabei wird der Unterordner ./smartvisu-cleaninstall angelegt, in den die Dateien heruntergeladen werden.&lt;br /&gt;
&lt;br /&gt;
==== Kopieren in das Webserver Root-Verzeichnis ====&lt;br /&gt;
Damit der Webserver die Seiten von smartVISU zur Verfügung stellt, müssen diese an die richtige Stelle in Abhängigkeit des verwendeten Webservers und Konfiguration kopiert werden. Ggf. muss die Konfiguration des Webservers entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Das neu erstellte Verzeichnis in das Root-Verzeichnis des Webservers kopieren. Dass, wie in diesem Fall angegeben, das Verzeichnis /var/www/ das richtige Verzeichnis ist, kann z.B. dadurch bestätigt werden, dass dort bereits die Default-Seite des Webservers nach der Ersteinrichtung zu finden ist. Bei Bedarf ist das Verzeichnis anzupassen.&lt;br /&gt;
 sudo cp -rp smartvisu-cleaninstall /var/www/smartVISU&lt;br /&gt;
&lt;br /&gt;
Selbstverständlich lässt dich auch ein anderes Installationsverzeichnis wählen. Die folgenden Schritte müssen dann entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
==== Config.ini kopieren ====&lt;br /&gt;
Hierbei handelt es sich um die Hauptdatei mit der das Verhalten von smartVISU gesteuert wird.&lt;br /&gt;
&lt;br /&gt;
Die Datei &amp;quot;config.ini.default&amp;quot; muss zu &amp;quot;config.ini&amp;quot; umbenennen oder besser kopiert werden:&lt;br /&gt;
 sudo cp /var/www/smartVISU/config.ini.default /var/www/smartVISU/config.ini&lt;br /&gt;
&lt;br /&gt;
==== Berechtigungen setzen ====&lt;br /&gt;
Später wird zumindest die Konfiguration von dem, was auf dem Endgerät angezeigt werden soll, vom Endgerät aus konfiguriert. Damit dieses auch funktioniert, müssen die Berechtigungen der Seiten entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Wechseln in das Verzeichnis:&lt;br /&gt;
 cd /var/www&lt;br /&gt;
&lt;br /&gt;
Setzen des Besitzers und der Gruppe für das Root-Verzeichnis von smartVISU&lt;br /&gt;
 chown -R www-data:www-data smartVISU&lt;br /&gt;
&lt;br /&gt;
Setzen der Berechtigungen für das Root-Verzeichnis &amp;quot;smartVISU&amp;quot; und alle Unterordner&lt;br /&gt;
 chmod -R 775 smartVISU&lt;br /&gt;
&lt;br /&gt;
==== ggf. Gruppenmitgliedschaft anpassen ====&lt;br /&gt;
Dieser Schritt ist optional und dann hilfreich, wenn man mit einem normalen user z.B. über fileZilla die Dateien austauschen möchte. Da der Schritt zulasten der Sicherheit geht, sollte man ihn nach Abschluss der Konfiguration ggf. wieder rückgängig machen.&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel wird der user &amp;quot;pi&amp;quot; zur Gruppe &amp;lt;code&amp;gt;www-data&amp;lt;/code&amp;gt; hinzugefügt. Verwendet man einen anderen user, muss dieses selbstverständig angepasst werden.&lt;br /&gt;
 sudo usermod -a -G www-data pi&lt;br /&gt;
&lt;br /&gt;
Rückgängig machen kann man die Gruppenzugehörigkeit über&lt;br /&gt;
 sudo deluser pi www-data&lt;br /&gt;
&lt;br /&gt;
==== Installation überprüfen ====&lt;br /&gt;
&lt;br /&gt;
Beim Aufruf der Seite &amp;lt;code&amp;gt;http://&amp;lt;IP-Adresse&amp;gt;/smartVISU&amp;lt;/code&amp;gt; sollte folgende Seite angezeigt werden: {{Randnotiz|RNTyp=y|RNText=&lt;br /&gt;
Ggf. in der php.ini (error_reporting) die Ausgabe von Warnings abschalten, wenn so was kommt wie &amp;quot;Notice: Undefined index...&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Diese Seite wird ggf. nur einmal direkt nach der Ersteinrichtung angezeigt und ist im Folgenden nicht mehr notwendig.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Installation_SmartVISU.png]]&lt;br /&gt;
&lt;br /&gt;
=== nicht offizielle Version, V2.8 ===&lt;br /&gt;
&lt;br /&gt;
Die Beschreibung für die Installation der nicht offiziellen Version 2.8 von smartVISU basiert auf diesem [https://github.com/ddtlabs/build-smartvisu-cleaninstall Git-Eintrag] von [user=dev0].&lt;br /&gt;
&lt;br /&gt;
Da man das Softwarepaket für smartVISU direkt aus dem Entwicklungszweig herunterläd, müssen die notwendigen Erweiterungen für den Betrieb mit FHEM nachträglich manuell eingefügt werden. Dabei ist der &amp;quot;Treiber&amp;quot; am wichtigsten.&lt;br /&gt;
&lt;br /&gt;
Wie leicht zu erkennen, ist im folgenden Beispiel das Root-Verzeichnis des Webservers &amp;lt;code&amp;gt;/var/www/html&amp;lt;/code&amp;gt; und das Verzeichnis, in das smartVISU installiert wird &amp;quot;sv&amp;quot;.&lt;br /&gt;
Die smartVISU-Seite wird am Ende der Installation entsprechend mit &amp;lt;code&amp;gt;http://&amp;lt;IP-Adresse&amp;gt;/sv&amp;lt;/code&amp;gt; aufgerufen.&lt;br /&gt;
&lt;br /&gt;
Anpassen der Gruppenmitgliedschaften kann nach dem oben beschriebenen Muster durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
==== Herunterladen ====&lt;br /&gt;
&lt;br /&gt;
Die Dateien werden direkt aus dem Entwicklungszweig heruntergeladen.&lt;br /&gt;
 git clone https://github.com/Martin-Gleiss/smartvisu.git&lt;br /&gt;
&lt;br /&gt;
==== Kopieren in das Webserver Root-Verzeichnis ====&lt;br /&gt;
 sudo cp -rp smartvisu /var/www/html/sv&lt;br /&gt;
&lt;br /&gt;
==== Herunterladen der Erweiterungen für FHEM ====&lt;br /&gt;
 git clone https://github.com/herrmannj/smartvisu-cleaninstall.git&lt;br /&gt;
&lt;br /&gt;
==== Kopieren der Erweiterungen ====&lt;br /&gt;
 sudo cp ./smartvisu-cleaninstall/readme.txt /var/www/html/sv/&lt;br /&gt;
 sudo cp ./smartvisu-cleaninstall/lib/functions_config.php /var/www/html/sv/lib/&lt;br /&gt;
 sudo cp ./smartvisu-cleaninstall/lib/includes.php /var/www/html/sv/lib/&lt;br /&gt;
 sudo cp ./smartvisu-cleaninstall/config.ini.default /var/www/html/sv/&lt;br /&gt;
 sudo cp ./smartvisu-cleaninstall/pages/base/configure.php /var/www/html/sv/pages/base/&lt;br /&gt;
 sudo cp ./smartvisu-cleaninstall/driver/io_fhem.js /var/www/html/sv/driver/&lt;br /&gt;
 sudo cp ./smartvisu-cleaninstall/driver/io_fhem.min.js /var/www/html/sv/driver/&lt;br /&gt;
&lt;br /&gt;
==== Config.ini kopieren ====&lt;br /&gt;
 sudo cp /var/www/html/sv/config.ini.default /var/www/html/sv/config.ini&lt;br /&gt;
&lt;br /&gt;
==== Setzen der Berechtigungen (Besitzer und Gruppe) ====&lt;br /&gt;
 cd /var/www/html&lt;br /&gt;
 sudo chown -R www-data:www-data sv&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting == &lt;br /&gt;
&lt;br /&gt;
=== SSL ===&lt;br /&gt;
&lt;br /&gt;
Wird derzeit nicht unterstützt {{Link2Forum|Topic=43226|Message=352115|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
=== Performanceproblem ===&lt;br /&gt;
&lt;br /&gt;
Während der Entwicklung gab es mehrere Evolutionen, was die Verbindung über den Treiber angeht. Trotzdem hat auch die Platform, auf der smartVISU läuft einen gehörigen Anteil an der Reaktivität der Oberfläche. Darüber hinaus hat selbstredend die Komplexität einer Seite Einfluss auf die Geschwindigkeit.&lt;br /&gt;
Mit einem Webserver auf dem RPi2 scheint es noch potential nach oben zu geben, setzte man eine performantere Platform ein {{Link2Forum|Topic= 48243|Message=402427|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
=== Config-Seite anstatt der individuellen Seite ===&lt;br /&gt;
&lt;br /&gt;
Es wurde vergessen, die Datei config.ini.default nach config.ini zu kopieren {{Link2Forum|Topic= 46501|Message=382426|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
=== Zugriffsprobleme mit Apache ===&lt;br /&gt;
Anscheinend gab es vereinzelt Zugriffsprobleme auf das smartVISU-Vereichnis, die sich aber mit dieser Erweiterung der Apache-Konfiguration beheben lies {{Link2Forum|Topic=30909|Message=239882|LinkText=(Forum)}}:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;Directory &amp;quot;/var/www/smartvisu&amp;quot;&amp;gt;&lt;br /&gt;
    Options +Indexes FollowSymLinks +ExecCGI&lt;br /&gt;
    AllowOverride AuthConfig FileInfo&lt;br /&gt;
    Order allow,deny&lt;br /&gt;
    Allow from all&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 404 not found ===&lt;br /&gt;
&lt;br /&gt;
Wird noch nicht einmal die Seite gefunden (404), sind bereits die statischen Seiteninhalte der Webseite nicht richtig konfiguriert. Es muss sichergestellt werden, dass eine Datei im Verzeichnis von smartVISU von einem Endgerät angezeigt werden kann {{Link2Forum|Topic= 46501|Message=49524|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
=== *.js dateien ===&lt;br /&gt;
&lt;br /&gt;
Sollte jemand Änderungen an den *.js Dateien bearbeiten muss man daran denken, dass in der config.ini ganz unten vereinbart wird welche Version der Datei benutzt wird {{Link2Forum|Topic=30909|Message=252375|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
=== verschiedene Devices, verschiedene Anzeigen ===&lt;br /&gt;
&lt;br /&gt;
Möchte man sicherstellen, dass auf allen Endgeräten die gleiche page konfiguriert ist, verschiebt man den entsprechenden Teil in der config.ini in den &amp;lt;nowiki&amp;gt;[default]&amp;lt;/nowiki&amp;gt;-Bereich. &lt;br /&gt;
&lt;br /&gt;
An dieser Stelle sei eindringlich empfohlen, diese Änderung nur bei nicht laufendem Websocket durchzuführen und in jedem Falle ein Backup der Datei vorzuhalten. Bei Syntaxfehlern wird diese Datei neu erzeugt und überschreibt ohne Nachfrage die Vorversion {{Link2Forum|Topic=46541|Message=383006|LinkText=(Forum)}} {{Link2Forum|Topic=36420|Message=287038|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
=== Welcher Treiber ist installiert ===&lt;br /&gt;
&lt;br /&gt;
Um zu prüfen, welche Version vom Treiber man aktuell verwendet, kann man im Browser die Konsole öffnen und nach einem page reload diesen Log-Eintrag suchen:&lt;br /&gt;
&lt;br /&gt;
 [io.fhem]: init [V1.10] (address= ...&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel ist es Version 1.10 {{Link2Forum|Topic=35960|Message=283617|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
=== neue Clients ===&lt;br /&gt;
&lt;br /&gt;
Das Anlegen neuer Clients In smartVISU müssen nicht händisch ergänzt werden. In der config.ini gibt es den parameter auto_add = true|false. Wenn dieser auf true steht, werden neue Clients automatisch in smartVISU angelegt und bekommen eine Kopie der default Einstellungen.&lt;br /&gt;
Im Anschluss können über die Config-Seite die individuellen Einstellungen über die smartVISU-Oberfläche konfiguriert und gespeichert werden (page, design, evtl. calender, etc) {{Link2Forum|Topic=30909|Message=236222|LinkText=(Forum)}}.&lt;br /&gt;
&lt;br /&gt;
=== Ordner und Dateien ===&lt;br /&gt;
Auch wenn es im Normalfall nicht notwendig ist sollte, kann es manchmal sinnvoll sein, den genauen Speicherort aller Dateien und Konfigurationsdateien zu kennen und entsprechend Debugging-Trigger hinzuzufügen oder Konfigurationen direkt zu korrigieren. &lt;br /&gt;
&lt;br /&gt;
Die folgenden Pfadangaben gehen davon aus, dass das Root-Verzeichnis des eingesetzten Webservers /var/www/html/ ist und smartVISU im Unterordner /var/www/html/sv liegt.&lt;br /&gt;
&lt;br /&gt;
Dokumenten Root für smartVISU:&lt;br /&gt;
 /var/www/html/sv/&lt;br /&gt;
&lt;br /&gt;
Konfigurationsdatei von smartVISU:&lt;br /&gt;
 /var/www/html/sv/config.ini&lt;br /&gt;
&lt;br /&gt;
Treiber:&lt;br /&gt;
 /var/www/html/sv/driver/io-fhem.js&lt;br /&gt;
&lt;br /&gt;
 /var/www/html/sv/driver/io_fhem.min.js &lt;br /&gt;
&lt;br /&gt;
Temp-Ordner:&lt;br /&gt;
 /var/www/html/sv/temp&lt;br /&gt;
&lt;br /&gt;
Template-Ordner für neue &amp;quot;page&amp;quot;:&lt;br /&gt;
 /var/www/html/sv/pages/_template&lt;br /&gt;
&lt;br /&gt;
Eigener Page-Ordner&lt;br /&gt;
 /var/www/html/sv/pages/&amp;lt;eigeneSeite&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:fronthem/smartVISU]]&lt;/div&gt;</summary>
		<author><name>DDT</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=NetIO-230B&amp;diff=14164</id>
		<title>NetIO-230B</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=NetIO-230B&amp;diff=14164"/>
		<updated>2016-02-14T05:39:32Z</updated>

		<summary type="html">&lt;p&gt;DDT: NETIO230 Modul im Forum hinzugefügt (dev0)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bei der &#039;&#039;&#039;NetIO-230B&#039;&#039;&#039; handelt es sich um eine Mehrfachsteckdose (Spannungsverteiler) des Herstellers Koukaam, die sowohl über (TCP-)IP-Befehle als auch manuell gesteuert werden kann.&lt;br /&gt;
&lt;br /&gt;
== Eigenschaften ==&lt;br /&gt;
* Eingebauter Webserver&lt;br /&gt;
* Vier geschaltete Spannungsausgänge&lt;br /&gt;
* Unterstützte Protokolle: HTTP, SMTP, SNTP, DHCP, DNS und Telnet&lt;br /&gt;
* CGI Befehle und Telnet-Steuerung&lt;br /&gt;
* Abgesichertes Login&lt;br /&gt;
* Benutzerrechtgruppen&lt;br /&gt;
* LED–Anzeigen für aktuellen Status jedes Ausgangs&lt;br /&gt;
* Sicheres Design schützt vor Stromschlag, feuersichere Materialien&lt;br /&gt;
* Timer&lt;br /&gt;
* Wählbare Start-Einstellungen für jeden Ausgang (An/Aus)&lt;br /&gt;
* Taster für manuelle Schaltung der Ausgänge&lt;br /&gt;
* Watchdog (automatischer Neustart von nicht antwortenden Netzwerkgeräten)&lt;br /&gt;
* E-Mail Benachrichtigung&lt;br /&gt;
&lt;br /&gt;
== Spezifikationen ==&lt;br /&gt;
* Eingangsspannung: 230V AC&lt;br /&gt;
* Maximaler Schaltstrom: 6A per Steckdose, 10A gesamt&lt;br /&gt;
* Latenzzeit: max. 10 ms&lt;br /&gt;
* Maße: 300x60x90 mm (BxHxT)&lt;br /&gt;
* Netzwerk-Anschluss: 10/100 Mbit/s, RJ-45&lt;br /&gt;
&lt;br /&gt;
== Modul ==&lt;br /&gt;
[http://forum.fhem.de/index.php/topic,47814.0.html Hier im Forum] gibt es seit Februar 2016 ein neues NETIO230 Modul, dass non-blocking arbeitet.&lt;br /&gt;
&lt;br /&gt;
== Allgemein ==&lt;br /&gt;
NetIO-230B lässt sich komplett per Web Browser bedienen/konfigurieren. Javascript wird benötigt.&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
Kopiert aus dieser [http://forum.fhem.de/index.php/topic,13399.0.html Diskussion im Forum].&lt;br /&gt;
&lt;br /&gt;
===Definition===&lt;br /&gt;
Steuervariablen definieren, für die spätere Steuerung&lt;br /&gt;
:&amp;lt;code&amp;gt;define NET_IO_Switch1 dummy&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notify Script 1 für ON&lt;br /&gt;
:&amp;lt;code&amp;gt;define NETIO230_SwitchOn_Switch1 notify NET_IO_Switch1:on {GetHttpFile(&amp;quot;&amp;lt;NETIO IP&amp;gt;&amp;quot;, &amp;quot;/tgi/control.tgi?login=p:admin:&amp;lt;password&amp;gt;&amp;quot;);; \ GetHttpFile(&amp;quot;&amp;lt;NETIO IP&amp;gt;&amp;quot;, &amp;quot;/tgi/control.tgi?p=1uuu&amp;quot;);; \ GetHttpFile(&amp;quot;&amp;lt;NETIO IP&amp;gt;&amp;quot;, &amp;quot;/tgi/control.tgi?quit=quit&amp;quot;);; }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notify Script 2 für OFF&lt;br /&gt;
:&amp;lt;code&amp;gt;define NETIO230_SwitchOn_Switch1 notify NET_IO_Switch1:off {GetHttpFile(&amp;quot;&amp;lt;NETIO IP&amp;gt;&amp;quot;, &amp;quot;/tgi/control.tgi?login=p:admin:&amp;lt;password&amp;gt;&amp;quot;);; \ GetHttpFile(&amp;quot;&amp;lt;NETIO IP&amp;gt;&amp;quot;, &amp;quot;/tgi/control.tgi?p=0uuu&amp;quot;);; \ GetHttpFile(&amp;quot;&amp;lt;NETIO IP&amp;gt;&amp;quot;, &amp;quot;/tgi/control.tgi?quit=quit&amp;quot;);; }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Erläuterung des Aufrufs===&lt;br /&gt;
Mit dieser Zeile wird eine Verbindung mit der NetIO-230B aufgebaut:&lt;br /&gt;
:&amp;lt;code&amp;gt;GetHttpFile(&amp;quot;&amp;lt;NETIO IP&amp;gt;&amp;quot;, &amp;quot;/tgi/control.tgi?login=p:admin:&amp;lt;Password&amp;gt;&amp;quot;);;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ersetzungen:&lt;br /&gt;
* &#039;&#039;&amp;lt;Password&amp;gt;&#039;&#039; hier muss das Passwort (im Klartext) eingetragen werden&lt;br /&gt;
* &#039;&#039;&amp;lt;NETIO IP&amp;gt;&#039;&#039; hier ist die IP Adresse, z.B. 192.168.1.3 der NetIO-230B einzutragen.&lt;br /&gt;
&lt;br /&gt;
Mit dieser Zeile wird der Ausgangsstatus der NetIO-230B verändert:&lt;br /&gt;
:&amp;lt;code&amp;gt;GetHttpFile(&amp;quot;&amp;lt;NETIO IP&amp;gt;&amp;quot;, &amp;quot;/tgi/control.tgi?p=1uuu&amp;quot;);; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ersetzungen:&lt;br /&gt;
* u=nicht verändern&lt;br /&gt;
* 0=Ausschalten&lt;br /&gt;
* 1=Einschalten&lt;br /&gt;
&lt;br /&gt;
Hierbei müssen immer vier Zeichen angegeben werden. Im obigen Beispiel schaltet &#039;&#039;&#039;1uuu&#039;&#039;&#039; den ersten Port ein und lässt alle anderen unverändert.&lt;br /&gt;
&lt;br /&gt;
Beenden der Verbindung:&lt;br /&gt;
:&amp;lt;code&amp;gt;GetHttpFile(&amp;quot;&amp;lt;NETIO IP&amp;gt;&amp;quot;, &amp;quot;/tgi/control.tgi?quit=quit&amp;quot;);;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Steuerung in FHEM===&lt;br /&gt;
Die Steuerung erfolgt wie folgt:&lt;br /&gt;
&lt;br /&gt;
* Einschalten&lt;br /&gt;
:&amp;lt;code&amp;gt;set NET_IO_Switch1 on&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Ausschalten&lt;br /&gt;
:&amp;lt;code&amp;gt;set NET_IO_Switch1 off&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
Keine&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&amp;lt;!-- Herstellerseite aktuell (20.9.2013) nicht erreichbar, daher verlinkung auf die Artikelseite bei Reichelt &lt;br /&gt;
* [http://www.koukaam.se/koukaam/downloads/MAN_DE_NETIO-230B_3-00.pdf MAN_DE_NETIO-230B_3-00.pdf Bedienungsanleitung (deutsch)]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* [http://www.reichelt.de/Messen-Steuern-Regeln/LAN-NETIO230B-SI/3//index.html?ACTION=3&amp;amp;GROUPID=4308&amp;amp;ARTICLE=102254&amp;amp;SHOW=1&amp;amp;START=0&amp;amp;OFFSET=16&amp;amp; Artikelseite] beim Versender [http://www.reichelt.de Reichelt] (Herstellerseite www.koukaam.se derzeit (20.9.2013) nicht erreichbar) mit Beschreibung / Bedienungsanleitung zum Download&lt;br /&gt;
* Website des Herstellers [http://www.koukaam.se Koukaam]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Other Components]]&lt;br /&gt;
[[Kategorie:IP Components]]&lt;br /&gt;
[[Kategorie:Schalter (Empfänger)]]&lt;/div&gt;</summary>
		<author><name>DDT</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=12903</id>
		<title>Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=12903"/>
		<updated>2015-11-16T06:20:34Z</updated>

		<summary type="html">&lt;p&gt;DDT: GAD Editor Einstellungen hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Anbindung von externen Frontends an FHEM (befindet sich in der Alpha-Phase)&lt;br /&gt;
|ModType=x&lt;br /&gt;
&amp;lt;!-- |ModCategory= (noch?) nicht verwendet --&amp;gt;&lt;br /&gt;
&amp;lt;!-- |ModCmdRef=   wird automatisch generiert --&amp;gt;&lt;br /&gt;
|ModForumArea=Sonstige Systeme&lt;br /&gt;
|ModTechName=01_fronthem.pm&lt;br /&gt;
|ModOwner=[http://forum.fhem.de/index.php?action=profile;u=769 Jörg alias herrmannj]&lt;br /&gt;
}}&lt;br /&gt;
Fronthem ist ein Projekt von herrmannj und wurde im fhem-Forum erstmalig angekündigt: http://forum.fhem.de/index.php/topic,27291.0.html&lt;br /&gt;
&lt;br /&gt;
Fronthem verfolgt die Idee, ein externes Web-Frontend (z. B. SmartVisu &lt;br /&gt;
http://smartvisu.de) an fhem anzukoppeln und den Datenverkehr sowie die Zusammenarbeit von Befehlen und Parametern zwischen FHEM und dem Web-Frontend zu übernehmen.&lt;br /&gt;
&lt;br /&gt;
Eine Installation für die Verwendung von [[SmartVisu]] mit Fronthem findet man hier [[Installation Fronthem|Installation Fronthem]].&lt;br /&gt;
&lt;br /&gt;
Dazu besteht fronthem aus vier Bausteinen:&lt;br /&gt;
&lt;br /&gt;
==Bausteine==&lt;br /&gt;
=== websocket ===&lt;br /&gt;
Der Websocket ist eine generische http-Schnittstelle, die von einem externen Frontend aus angesprochen werden kann.&lt;br /&gt;
&lt;br /&gt;
Der Websocket wird durch ein fhem-Modul 01_fronthem.pm realisiert, das im Ordner .../fhem/FHEM/ abgelegt wird.&lt;br /&gt;
&lt;br /&gt;
Der Websocket ist auf Port 2121 fest eingestellt, wird implizit durch die anderen Bausteine verwendet und benötigt im Prinzip keine weitere Beachtung, außer man möchte das Webinterface auf einem anderen Device neben FHEM laufen lassen.&lt;br /&gt;
&lt;br /&gt;
=== device connector ===&lt;br /&gt;
Die Device-Connectoren dienen dazu, Endgeräte des Benutzers (PCs, Tablets, Smartphones usw.) als Clients zuzulassen und deren Berechtigungen (read, write) auf der Ebene einzelner Objekte zu steuern. Damit können z. B. die lieben Kinder zwar das Licht und die eigene Heizung steuern, aber nicht die Heizung umprogrammieren oder den Alarm ausschalten. Auch ein PIN-Schutz ist vorgesehen, im Moment aber noch nicht umgesetzt.&lt;br /&gt;
&lt;br /&gt;
Die Device-Connectoren werden durch das fhem-Modul 31_fronthemDevice.pm realisiert, welches im Ordner .../fhem/FHEM/ abgelegt wird.&lt;br /&gt;
&lt;br /&gt;
An den einzelnen Device-Connectoren werden die durch den websocket vom externen Frontend mitgeteilten Objekte aufgelistet und können dort einerseits mit fhem devices und andererseits in den Berechtigungen des jeweiligen Endgerätes konfiguriert werden.&lt;br /&gt;
&lt;br /&gt;
Umgekehrt bedeutet dies, dass man die Kombination der Frontend-items mit den fhem-Devices über die Converter nur einmal pro item machen muss, die Berechtigungen der verwendeten Endgeräte muss man aber jeweils pro Endgerät einzeln setzen.&lt;br /&gt;
&lt;br /&gt;
=== readings converter ===&lt;br /&gt;
Die Readings von fhem müssen in die Form der möglichen Werte des Frontends umgewandelt werden. Im umgekehrten Fall müssen Befehle des Frontends in fhem kompatible Befehle umgesetzt werden.&lt;br /&gt;
Diese Aufgabe übernehmen die Readings Converter. Sie werden durch die Datei fhconverter.pm realisiert, die im Ordner .../fhem/FHEM/ abgelegt wird. &lt;br /&gt;
Bisher gibt es folgende Converter:&lt;br /&gt;
* [[#Direct]] für Übertragung ohne Konvertierung&lt;br /&gt;
* [[#NumDirect]] für Übertragung von Zahlenwerten in einem begrenzten Werteraum zwischen Min und Max&lt;br /&gt;
* [[#NumDisplay]] für Zahlenwerte aus fhem Readings, nur lesend&lt;br /&gt;
* [[#WordDisplay]] ist in Planung, für Übertragung von selbst definierbaren Wörtern/Sätze&lt;br /&gt;
* [[#OnOff]] für Schalter, Übersetzung von On in 1 und Off in 0&lt;br /&gt;
* [[#RGBCombined]] für Übertragung von RGB-Werten so das sie FHEM akzeptiert&lt;br /&gt;
Näheres zu denn Convertern unter [[#Converter]]&lt;br /&gt;
&lt;br /&gt;
Weitere Readings Converter werden noch folgen.&lt;br /&gt;
&lt;br /&gt;
=== fronthemEditor ===&lt;br /&gt;
Der Javascript Editor ist eine fhem WebIF Erweiterung, um die Bindung der fremden Frontend-Objekte an FHEM Devices/Readings vorzunehmen und die dazu notwendigen Konvertierungen zu wählen.&lt;br /&gt;
Er wird durch die Datei fronthemEditor.js repräsentiert, die in den Ordner .../fhem/www/frontend/pgm2/ kopiert wird.&lt;br /&gt;
&lt;br /&gt;
Der Editor erscheint in fhem als komplette gad-Liste in den Details von jedem definierten fronthemDevice. Das mag auf den ersten Blick irreführend sein, weil die Definition der gad/items/plots fhem-global geschieht, war aber wohl die beste mögliche Umsetzung zur Zeit.&lt;br /&gt;
&lt;br /&gt;
Man muss also durch den Editor an einem beliebigen fronthemDevice die Verknüpfung zwischen fhem-devices und smartVISU items herstellen, dann gilt diese für alle fhem Devices. Nur die Berechtigungen der einzelnen fhem Devices werden unterschiedlich gepflegt. (S. u.)&lt;br /&gt;
&lt;br /&gt;
==Basic Syntax==&lt;br /&gt;
===Websocket===&lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; fronthem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Device Connector===&lt;br /&gt;
Man muss jedes Device, mit dem man zugreifen will definieren.&lt;br /&gt;
&lt;br /&gt;
Dadurch kann genau festgelegt werden, welches Device Rechte für eine jeweilige Schaltfunktion hat.&lt;br /&gt;
====IP-Identify====&lt;br /&gt;
Identifizierung per IP-Adresse. Dies ist nur im internen Netzwerk sehr sinnvoll.&lt;br /&gt;
Ein Device wird definiert mit:&lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;device&amp;gt; fronthemDevice &amp;lt;ip&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
====Zertificate-Identify====&lt;br /&gt;
Das Device wird über ein Zertifikat identifiziert.&lt;br /&gt;
Zuerst wird ein Zertifikat generiert, welches dann auf dem Device installiert werden muss.&lt;br /&gt;
&lt;br /&gt;
Diese Methode der Identifizierung verspricht höhere Sicherheit, wie auch denn Vorteil, das man sich nicht einloggen muss.&lt;br /&gt;
&lt;br /&gt;
Diese Funktion ist noch in Entwicklung.&lt;br /&gt;
&lt;br /&gt;
==Converter==&lt;br /&gt;
Die Converter sind alle kompatibel mit dem oben erwähnten Frontend [[SmartVisu]]  und werden auf Basis dieses Frontends erklärt.&lt;br /&gt;
&lt;br /&gt;
Wenn jemand ein anderes Frontend verwenden will, muss er möglicherweise die Converter anpassen.&lt;br /&gt;
===Direct===&lt;br /&gt;
Die Werte werden ohne Konvertierung weitergegeben.&lt;br /&gt;
&lt;br /&gt;
Gibt den Wert des von &amp;lt;reading&amp;gt; ohne weitere Wandlung an das Frontend weiter. In umgekehrter Richtung wird der vom Frontend geliefert Wert ohne Wandlung im hinterlegten &amp;lt;set&amp;gt; eingesetzt.&lt;br /&gt;
&lt;br /&gt;
Beispiel: &lt;br /&gt;
Anzeige eines An- oder Abwesenheitszustandes im Frontend (Textanzeige, Icon, Button)&lt;br /&gt;
&lt;br /&gt;
===NumDirect===&lt;br /&gt;
NumDirect arbeitet bidirektional. Die Werte werden genau wie bei Direct ohne Umwandlung weitergegeben.&lt;br /&gt;
&lt;br /&gt;
Der feine Unterschied zu Direct ist jedoch, das nur Zahlenwerte übergeben werden können.&lt;br /&gt;
&lt;br /&gt;
Desweiteren kann man einen minimalen und maximalen Wert mitangeben. Dies hat denn Sinn, das man keine Werte einstellen kann, die überhaupt nicht möglich wären.&lt;br /&gt;
&lt;br /&gt;
In der SmartVisu kann man z.B. -100°C einstellen, das wäre in FHEM jedoch gar nicht möglich.&lt;br /&gt;
&lt;br /&gt;
===NumDelayed===&lt;br /&gt;
NumDelayed ist noch in Arbeit.&lt;br /&gt;
&lt;br /&gt;
Ein bidirektionaler numerischer Converter mit einstellbarer Verzögerung.&lt;br /&gt;
&lt;br /&gt;
Bietet bei der Ansteuerung mechanischer Aktoren (Markise, Jalousie) Vorteile gegenüber NumDirect. Als Beispiel sei die Steuerung einer Jalousie über einen Slider genannt. Da Slider ihre Werte kontinuierlich an FHEM übermitteln, würde bei der Verwendung anderer Converter dem entsprechenden Aktor (z.B. HM-BP), während der Benutzer den Slider bedient, mehrfach der vermeindliche Sollwert übermittelt werden. Gleichzeitig beginnt der Aktor seine Fahrt und übermittelt dem Slider seine aktuelle ist Position. Das führt zu einem springen des Sliders und einer &amp;quot;unschönen&amp;quot; Bedienung.&lt;br /&gt;
&lt;br /&gt;
NumDelayed nimmt daher die Signale des Sliders entgegen, wartet jedoch mit der Weitergabe solange, bis sich der Slider (xxx ms, konfigurierbar) nicht mehr bewegt. In Gegenrichtung wird ebenso verfahren, erst wenn der Aktor seine Endposition erreicht, wird der Slider im Frontend aktualisiert. In diesem Beispiel würde das bedeuten das der Slider im Normalfall ohnehin so steht (Soll) wie vom Aktor gemeldet (Ist). Natürlich könnte der Benutzer oder ein Hindernis die Fahrt auch unterbrochen haben, dann würde der Slider auf die gemeldete Position aktualisiert.&lt;br /&gt;
&lt;br /&gt;
===NumDisplay===&lt;br /&gt;
NumDisplay arbeitet nur in eine Richting, FHEM zu Frontend. Die Werte werden ohne Umwandlung weitergegeben.&lt;br /&gt;
&lt;br /&gt;
Es ist dazu gedacht Zahlenwerte zu übergeben, ohne etwas zu verändern.&lt;br /&gt;
&lt;br /&gt;
z.B. für Temperaturwerte&lt;br /&gt;
&lt;br /&gt;
===WordDisplay===&lt;br /&gt;
WordDisplay ist derzeit in Planung, es wird noch über die Umsetzung diskutiert.&lt;br /&gt;
&lt;br /&gt;
WordDisplay soll nur in eine Richtung arbeiten, FHEM zu Frontend. Es ist dazu gedacht Wörter oder Textpassagen zu übertragen.&lt;br /&gt;
&lt;br /&gt;
Jedoch soll es möglich sein, eine Umwandlung selbst festzulegen. So kann man einfach mehrere Textausgaben abhängig vom Zustand an das Frontend schicken:&lt;br /&gt;
&lt;br /&gt;
z.B. Geofancy: Home -&amp;gt; Zuhause, Underway -&amp;gt; Unterwegs, Work -&amp;gt; Arbeit&lt;br /&gt;
&lt;br /&gt;
===OnOff===&lt;br /&gt;
Für einfache Ein/Aus-Funktionen.&lt;br /&gt;
&lt;br /&gt;
FHEM interpretiert Ein/Aus-Funktionen mit on/off, SmartVisu jedoch mit 1/0.&lt;br /&gt;
&lt;br /&gt;
Der OnOff-Converter wandelt diese bidirektional, damit sie richtig interpretiert werden.&lt;br /&gt;
&lt;br /&gt;
===RGBCombined===&lt;br /&gt;
Ein Converter zur Steuerung von RGB Leuchtmitteln über Farbauswahlfelder (zb. Farbkreis)&lt;br /&gt;
&lt;br /&gt;
Bidirektional, wandelt, verwendet 3 Frontend Items&lt;br /&gt;
&lt;br /&gt;
reading: Name eines reading mit HEX RGB Wert des Leuchtmittels&lt;br /&gt;
converter (mit Parameter): &amp;lt;code&amp;gt;RGBCombined &amp;lt;itemRed&amp;gt;, &amp;lt;itemYellow&amp;gt;, &amp;lt;itemBlue&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
set: Name des set Befehls, bekommt HEX RGB Wert übergeben &lt;br /&gt;
&lt;br /&gt;
Dieser Converter muss gleichlautend für alle 3 RGB Kanäle des Frontends definiert werden.&lt;br /&gt;
&lt;br /&gt;
==Device Connector==&lt;br /&gt;
Sobald ein fronthemDevice definiert ist, kann man über die device details in fhem die GADs definieren und die Rechte verteilen.&lt;br /&gt;
===GAD definieren===&lt;br /&gt;
Eine GAD-Definierung besteht aus:&lt;br /&gt;
[[Datei:DeviceDefine.png|400px|thumb|right|GADs definieren]]&lt;br /&gt;
*mode&lt;br /&gt;
*device&lt;br /&gt;
*reading&lt;br /&gt;
*converter&lt;br /&gt;
*cmd set&lt;br /&gt;
====mode====&lt;br /&gt;
Es gibt 2 Modis:&lt;br /&gt;
*item&lt;br /&gt;
*plot&lt;br /&gt;
====device====&lt;br /&gt;
Hier wird der Name des FHEM-Devices eingetragen, an das die Befehle geschickt werden. Die vorhandenen Devices in fhem werden als Liste unter dem Eingabefeld angezeigt, sobald man mit der Eingabe beginnt. &lt;br /&gt;
&lt;br /&gt;
Groß/Kleinschreibung muss beachtet werden!&lt;br /&gt;
&lt;br /&gt;
====reading====&lt;br /&gt;
Das für die Anzeige zu verwendende Reading des fhem Devices, z. B. &amp;quot;state&amp;quot; oder &amp;quot;Level&amp;quot;. Die vorhandenen Readings des gewählten fhem-Devices werden als Liste unter dem Eingabefeld angezeigt, sobald man mit der Eingabe beginnt.&lt;br /&gt;
&lt;br /&gt;
Readings werden, wenn das Frontend dies anfordert, aktiv von fronthem gelesen und (per push) proaktiv an das Frontend gesendet wenn fhem entsprechende events erzeugt.&lt;br /&gt;
&lt;br /&gt;
====converter====&lt;br /&gt;
Hier gibt man denn Namen des Converters an, denn man verwenden möchte.&lt;br /&gt;
Es stehen unterschiedliche converter für verschiedene Aufgabenstellungen zur Verfügung. Über das Konzept der converter können fhem Device unterschiedlichster Typen und Funktionen über das Frontend bedient werden. So versorgt der gleiche converter der die Solltemperatur des virtuellen Heizungsthermostats (bidriektional) einstellt auch die Füllstandanzeige der Zisterne sowie den Dimmer. In all diesen Fällen handelt es sich um die Übertragung von numerischen Werten. Converter können dabei auch Spezialaufgaben wie die Begrenzung des Wertebereichs übernehmen. So lässt sich über NumDirect zum Beispiel die Solltemperatur Einstellung für virtuelle Heizungsregler auf Min und Max Werte begrenzen. &lt;br /&gt;
&lt;br /&gt;
Oben ist eine Standardliste der [[#Converter]]. Die meisten Devices können mit diesen Convertern angesteuert werden.&lt;br /&gt;
&lt;br /&gt;
Groß/Kleinschreibung muss beachtet werden!&lt;br /&gt;
&lt;br /&gt;
====cmd set====&lt;br /&gt;
Das zum Schreiben zu verwendende Reading des fhem Devices, z. B. &amp;quot;state&amp;quot; oder &amp;quot;Level&amp;quot;. Die vorhandenen Readings des gewählten fhem-Devices werden als Liste unter dem Eingabefeld angezeigt, sobald man mit der Eingabe beginnt.&lt;br /&gt;
&lt;br /&gt;
Das gewählte Reading gibt den &amp;quot;set&amp;quot; des fhem Devices an, der die Rückgabe des Converters entgegen nimmt.&lt;br /&gt;
&lt;br /&gt;
Bei Lampe z.B. &amp;quot;state&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Devicerechte vergeben===&lt;br /&gt;
[[Datei:DeviceRechte.png|400px|thumb|right|Devicerechte vergeben]]&lt;br /&gt;
Devicerechte bestehen aus:&lt;br /&gt;
*read&lt;br /&gt;
*write&lt;br /&gt;
*PIN GAD&lt;br /&gt;
====read====&lt;br /&gt;
Das Device darf die Statuswerte auslesen, jedoch nicht verändern.&lt;br /&gt;
&lt;br /&gt;
====write====&lt;br /&gt;
Das Device darf Statuswerte ändern.&lt;br /&gt;
&lt;br /&gt;
====PIN GAD====&lt;br /&gt;
In Entwicklung...&lt;br /&gt;
&lt;br /&gt;
====Whitelisting deaktivieren====&lt;br /&gt;
Möchte man diese. differenzierte Berechtigungssteuerung umgehen, kann das Attribut &amp;quot;whitelisting&amp;quot; der fronthemDevices auf false gesetzt werden. Das bedeutet dann, dass unabhängig von den whitelisting - Checkboxen das fronthemDevice immer auf alle GADs lesen und schreiben darf.&lt;br /&gt;
&lt;br /&gt;
==Universelle ZeitSchaltUhr UZSU==&lt;br /&gt;
Es existiert ein Widget für eine universelle ZeitSchaltUhr auf GitHub unter https://github.com/herrmannj/smartvisu-widgets beziehen&lt;br /&gt;
&lt;br /&gt;
Dank dafür an mworion!&lt;br /&gt;
&lt;br /&gt;
Man muss dazu die uzsu_widget.html in das eigene Verzeichnis in ../pages/.. kopieren und die visu.js und die visu.css in seine Installation integrieren (Achtung, wenn die beiden Dateien schon bestehen, dann muss man das manuell zusammenkopieren!)&lt;br /&gt;
&lt;br /&gt;
Das Widget kann in SmartVISU-Seiten wie gewohnt eingebunden werden:&lt;br /&gt;
&lt;br /&gt;
(für ein Ergebnis, das der Benutzer direkt eintippen kann, z.B. &#039;on&#039; oder &#039;off&#039;)&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
{% import &amp;quot;widget_uzsu.html&amp;quot; as visu %}&lt;br /&gt;
&lt;br /&gt;
{{ visu.uzsu_icon(&#039;UZSUtxt&#039;, gad_uzsu, &#039;&#039;, &#039;&#039;, &#039;&#039;, &#039;&#039;, &#039;text&#039;) }}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder Text als Dropdown:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
{% import &amp;quot;widget_uzsu.html&amp;quot; as visu %}&lt;br /&gt;
&lt;br /&gt;
{{ visu.uzsu_icon(&#039;UZSUtxt&#039;, gad_uzsu, &#039;&#039;, &#039;&#039;, &#039;&#039;, &#039;&#039;, &#039;text&#039;, [&#039;an&#039;, &#039;aus&#039;]) }}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
oder (für eine einzugebende Ziffer zwischen 0 und 100)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
{% import &amp;quot;widget_uzsu.html&amp;quot; as visu %}&lt;br /&gt;
&lt;br /&gt;
{{ visu.uzsu_icon(&#039;UZSUnum&#039;, gad_uzsu, &#039;&#039;, &#039;&#039;, &#039;&#039;, &#039;&#039;, &#039;num&#039;, [0, 100]) }}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder (für ein Ergebnis {0,1}, das aber als flip mit &#039;an&#039; und &#039;aus&#039; angezeigt wird)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
{% import &amp;quot;widget_uzsu.html&amp;quot; as visu %}&lt;br /&gt;
&lt;br /&gt;
{{ visu.uzsu_icon(&#039;UZSUnum&#039;, gad_uzsu, &#039;&#039;, &#039;&#039;, &#039;&#039;, &#039;&#039;, &#039;bool&#039;, [&#039;an&#039;, &#039;aus&#039;]) }}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um die Antwort des Widgets in fhem zu verarbeiten, benötigt man &lt;br /&gt;
&lt;br /&gt;
1. je ein Reading uzsu an dem zu schaltenden Device, das man mit &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
setreading &amp;lt;device&amp;gt; uzsu {}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
erzeugen MUSS.&lt;br /&gt;
&lt;br /&gt;
2. eine Anbindung des UZSU-GAD per UZSU Converter aus der 99_fronthemUtils.pm (s. u.) an das Reading uzsu des zu schaltenden Device read und write in fhem&lt;br /&gt;
&lt;br /&gt;
3. Den sonstigen UZSU  Code aus der  99_FronthemUtils.pm aus dem http://github.com/herrmannj/fronthem (ist bei aktuellem fronthem alles schon drin)&lt;br /&gt;
&lt;br /&gt;
Dieser Code erzeugt aus den Einstellungen im Widget entsprechende WeekdayTimer in fhem und löscht und erstellt neu bei jeder Änderung in SmartVISU.&lt;br /&gt;
&lt;br /&gt;
4. Die Funktion muss getriggert werden. Dazu ist ein notify nötig, das auf die Veränderung der uzsu Readings reagiert:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
define UZSU notify .*:uzsu:.* { UZSU_execute($NAME, $EVTPART1) }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5. GAD Editor Einstellungen:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
mode:      item&lt;br /&gt;
device:    &amp;lt;DEIN_DEVICE&amp;gt;&lt;br /&gt;
reading:   uzsu&lt;br /&gt;
converter: UZSU&lt;br /&gt;
cmd set:   uzsu&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voila!&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: FHEM Frontends]]&lt;/div&gt;</summary>
		<author><name>DDT</name></author>
	</entry>
</feed>