<?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=Fidel</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=Fidel"/>
	<link rel="alternate" type="text/html" href="http://wiki.fhem.de/wiki/Spezial:Beitr%C3%A4ge/Fidel"/>
	<updated>2026-04-09T21:23:33Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=MQTT2-Module_-_Praxisbeispiele&amp;diff=34340</id>
		<title>MQTT2-Module - Praxisbeispiele</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=MQTT2-Module_-_Praxisbeispiele&amp;diff=34340"/>
		<updated>2020-12-07T23:22:01Z</updated>

		<summary type="html">&lt;p&gt;Fidel: /* Allgemeine Einstellungen und Hinweise */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einführung: MQTT bzw. MQTT2 in FHEM ==&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Sollten Sie MQTT2_CLIENT verwenden, beachten Sie bitte, dass der MQTT2_CLIENT die ursprüngliche Herkunft der über MQTT verteilten Informationen nicht kennt. Daher ergeben sich in der Anwendung kleinere Unterschiede, zu deren Verständnis die diesbezüglichen [[MQTT2_CLIENT#Anwendung|Hinweise zu MQTT2_CLIENT]] bekannt sein sollten.}}Zur Einbindung von Geräten, welche zur Nutzung des MQTT-Protokols konfiguriert werden können und darüber mit einem MQTT-Server (früher: Broker) kommunizieren, stehen unter FHEM verschiedene Optionen zur Verfügung, wobei nicht alle Module beliebig miteinander verwendet werden können. Details hierzu sind dieser [[MQTT|Übersicht]] zu entnehmen. &lt;br /&gt;
&lt;br /&gt;
Im Rahmen dieses Artikels wird für die eigentlichen Geräte [[MQTT2 DEVICE|MQTT2_DEVICE]] verwendet, damit wird als IO-Device entweder {{Link2CmdRef|Anker=MQTT2_SERVER|Lang=en|Label=MQTT2_SERVER}} oder [[MQTT2 CLIENT|MQTT2_CLIENT]] benötigt, mit einem IO-Device des Typs [[MQTT (Modul)|MQTT]] funktioniert die nachfolgende Darstellung dagegen nicht&amp;lt;ref&amp;gt;Allerdings können die Konfigurationen in der Regel recht einfach auf die bisherige MQTT-Implementierung übertragen werden&amp;lt;/ref&amp;gt;. MQTT2_DEVICE unterstützt u.a. auch die &#039;&#039;setExtensions&#039;&#039; direkt, also z.B. &#039;&#039;on-for-timer&amp;lt;ref&amp;gt;Beachten Sie bei mehrkanaligen Geräten, dass jeweils nur ein Hauptkanal mittels setExtensions verwaltet werden kann! U.a. aus diesen Grund ist es meist sinnvoller, die &#039;&#039;split&#039;&#039;-Varianten der attrTemplate-Einrichtung zu verwenden.&amp;lt;/ref&amp;gt;&#039;&#039; sowie &#039;&#039;[[MQTT2-Module - Praxisbeispiele#attrTemplate_2|attrTemplate]]&#039;&#039;&amp;lt;ref&amp;gt;Auch MQTT_DEVICE unterstützt SetExtensions, allerdings muss dies dort per Attribut eingeschaltet werden&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Allgemeine Einstellungen und Hinweise ===&lt;br /&gt;
{{Randnotiz|RNTyp=r|RNText=Beachten Sie, dass für [[autocreate]] in Verbindung mit MQTT2_SERVER &#039;&#039;&#039;zwingend&#039;&#039;&#039; jeder über MQTT kommunizierende Client eine ClientID angeben muss. Passen Sie daher ggf. die Einstellungen Ihres Geräts an. Manche Geräte verwenden auch &amp;quot;Wegwerf&amp;quot;-ClientID&#039;s. Für diese empfiehlt es sich, ggf. dann die durch autocreate erstellten Geräte nachzubearbeiten und die ClientID-Angabe v.a. aus den Inhalten des readingList-Attributs zu entfernen.}}Die nachfolgenden Beispiele gelingen am einfachsten mit &#039;&#039;&#039;MQTT2_SERVER als Server (&amp;quot;Broker&amp;quot;)&#039;&#039;&#039;, für diesen sollte dabei &#039;&#039;autocreate&#039;&#039; &#039;&#039;&#039;nicht deaktiviert&#039;&#039;&#039; sein, damit die erforderlichen MQTT2_DEVICES soweit möglich automatisiert erstellt werden&amp;lt;ref&amp;gt;Dabei wird vorausgesetzt, dass ein allgemeines {{Link2CmdRef|Anker=autocreate|Lang=en|Label=autocreate}}-Device (&#039;&#039;TYPE=autocreate&#039;&#039;) ebenfalls aktiv ist.&amp;lt;/ref&amp;gt; . &lt;br /&gt;
&lt;br /&gt;
Beispiel&amp;lt;ref&amp;gt;MQTT2_SERVER verwendet als default-Einstellung für &#039;&#039;autocreate&#039;&#039; &#039;&#039;simple&#039;&#039;, ohne dass ein entsprechendes Attribut gesetzt werden müsste. Die Einstellung &#039;&#039;complex&#039;&#039; empfiehlt sich in der Regel nicht; diese ist jedoch dann zu empfehlen, wenn das Device entweder verschachtelte JSON-Array-Strukturen liefert oder bestimmte Readings nicht gefüllt werden sollen.&amp;lt;/ref&amp;gt;:&lt;br /&gt;
 define MQTT2_FHEM_Server MQTT2_SERVER 1883 global&lt;br /&gt;
&lt;br /&gt;
Falls der MQTT Broker mit Hilfe von [[allowed]] abgesichert wurde, muss in den Geräten ebenfalls User bzw. Passwort eingetragen werden, damit eine MQTT Kommunikation möglich ist.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Die Code-Darstellung in diesem Beitrag entspricht jeweils dem RAW-Format zum [[Import von Code Snippets]]. Wer die Attribute direkt und einzeln bearbeitet, muss ggf. die &amp;quot;\&amp;quot; entfernen!}}&lt;br /&gt;
&lt;br /&gt;
=== MQTT-Einstellungen in den Geräten ===&lt;br /&gt;
Die Beispiele gehen davon aus, dass die einzubindenden Geräte &#039;&#039;&#039;&#039;&#039;mit den default-Einstellungen&#039;&#039;&#039;&#039;&#039; für MQTT betrieben werden, wenn man von den Angaben zum Server und ggf. der Gerätekennung absieht. Es sollten also insbesondere &#039;&#039;&#039;keine Veränderungen der topic-Pfade&#039;&#039;&#039; vorgenommen werden.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Einige der hier beschriebenen Einstellungen haben Änderungen der sich durch die jeweiligen Automatismen eigentlich jeweils ergebenden Standard-Werte zur Folge, insbesondere, was Reading-Namen und von den Geräten gesendete Werte angeht. Sie sollten daher zunächst die Konfiguration des jeweiligen MQTT2-DEVICE-Geräts abschließen, und erst anschließend die weitere Integration mit Event-Handlern, logging usw. vornehmen.  }}&lt;br /&gt;
&lt;br /&gt;
== zigbee2mqtt ==&lt;br /&gt;
[[Bild:MQTT2_zigbee2mqtt_Bulbs.png|400px|thumb|Darstellung in FHEMWEB]]&lt;br /&gt;
[https://github.com/Koenkk/zigbee2mqtt zigbee2mqtt] ist ein open-source Projekt, mit dem zigbee-Geräte über MQTT direkt angesprochen werden können, ohne dass hierfür eine Bridge eines Herstellers benötigt wird.&lt;br /&gt;
=== Installation von zigbee2mqtt ===&lt;br /&gt;
Die Installation des zigbee2mqtt-Diensts ist auf der [https://www.zigbee2mqtt.io/ Homepage des Projekts] beschrieben. Ergänzend muss in der configuration.yaml eine &#039;&#039;client_id&#039;&#039; unter &#039;&#039;mqtt&#039;&#039; (z.B. zigbee_pi) vergeben werden&amp;lt;ref&amp;gt;Die Anführungszeichen sowie genau zwei Leerzeichen sind hier erforderlich!&amp;lt;/ref&amp;gt;.&lt;br /&gt;
 mqtt:&lt;br /&gt;
   client_id: &#039;zigbee_pi&#039;&lt;br /&gt;
Da der Dienst auch später in den Anlernmodus versetzt werden kann, kann man auch gleich &amp;lt;code&amp;gt;permit_join: false&amp;lt;/code&amp;gt; setzen, um das versehentliche Einbinden neuer oder fremder Geräte zu unterbinden.&lt;br /&gt;
{{Hinweis|Wird ein CC2531 auf demselben Linux-Computer verwendet, auf dem auch FHEM installiert ist, kann es vorkommen, dass FHEM diesen mit einem CUL verwechselt und durch &#039;&#039;initialUsbCheck&#039;&#039; in FHEM einbindet, wodurch er für den zigbee2mqtt-Dienst nicht mehr verfügbar ist. Dann sollte &#039;&#039;initialUsbCheck&#039;&#039; deaktiviert und das automatisch angelegte CUL-Device wieder gelöscht werden. Weiter sollte der CC2531 auch in FHEM &#039;&#039;&#039;und&#039;&#039;&#039; zigbee2mqtt &#039;&#039;[[Mehrere USB-Geräte einbinden|by-id]]&#039;&#039; eingebunden werden, um Probleme beim gleichzeitigen Einsatz anderer Geräte, die &#039;&#039;/dev/ttyACMx&#039;&#039; belegen können, zu vermeiden (betrifft z.B. CUL/MapleCUL ).}}&lt;br /&gt;
&lt;br /&gt;
=== Define eines MQTT2-Devices als &amp;quot;Bridge&amp;quot; === &lt;br /&gt;
Dann kann eine Art &amp;quot;Grund-Device&amp;quot; angelegt werden, das für die Ansteuerung des eigentlichen Server-Dienstes genutzt wird, der bereits unmittelbar nach der erfolgreichen Konfiguration von zigbee2mqtt zur Verfügung steht. In der Regel sollte dieses automatisch erstellt werden, wenn der zigbee2mqtt-Dienst (oder der betreffende Rechner) neu gestartet wird (oder FHEM oder dort ein Sensor einen Messwert sendet). Beispiel&amp;lt;ref&amp;gt;Hier waren bereits zwei Zigbee-Geräte angelernt&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 defmod MQTT2_zigbee_pi MQTT2_DEVICE zigbee_pi&lt;br /&gt;
 attr MQTT2_zigbee_pi IODev MQTT2_FHEM_Server&lt;br /&gt;
 attr MQTT2_zigbee_pi readingList zigbee_pi:zigbee2mqtt/bridge/state:.* state\&lt;br /&gt;
   zigbee_pi:zigbee2mqtt/0x90fd9ffffe65db16:.* { json2nameValue($EVENT, &#039;&#039;) }\&#039;&#039;&lt;br /&gt;
   zigbee_pi:zigbee2mqtt/0x90fd9ffffe0bcd51:.* { json2nameValue($EVENT, &#039;&#039;) }\&#039;&#039;&lt;br /&gt;
   zigbee_pi:zigbee2mqtt/bridge/log:.* { json2nameValue($EVENT, &#039;log_&#039;) }&lt;br /&gt;
 attr MQTT2_zigbee_pi room MQTT2_DEVICE&lt;br /&gt;
&lt;br /&gt;
Für die Funktion einer zigbee2mqtt-Bridge steht ein {{Link2CmdRef|Anker=set|Lang=en|Label=template}} bereit, das direkt die passenden Attribute vergibt, um dem zigbee2mqtt-Dienst passende Anweisungen geben zu können und weitere Geräte für die eigentlichen Aktoren und Sensoren anzulegen:&lt;br /&gt;
&lt;br /&gt;
 set MQTT2_zigbee_pi attrTemplate zigbee2mqtt_bridge&lt;br /&gt;
&lt;br /&gt;
Ist dieses angelegt, kann zigbee2mqtt mit &amp;lt;code&amp;gt;set MQTT2_zigbee_pi permit_join true&amp;lt;/code&amp;gt; in den Anlernmodus versetzt werden, anzulernende Geräte müssen anschließend jeweils nach Bedienungsanleitung in den Anlernmodus gebracht werden.&lt;br /&gt;
&lt;br /&gt;
=== Vereinzeln der eigentlichen Geräte ===&lt;br /&gt;
&lt;br /&gt;
Über das mit dem template vergebene bridgeRegexp-Attribut  &lt;br /&gt;
 attr MQTT2_zigbee_pi bridgeRegexp zigbee2mqtt/([A-Za-z0-9]*)[/]?.*:.* &amp;quot;zigbee_$1&amp;quot; &lt;br /&gt;
werden anschließend neue MQTT2_DEVICE-Geräte automatisch angelegt, sobald ein bisher unbekanntes Zigbee-Gerät einen neuen Status (z.B. einen Messwert) meldet. Um zu erfragen, welche Geräte dem zigbee-Deinst bekannt sind, kann via &amp;lt;code&amp;gt;get MQTT2_zigbee_pi devicelist true&amp;lt;/code&amp;gt; eine Liste abgefragt werden, die weitere Informationen zu den bereits angelernten Geräten enthält.&lt;br /&gt;
Geräte, die nicht automatisch etwas senden, kann man mit Hilfe des MQTT2_SERVER-Geräts einmalig schalten, damit diese ihren Status bzw. das erfolgreiche Schalten zurückmelden, Beispiel&amp;lt;ref&amp;gt;Die mit 0x... beginnende Angabe entspricht dabei dem &#039;&#039;friendly_name&#039;&#039;.&amp;lt;/ref&amp;gt;:&lt;br /&gt;
 set MQTT2_FHEM_Server publish zigbee2mqtt/0x90fd9ffffe0bcd51/set {&amp;quot;state&amp;quot;:&amp;quot;ON&amp;quot;,&amp;quot;brightness&amp;quot;:60}&lt;br /&gt;
&lt;br /&gt;
Für Gerätetypen, für die bereits templates vorhanden sind, ist es am einfachsten, diese einmalig auf die Geräte anzuwenden. Das Vorgehen entspricht dabei dem oben für die Bridge beschriebenen. Dafür wird immer vorausgesetzt, dass ein neues Device mit autocreate (ggf. über die bridgeRegexp) angelegt wurde&amp;lt;ref&amp;gt;Dieses befindet sich dann im Raum MQTT2_DEVICE. Um diesen sichtbar zu machen, muss ggf. die Browser-Seite neu geladen werden.&amp;lt;/ref&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
Beispiele:&lt;br /&gt;
==== IKEA-Tradfri-Birne ====&lt;br /&gt;
{{Randnotiz|RNTyp=g|RNText=Wie wähle ich nun das richtige Template für mein Leuchtmittel aus?&lt;br /&gt;
-&amp;gt; Es wird nicht zwischen einer Birne/Bulb/Lampe und einem LED-Controller unterschieden sondern anhand der möglichen Lichtdarstellung des Gerätes:&lt;br /&gt;
&lt;br /&gt;
light_dimmer:&lt;br /&gt;
Das anzusteuernde Geräte besitzt ausschließlich eine feste Lichtfarbe welche gedimmt werden kann.&lt;br /&gt;
&lt;br /&gt;
light_cct:&lt;br /&gt;
Das anzusteuernde Gerät besitzt eine warmweiße sowie kaltweiße Lichtfarbe welche verändert sowie gedimmt werden kann.&lt;br /&gt;
&lt;br /&gt;
light_rgb_xxx:&lt;br /&gt;
Das anzusteuernde Gerät besitzt die Möglichlichkeit einer farbigen Lichtdarstellung (Rot, Grün, Blau) und kann gedimmt werden.&lt;br /&gt;
&lt;br /&gt;
light_rgbw_xxx:&lt;br /&gt;
Das anzusteuernde Gerät besitzt die Möglichlichkeit einer farbigen Lichtdarstellung (Rot, Grün, Blau) und besitzt eine warmweiße ODER kaltweiße Lichtfarbe welche eingestellt sowie gedimmt werden kann.&lt;br /&gt;
&lt;br /&gt;
light_rgbcct_xxx:&lt;br /&gt;
Das anzusteuernde Gerät besitzt die Möglichlichkeit einer farbigen Lichtdarstellung (Rot, Grün, Blau) und besitzt eine warmweiße UND kaltweiße Lichtfarbe welche verändert sowie gedimmt werden kann.&lt;br /&gt;
   &lt;br /&gt;
   xxx:&lt;br /&gt;
      hex:   Farbänderung mit hex&lt;br /&gt;
      rgb:   Farbänderung mit r g b&lt;br /&gt;
      xy:   Farbänderung mit x sowie y&lt;br /&gt;
      hue:   Farbänderung mit hue und saturation&lt;br /&gt;
&lt;br /&gt;
Warum diese Einteilung in &amp;quot;hex&amp;quot;, &amp;quot;rgb&amp;quot;, &amp;quot;xy&amp;quot; sowie &amp;quot;hue&amp;quot;?&lt;br /&gt;
-&amp;gt; Zigbee2MQTT unterstützt das Übermitteln aller dieser Werte, allerdings unterscheiden sich hier die Geräte. Manche &amp;quot;verstehen&amp;quot; nur z.B. Hex-Farbänderungen, andere halt nur eine Farbänderung mit rgb-Werten.&lt;br /&gt;
-&amp;gt; Aus diesem Grund muss an dieser Stelle probiert werden mit welchem der 4 Templates sich die Farbveränderung des Gerätes steuern lässt!&lt;br /&gt;
&lt;br /&gt;
HINWEIS: Templates für Farbänderungen mithilfe von XY- sowie HUE-Werten wurden bis heute nicht angelegt!&lt;br /&gt;
}}&lt;br /&gt;
Beispiel eines dimmbaren Tradfri-Leuchtmittels&lt;br /&gt;
 defmod IKEA_Bulb2 MQTT2_DEVICE&lt;br /&gt;
 attr IKEA_Bulb2 IODev MQTT2_FHEM_Server&lt;br /&gt;
 attr IKEA_Bulb2 icon light_control&lt;br /&gt;
 attr IKEA_Bulb2 devStateIcon {zigbee2mqtt_devStateIcon255($name)}&lt;br /&gt;
 attr IKEA_Bulb2 readingList zigbee_pi:zigbee2mqtt/0x90fd9ffffe0bcd51:.* { json2nameValue($EVENT) }&lt;br /&gt;
 attr IKEA_Bulb2 setList on:noArg zigbee2mqtt/0x90fd9ffffe0bcd51/set {&amp;quot;state&amp;quot;:&amp;quot;ON&amp;quot;}\&lt;br /&gt;
     off:noArg zigbee2mqtt/0x90fd9ffffe0bcd51/set {&amp;quot;state&amp;quot;:&amp;quot;OFF&amp;quot;}\&lt;br /&gt;
     brightness:colorpicker,BRI,0,15,255 zigbee2mqtt/0x90fd9ffffe0bcd51/set {&amp;quot;state&amp;quot;:&amp;quot;on&amp;quot;,&amp;quot;$EVTPART0&amp;quot;:&amp;quot;$EVTPART1&amp;quot;}&lt;br /&gt;
 attr IKEA_Bulb2 webCmd toggle:on:off:brightness&lt;br /&gt;
 attr IKEA_Bulb2 model L_02a_zigbee2mqtt_bulb&lt;br /&gt;
&lt;br /&gt;
Kann man auch die Farbtemperatur einstellen, wird die setList wie folgt erweitert oder das entsprechende template&amp;lt;ref&amp;gt;Durch die &#039;&#039;model&#039;&#039;-Angabe kann nachvollzogen werden, welches template angewendet wurde.&amp;lt;/ref&amp;gt; anwendet:&lt;br /&gt;
 ...&lt;br /&gt;
 color_temp:colorpicker,CT,250,1,454 zigbee2mqtt/0x90fd9ffffe0bcd51/set {&amp;quot;$EVTPART0&amp;quot;:&amp;quot;$EVTPART1&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
Die templates sind dabei in der Regel so gestaltet, dass eventuell mehr Optionen in FHEMWEB erscheinen, als tatsächlich vorhanden oder erwünscht sind. &lt;br /&gt;
Da sich obige einfarbige dimmbare Lampe durch Klicken auf das devStateIcon schalten lässt, ist für die vollständige Ansteuerung bereits dieses webCmd hinreichend:&lt;br /&gt;
 attr IKEA_Bulb2 webCmd brightness&lt;br /&gt;
&lt;br /&gt;
==== Temp/Hum. Sensor ====&lt;br /&gt;
tbd&lt;br /&gt;
&lt;br /&gt;
==== Motion Sensor ====&lt;br /&gt;
Als MQTT-Server wird hier &#039;&#039;mosquitto&#039;&#039; verwendet, als IO-Device wird daher ein {{Link2CmdRef|Anker=MQTT2_CLIENT|Lang=en|Label=MQTT2_CLIENT}}-Gerät definiert: &lt;br /&gt;
&lt;br /&gt;
 defmod mqtt2_client MQTT2_CLIENT 192.168.2.4:1883&lt;br /&gt;
 attr mqtt2_client autocreate 1&lt;br /&gt;
 attr mqtt2_client rawEvents zigbee2mqtt/GB_Bewegungsmelder:.*&lt;br /&gt;
 attr mqtt2_client room test&lt;br /&gt;
 attr mqtt2_client subscriptions #&lt;br /&gt;
&lt;br /&gt;
Das eigentliche Device sieht dann so aus:&lt;br /&gt;
 defmod GB_Bewegungsmelder_MQTT2 MQTT2_DEVICE zigbee_158d0001f9d030&lt;br /&gt;
 attr GB_Bewegungsmelder_MQTT2 IODev mqtt2_client&lt;br /&gt;
 attr GB_Bewegungsmelder_MQTT2 devStateIcon motion:motion_detector@red off:motion_detector@green no_motion:motion_detector@green&lt;br /&gt;
 attr GB_Bewegungsmelder_MQTT2 icon motion_detector@blue&lt;br /&gt;
 attr GB_Bewegungsmelder_MQTT2 readingList mqtt2client:zigbee2mqtt/GB_Bewegungsmelder:.* { json2nameValue($EVENT) }&lt;br /&gt;
 attr GB_Bewegungsmelder_MQTT2 room MQTT2_DEVICE&lt;br /&gt;
 attr GB_Bewegungsmelder_MQTT2 stateFormat {\&lt;br /&gt;
 if(ReadingsVal(&amp;quot;$name&amp;quot;,&amp;quot;occupancy&amp;quot;,0) eq &amp;quot;true&amp;quot;) {\&lt;br /&gt;
 	sprintf(&amp;quot;motion&amp;quot;);;\&lt;br /&gt;
 	} else {\&lt;br /&gt;
 	sprintf(&amp;quot;no_motion&amp;quot;);;	\&lt;br /&gt;
 	}\&lt;br /&gt;
 }&lt;br /&gt;
==== Anlegen von Zigbee2MQTT-Gruppen in FHEM ====&lt;br /&gt;
{{Hinweis|Die nachfolgende Darstellung ist vorläufig!}}&lt;br /&gt;
{{Hinweis|Bevor man eine Gruppe mithilfe von Zigbee2MQTT anlegen kann, sollte man sicherstellen, dass man über die aktuelleste Version von Zigbee2MQTT verfügt (min. vom 15. Februar 2019). Außerdem sollte auch der Koordinator (zumeist CC2531) die aktuellste Firmware besitzen (min. vom 15. Februar 2019). Falls ein flashen des Koordinators mit der neusten Firmware erfolgen soll, ist darauf zu achten, dass nach einem flashen alle Geräte neu angelernt werden müssen! (Hinweise zum flashen ohne erneutem anlernen sind hier zu finden: https://www.zigbee2mqtt.io/information/flashing_without_re-pairing.html)}}&lt;br /&gt;
&lt;br /&gt;
=====Erstellen einer Zigbee2MQTT-Gruppe=====&lt;br /&gt;
Bevor das Ganze in FHEM funktioniert, muss eine Gruppe in der &amp;quot;configuration.yaml&amp;quot; angelegt werden, dieser Vorgang ist auf folgender Seite beschrieben: https://www.zigbee2mqtt.io/information/groups.html&lt;br /&gt;
Wenn die Geräte anschließend über den FHEM MQTT2-Server der Gruppe hinzugefügen werden sollen, kann dies mit folgendem Befehl erfolgen:&lt;br /&gt;
 set &amp;lt;MQTT2-Server&amp;gt; publish zigbee2mqtt/bridge/group/&amp;lt;Zigbee2MQTT Friendly-Gruppenname&amp;gt;/add &amp;lt;Zigbee2MQTT Friendly-Gerätename&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
 set MQTT2_FHEM_Server publish zigbee2mqtt/bridge/group/Wohnzimmer/add Stehlampe&lt;br /&gt;
&lt;br /&gt;
Dieser Befehl kann so oft verwendet werden, wie man Geräte zu einer Gruppe hinzufügen möchte.&lt;br /&gt;
&lt;br /&gt;
Zum Entfernen eines Gerätes aus einer Gruppe kann folgender Befehl verwendet werden:&lt;br /&gt;
 set &amp;lt;MQTT2-Server&amp;gt; publish zigbee2mqtt/bridge/group/&amp;lt;Zigbee2MQTT Friendly-Gruppenname&amp;gt;/remove &amp;lt;Zigbee2MQTT Friendly-Gerätename&amp;gt;&lt;br /&gt;
Beispiel:&lt;br /&gt;
 set MQTT2_FHEM_Server publish zigbee2mqtt/bridge/group/Wohnzimmer/remove Kuechenlampe&lt;br /&gt;
&lt;br /&gt;
=====Anlegen der Gruppe in FHEM=====&lt;br /&gt;
Da Gruppen in Zigbee2MQTT aktuell keine Rückmeldung über ihren Status geben, wird auch beim einmaligen Schalten kein Gerät automatisch in FHEM angelegt. Aus diesem Grund muss dies mit folgendem Befehl noch manuell erfolgen:&lt;br /&gt;
 defmod &amp;lt;FHEM NAME&amp;gt; MQTT2_DEVICE&lt;br /&gt;
Beispiel&lt;br /&gt;
 defmod lichtWohnzimmer MQTT2_DEVICE&lt;br /&gt;
Anschließend wird auch für dieses Gerät wieder ein passendes template ausgewählt, wie als wäre es ein normales Zigbee2MQTT-Gerät.&lt;br /&gt;
Im anschließenden Dialog-Fenster welches sich nach dem Setzen des templates öffnet, müssen die folgenden Werte durch passendes ersetzt werden:&lt;br /&gt;
 BASE_TOPIC -&amp;gt; zigbee2mqtt&lt;br /&gt;
 DEV_ID -&amp;gt; &amp;lt;Zigbee2MQTT Friendly-Gruppenname&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach sollte sich die Gruppe wie ein normales Zigbee2MQTT Gerät steuern lassen.&lt;br /&gt;
&lt;br /&gt;
== Tasmota ==&lt;br /&gt;
{{Randnotiz|RNTyp=r|RNText=Bitte beachten Sie, dass versicherungsrechtliche Probleme entstehen können, wenn die herstellereigene Firmware ersetzt wird!}}[https://github.com/arendst/Sonoff-Tasmota Tasmota] (&#039;&#039;&#039;T&#039;&#039;&#039;heo &#039;&#039;&#039;A&#039;&#039;&#039;rends &#039;&#039;&#039;S&#039;&#039;&#039;onoff &#039;&#039;&#039;M&#039;&#039;&#039;QTT &#039;&#039;&#039;O&#039;&#039;&#039;ver &#039;&#039;&#039;T&#039;&#039;&#039;he &#039;&#039;&#039;A&#039;&#039;&#039;ir - einer offenen Firmware von [https://github.com/arendst arendst]) ist eine open-source Software für ESP8266-Geräte, die z.B. statt der originalen Firmware für Sonoff-Geräte und andere ESP8266-basierte WLAN-Steckdosen usw. verwendet werden kann. &lt;br /&gt;
{{Hinweis|[[Datei:Tasmota mqtt config.png|120px|thumb|right]]Vor allem, aber nicht nur bei Verwendung des MQTT2_CLIENT als IO, ist es empfehlenswert, in der MQTT-Konfiguration der tasmota-Geräte für den Parameter &#039;&#039;&amp;lt;nowiki&amp;gt;topic = %topic% (tasmota)&amp;lt;/nowiki&amp;gt;&#039;&#039; ebenfalls die dynamisch aus der Chip-ID erzeugte Kennung &#039;&#039;DVES_%06X&#039;&#039; zu verwenden. (Kopieren Sie einfach diese Zeichenkette aus dem  Eingabefeld für &#039;&#039;&amp;quot;client ...&amp;quot;&#039;&#039;, siehe nebenstehende Abbildung). Die eigentliche Umbenennung zu einem &amp;quot;sprechenden Namen&amp;quot; kann dann innerhalb von FHEM - mittels &#039;&#039;rename&#039;&#039; oder ggf. mit einem &#039;&#039;alias&#039;&#039; - erfolgen.}}&lt;br /&gt;
=== MQTT2_DEVICE ===&lt;br /&gt;
Dieses sollte bei aktiviertem &#039;&#039;autocreate&#039;&#039; am MQTT2_SERVER-Device automatisch angelegt werden, sobald das betreffende Gerät eingesteckt oder neu gestartet oder an einem evtl. vorhandenen Taster geschalten wird. Bislang wurden Tasmota version(en) ab 6.1.1 bis min. 8.1.0 getestet, dies auf verschiedener Hardware, zunächst mit Sonoff Touch und S20, zwischenzeitlich mit einer Vielzahl von Geräten, die per USB-Adapter oder mit der Methode aus dem [https://www.heise.de/ct/artikel/Tuya-Convert-IoT-Geraete-ohne-Loeten-vom-Cloud-Zwang-befreien-4283623.html Tuya-Convert]-Projekt des heise-Verlags auf Tasmota umgeflasht wurden.&lt;br /&gt;
&lt;br /&gt;
=== Manuelle Anpassungen ===&lt;br /&gt;
Die RAW-Definition kann dann beispielsweise wie folgt ergänzt werden:  &lt;br /&gt;
 defmod MQTT2_DVES_9B01BD MQTT2_DEVICE DVES_9B01BD&lt;br /&gt;
 attr MQTT2_DVES_9B01BD IODev m2server&lt;br /&gt;
 attr MQTT2_DVES_9B01BD readingList DVES_9B01BD:tele/DVES_9B01BD/STATE:.* { json2nameValue($EVENT) }\&lt;br /&gt;
    DVES_9B01BD:tele/DVES_9B01BD/LWT:.* LWT\&lt;br /&gt;
    DVES_9B01BD:cmnd/DVES_9B01BD/POWER:.* POWER\&lt;br /&gt;
    DVES_9B01BD:tele/DVES_9B01BD/UPTIME:.* { json2nameValue($EVENT) }\&lt;br /&gt;
    DVES_9B01BD:tele/DVES_9B01BD/SENSOR:.* { json2nameValue($EVENT) }\&lt;br /&gt;
    DVES_9B01BD:tele/DVES_9B01BD/INFO1:.* { json2nameValue($EVENT) }\&lt;br /&gt;
    DVES_9B01BD:tele/DVES_9B01BD/INFO2:.* { json2nameValue($EVENT) }\&lt;br /&gt;
    DVES_9B01BD:tele/DVES_9B01BD/INFO3:.* { json2nameValue($EVENT) }\&lt;br /&gt;
    DVES_9B01BD:stat/DVES_9B01BD/RESULT:.* { json2nameValue($EVENT) }\&lt;br /&gt;
    DVES_9B01BD:stat/DVES_9B01BD/STATE:.* { json2nameValue($EVENT) }&lt;br /&gt;
 attr MQTT2_DVES_9B01BD room MQTT2_DEVICE&lt;br /&gt;
 attr MQTT2_DVES_9B01BD setList on cmnd/DVES_9B01BD/POWER on\&lt;br /&gt;
    off cmnd/DVES_9B01BD/POWER off\&lt;br /&gt;
    reboot cmnd/DVES_9B01BD/Restart 1&lt;br /&gt;
 attr MQTT2_DVES_9B01BD webCmd on:off:reboot&lt;br /&gt;
&lt;br /&gt;
=== attrTemplate ===&lt;br /&gt;
&lt;br /&gt;
===== Allgemeines =====&lt;br /&gt;
Für gängige Tasmota-Geräte stehen &#039;&#039;templates&#039;&#039; bereit, mit denen sich diese schnell konfigurieren lassen. &lt;br /&gt;
Beachten Sie dazu den Abschnitt &#039;&#039;attrTemplate&#039;&#039; in [[MQTT2 DEVICE#attrTemplate|MQTT2_DEVICE]]. Bei Anwendung eines template mit &amp;quot;split&amp;quot; im Namen werden dabei weitere Geräte angelegt und konfiguriert.{{Hinweis|Bitte attrTemplates nicht verwechseln mit templates, die auf den Tasmota- bzw. Blackadder-Seiten angeboten werden, welche zur Konfiguration der firmware genutzt werden können! Es sollte zunächst die firmware korrekt eingerichtet werden, so dass das Gerät selbst direkt auf dessen Web-Interface korrekt bedient werden kann.}}&lt;br /&gt;
&lt;br /&gt;
===== Kein passendes attrTemplate vorhanden? =====&lt;br /&gt;
Exisitert (noch) kein passendes attrTemplate, ist zu empfehlen, zunächst das &amp;quot;&#039;&#039;tasmota_basic&#039;&#039;&amp;quot; anzuwenden. Dieses führt einige Basiskonfigurationen durch, die für FHEM hilfreich sind, z.B. wird die firmware so eingestellt, dass Schaltzustände in Kleinschreibung übermittelt werden, statt der defaults &amp;quot;ON&amp;quot; bzw. &amp;quot;OFF&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Allerdings stellt dieses das &#039;&#039;autocreate&#039;&#039; an dem MQTT2_DEVICE auf 0, was dann nicht optimal ist, wenn man weitere Readings aus dem Gerät erwartet, etwa, weil zusätzliche Sensoren vorhanden sind. In diesem Fall empfiehlt es sich, das &#039;&#039;autocreate&#039;&#039;-Attribut an dem MQTT2_DEVICE zu löschen, damit alle weiteren Informationen verarbeitet werden und ggf. im &#039;&#039;jsonMap&#039;&#039;-Attribut nur die Angabe &amp;quot;&#039;&#039;POWER1:state&#039;&#039;&amp;quot; zu belassen.&lt;br /&gt;
&lt;br /&gt;
=== on-for-timer ===&lt;br /&gt;
Um z.B. ein Relais nur für einen Zeitraum anzuschalten, kann man bei Tasmota-Geräten zwischen mehrere Varianten wählen. Ohne speziellen &#039;&#039;setter&#039;&#039; in der &#039;&#039;setList&#039;&#039; werden die &#039;&#039;&#039;SetExtensions&#039;&#039;&#039; verwendet. Timer laufen damit innerhalb FHEM. Da diese intern als temporäres [[at]] ausgeführt werden, sind diese auch noch nach einem FHEM-Neustart vorhanden, sofern FHEM ordnungsgemäß beendet und neu gestartet wird.&lt;br /&gt;
&lt;br /&gt;
Die Tasmota-firmware bietet ergänzend dazu zwei Möglichkeiten an, bei denen der Timer direkt auf dem ESP-Microcontroller verwaltet wird:&lt;br /&gt;
&lt;br /&gt;
==== delay ==== &lt;br /&gt;
Zeile zur Erweiterung der &#039;&#039;setList&#039;&#039; (Attributeingabe via FHEMWEB!):&lt;br /&gt;
 on-for-timer {my $duration = $EVTPART1*10; &#039;cmnd/DVES_575127/Backlog POWER1 1; delay &#039;.$duration.&#039;; POWER1 0&#039;}&lt;br /&gt;
&lt;br /&gt;
Ohne Auswirkungen auf alles, was danach kommt, hat aber den Nachteil, dass die möglichen Zeitspannen auf 3600 1/10 Sekunden begrenzt sind (siehe https://github.com/arendst/Tasmota/wiki/Commands#delay), also eine Stunde.&lt;br /&gt;
&lt;br /&gt;
====pulseTime ====&lt;br /&gt;
Zeile zur Erweiterung der &#039;&#039;setList&#039;&#039; (s.o.):&lt;br /&gt;
 on-for-timer {my $duration = $EVTPART1 &amp;lt; 11.2 ? $EVTPART1*10 : $EVTPART1+100; &#039;CMNDTOPIC/Backlog pulseTime1 &#039;.$duration.&#039;; POWER1 1&#039;}&lt;br /&gt;
Auch hier sind die möglichen längsten Einschaltdauern begrenzt, allerdings ist diese mit 18h deutlich länger als mit &#039;&#039;delay&#039;&#039;. Diese Implementierung hat den Nachteil, dass der ESP-Microcontroller die jeweils letzte pulseTime auch für alle weiteren &amp;quot;normalen&amp;quot; Einschaltvorgänge berücksichtigt, das Relais also ebenfalls nach Ablauf der übermittelten pulseTime abgeschaltet wird; dies gilt allerdings ohne explizites &#039;&#039;save&#039;&#039; nur bis zum nächsten reboot des Microcontrollers.&lt;br /&gt;
&lt;br /&gt;
=== zigbee2tasmota ===&lt;br /&gt;
[https://tasmota.github.io/docs/Zigbee/ zigbee2tasmota] ist eine Erweiterung der Tasmota-firmware für Microcontroller, insbesondere dem ESP8266 (und ESP32)(link), über die einige ZigBee-Chipsätze (insbesondere TI CC2530) als [[ZigBee#Koordinator_.28ZigBee_coordinator.2C_ZC.29|Coordinator]] eingebunden werden können, um ein ZigBee-Netzwerk aufzubauen.&lt;br /&gt;
{{Hinweis|Stand 08/2020 war die Einbindung anderer Chipsätze erst in einem Alpha-Stadium; die Zahl der über einen CC2530 einbindbaren ZigBee-Geräte ist daher derzeit relativ begrenzt (ca. 16)!}}&lt;br /&gt;
Auch für diese Lösung stehen einige &#039;&#039;attrTemplate&#039;&#039; zur Verfügung. Nähere Informationen hierzu sind dem Artikel [[Zigbee2Tasmota-MQTT]] zu entnehmen.&lt;br /&gt;
&lt;br /&gt;
== ESPurna ==&lt;br /&gt;
ESPurna ist eine weitere alternative firmware für ESP8266-basierte Geräte, Details sind der [https://github.com/xoseperez/espurna/wiki Projektseite] zu entnehmen.&lt;br /&gt;
&lt;br /&gt;
Das Format, in dem ESPurna Daten sendet, unterscheidet sich v.a. darin, dass bool&#039;sche Werte als 0 oder 1 gesendet werden, und nicht wie sonst üblich als &amp;quot;on&amp;quot; oder &amp;quot;off&amp;quot; oä.. Es stehen einige Mustertemplates zur Verfügung, um diese Art der Payload in FHEM-konforme Werte zu überführen.&lt;br /&gt;
&lt;br /&gt;
== Shelly ==&lt;br /&gt;
=== Vorbemerkung ===&lt;br /&gt;
Auch für Shelly-Geräte steht eine Auswahl an [[MQTT2-Module - Praxisbeispiele#attrTemplate_2|templates]] bereit.&lt;br /&gt;
Beachten Sie auch hier, dass uU. bei Anwendung eines template mit &amp;quot;split&amp;quot; im Namen weitere Geräte angelegt und konfiguriert werden.&lt;br /&gt;
&lt;br /&gt;
Standardmäßig senden die Shelly-Geräte ihren kompletten Status alle 30 Sekunden. Dies kann man über den Parameter &#039;&#039;mqtt_update_period&#039;&#039; in den &#039;&#039;settings&#039;&#039; ändern, allerdings ist dieser nur über die HTTP-Schnittstelle des Shelly verfügbar. Um diese Statusupdates abzustellen, kann über den Browser folgender Befehl verwendet werden:&lt;br /&gt;
 http://&amp;lt;ip-des-shelly&amp;gt;/settings?mqtt_update_period=0, &lt;br /&gt;
Soweit bekannt, werden dann nur statische updates ausgeschaltet, z.B. für das Relay bzw. angeschlossene Taster oder Schalter; insbesondere Verbrauchswerte werden dennoch aktualisiert.&lt;br /&gt;
&lt;br /&gt;
=== Shelly1 ===&lt;br /&gt;
&lt;br /&gt;
=== Shellybulb ===&lt;br /&gt;
Zunächst muss man einen Statusupdate des Shellybulb erzwingen (Aus- und Einschalten, physikalisch oder per Web-UI), damit das Gerät bei eingeschaltetem autocreate  angelegt wird. Dies sieht zunächst so aus:&lt;br /&gt;
 Internals:&lt;br /&gt;
   CFGFN     &lt;br /&gt;
   CID        shellybulb_3CC533&lt;br /&gt;
   DEF        shellybulb_3CC533&lt;br /&gt;
   DEVICETOPIC MQTT2_shellybulb_3CC533&lt;br /&gt;
   IODev      MQTT2_FHEM_Server&lt;br /&gt;
   NAME       MQTT2_shellybulb_3CC533&lt;br /&gt;
   NR         246&lt;br /&gt;
   STATE      ???&lt;br /&gt;
   TYPE       MQTT2_DEVICE&lt;br /&gt;
   READINGS:&lt;br /&gt;
     2018-12-12 19:28:08   status_blue     0&lt;br /&gt;
     2018-12-12 19:28:08   status_brightness 61&lt;br /&gt;
     2018-12-12 19:28:08   status_effect   0&lt;br /&gt;
     2018-12-12 19:28:08   status_gain     26&lt;br /&gt;
     2018-12-12 19:28:08   status_green    0&lt;br /&gt;
     2018-12-12 19:28:08   status_ison     true&lt;br /&gt;
     2018-12-12 19:28:08   status_mode     color&lt;br /&gt;
     2018-12-12 19:28:08   status_red      255&lt;br /&gt;
     2018-12-12 19:28:08   status_temp     3250&lt;br /&gt;
     2018-12-12 19:28:08   status_white    0&lt;br /&gt;
 Attributes:&lt;br /&gt;
   IODev      MQTT2_FHEM_Server&lt;br /&gt;
   readingList shellybulb_3CC533:shellies/shellybulb-3CC533/color/0/status:.* { json2nameValue($EVENT, &#039;status_&#039;) }&lt;br /&gt;
   room       MQTT2_DEVICE&lt;br /&gt;
[[Bild:MQTT2 Shellybulb.png|400px|thumb|Darstellung in FHEMWEB nach Anwendung des template]]Dann bei den set-Anweisungen das attrTemplate &amp;quot;shellybulb&amp;quot; auswählen und setzen. Es erscheint eine Abfrage, ob die vorhandenen Readings gelöscht werden sollen. Diese bitte bestätigen und die Seite neu laden. Danach einmal An- und Ausschalten, damit die Readings auch durch einen neuen Status initialisiert werden und die Seite im Browser neu laden.&lt;br /&gt;
&lt;br /&gt;
=== Shelly Plug S ===&lt;br /&gt;
Über die Leistungsmessung des Shelly Plug S lässt sich sehr einfach auch eine Erkennung des Betriebszustandes des angeschlossenen Gerätes realisieren. Dazu stellt man zuerst fest, wieviel Leistung das Gerät in jedem Betriebszustand verbraucht und kann dann z.B. für einen angeschlossenen Fernseher, der im Standby 1 Watt und im Betrieb &amp;gt; 100 Watt verbraucht, den Zustand erkennen und als on/off Status anzeigen. Dazu wird das state Reading wie folgt definiert:&lt;br /&gt;
  attr readingList shellies/shellyplug-s-123456/relay/0/power:.* { { state =&amp;gt; $EVTPART0&amp;lt;100?&amp;quot;off&amp;quot;:&amp;quot;on&amp;quot; } }&lt;br /&gt;
Der Status des MQTT2 Devices zeigt dann bei &amp;lt;100W &amp;quot;off&amp;quot; und sonst &amp;quot;on&amp;quot; an.&lt;br /&gt;
&lt;br /&gt;
=== HTTP-Commands ===&lt;br /&gt;
In diesem {{Link2Forum|Topic=102369|LinkText=Forumsbeitrag}} wird eine Lösung vorgestellt, um über [[99 myUtils anlegen|myUtils-Code]] weitere Kommandos bereitzustellen, die sonst nur direkt über das Web-Interface zu erreichen sind.&lt;br /&gt;
&lt;br /&gt;
== 8-Port-Ethernet Board ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
datei:8-relais-ethernetboard closed.jpg|mit Gehäuse&lt;br /&gt;
datei:8-Port-MQTT-Relais-Board.jpg|ohne Gehäuse&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
In diesem {{Link2Forum|Topic=107536|Message=1016379|LinkText=Forenbeitrag}} bzw. dem betreffenden Thread wurde ein Relais-Board vorgestellt, mit dem 8 Relais über Ethernetkabel verbunden werden, die Kommunikation erfolgt dann über MQTT. Über die verwendete Software ist wenig bekannt, es könnte jedoch sein, dass diese Art der Einbindung auch bei weiteren Boards funktioniert, die einen bestimmten Ethernet-Chipset von TI (DP83848) und eine Cortex M3 MCU verwenden.&lt;br /&gt;
&lt;br /&gt;
== Milight-Bridge ==&lt;br /&gt;
=== Vorbemerkung ===&lt;br /&gt;
Der [https://github.com/sidoh/esp8266_milight_hub esp8266_milight_hub] ist ein open source- Projekt, mit dem auf Basis von &#039;&#039;openmili&#039;&#039; eine Vielzahl von MiLight-Geräten gesteuert werden können. Der MiLight-Hub erstetzt dabei eine beliebige Zahl von Milight-Bridges und ist auch zu verschiedenen Versionen des MiLight-Protokols kompatibel.&lt;br /&gt;
Neben MQTT kann dieser auch mit HTTPMOD oder Wifilight (bzw. den MiLight-Modulen) gesteuert werden. Die Hardware entspricht dabei im Wesentlichen einem MySensors-Wifi-Gateway&amp;lt;ref&amp;gt;Es wird lediglich ein anderer CS-PIN genutzt. Dies kann einfach in der Web-Oberfläche der Firmware umgestellt werden.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
Hier wird vorausgesetzt, dass eine funktionierende Bridge vorhanden ist.&lt;br /&gt;
Der Vorteil der MQTT-Lösung liegt darin, dass man bei kompatiblen Fernbedienungen auch direkt Informationen über Schaltvorgänge erhält, die mit der Fernbedienung ausgelöst werden.&lt;br /&gt;
&lt;br /&gt;
=== Einstellungen am MiLight-Hub ===&lt;br /&gt;
Die zum FHEM-Server bzw. dem MQTT2_SERVER passenden Vorgaben sind im Web-Interface des Hub einzustellen. Gegebenenfalls passen Sie die vom Hub zurückzugebenden Elemente im Web-Interface des Hub an.&lt;br /&gt;
Die Einstellungen für &#039;&#039;MQTT topic pattern&#039;&#039; usw. können auf den default-Werten&amp;lt;ref&amp;gt;Diese sind: &amp;lt;br&amp;gt;&#039;&#039;milight/:device_id/:device_type/:group_id&#039;&#039; für &amp;quot;topic pattern&amp;quot;&amp;lt;br&amp;gt;&#039;&#039;milight/updates/:hex_device_id/:device_type/:group_id&#039;&#039; für &amp;quot;update topic pattern&amp;quot;&amp;lt;br&amp;gt;&#039;&#039;milight/states/:hex_device_id/:device_type/:group_id&#039;&#039; für &amp;quot;state topic pattern&amp;quot;. Der Autor hat derzeit folgende Infotypen zum Senden markiert: &amp;quot;status, brightness, hue, color, mode, color_temp, bulb_mode, computed_color, hex_color&amp;quot; (enthält eventuell zu viele Angaben. Bei einem Eventhandler muss man uU. darauf achten, dass kurz hintereinander zweimal dasselbe Event kommen kann (für ON/OFF)).&amp;lt;/ref&amp;gt; belassen werden, für die seit Mitte 2019 vorhandene Option, eine LWT-Message zu senden (&#039;&#039;MQTT Client Status Topic&#039;&#039;), tragen Sie &#039;&#039;milight/LWT&#039;&#039; ein und aktivieren &#039;&#039;Detailed&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== FHEM-Devices ===&lt;br /&gt;
[[Bild:MQTT2 MiLight.png|400px|thumb|Milight: Darstellung in FHEMWEB]]&lt;br /&gt;
==== Bridge ====&lt;br /&gt;
Wird nun über den Hub oder eine von diesem erkannte Fernbedienung ein vorhandenes Leuchtmittel geschaltet, wird bei eingeschaltetem autocreate ein erstes Device erstellt, die zunächst erstellte Definition sieht typischerweise etwa so aus:&lt;br /&gt;
 defmod MQTT2_milight_hub_1370325 MQTT2_DEVICE milight_hub_1370325&lt;br /&gt;
 attr MQTT2_milight_hub_1370325 IODev MQTT2_FHEM_Server&lt;br /&gt;
 attr MQTT2_milight_hub_1370325 readingList milight_hub_1370325:milight/updates/0xBE59/rgbw/1:.* { json2nameValue($EVENT, &#039;1_&#039;, $JSONMAP) }&lt;br /&gt;
 attr MQTT2_milight_hub_1370325 room MQTT2_DEVICE&lt;br /&gt;
&lt;br /&gt;
Auf dieses Device wird nun das &#039;&#039;template&#039;&#039; &#039;&#039;&#039;esp_milight_hub_bridge&#039;&#039;&#039; angewandt.&lt;br /&gt;
&lt;br /&gt;
==== Einzelne Leuchtmittel ====&lt;br /&gt;
&lt;br /&gt;
Wird nun nochmals das oben verwendete Leuchtmittel geschaltet, erstellt autocreate ein weiteres Device:&lt;br /&gt;
 defmod MQTT2_milight_0xBE59_1 MQTT2_DEVICE milight_0xBE59_1&lt;br /&gt;
 attr MQTT2_milight_0xBE59_1 IODev MQTT2_FHEM_Server&lt;br /&gt;
 attr MQTT2_milight_0xBE59_1 readingList milight/states/0xBE59/rgbw/1:.* { json2nameValue($EVENT, &#039;1_&#039;, $JSONMAP) }&lt;br /&gt;
 attr MQTT2_milight_0xBE59_1 room MQTT2_DEVICE&lt;br /&gt;
&lt;br /&gt;
Auf dieses wird nun eines der Bulb-templates angewendet. Wählt man das template X_01_esp_milight_hub_rgbw_bulb, wird eine einfache Variante erstellt, die neben einem toggelnden Icon nur Regler für Helligkeit, die Farbe und zwei Schaltflächen für den Weiß- und Nachtmodus enthält. Wer mehr oder andere Steuerelemente erhalten möchte, verwendet ein anderes template. Nicht benötigte Elemente kann man dabei einfach aus der Definition löschen.&lt;br /&gt;
&lt;br /&gt;
Alle weiteren Devices werden genauso erstellt. &lt;br /&gt;
&lt;br /&gt;
Um ein Device zu erhalten, mit dem sich alle Kanäle gleichzeitig steuern lassen, kann das template &#039;&#039;X_01a_esp_milight_hub_make_rgbw_group&#039;&#039; verwendet werden. Dieses verändert nicht das aktuelle Device, sondern erstellt &#039;&#039;&#039;eine Kopie&#039;&#039;&#039;, die dann modifiziert wird. Diese Kopie ist unter dem Namen &#039;&#039;milight_&amp;lt;RemoteID&amp;gt;_0&#039;&#039; im selben Raum zu finden wie das Ausgangsgerät und kann ebenfalls an die eigenen Wünsche angepasst werden. &lt;br /&gt;
&lt;br /&gt;
Weitere Beispiele:&lt;br /&gt;
Beispiel für ein RGB-CCT-Device:&lt;br /&gt;
 defmod Licht_Wz_all MQTT2_DEVICE&lt;br /&gt;
 attr Licht_Wz_all IODev MQTT2_Broker&lt;br /&gt;
 attr Licht_Wz_all eventMap /set_white:Weiss/night_mode:Nacht/white_mode:white/on:on/off:off/ON:on/OFF:off/next_mode:Mode/mode_speed_up:Up/mode_speed_down:Down/&lt;br /&gt;
 attr Licht_Wz_all group Licht&lt;br /&gt;
 attr Licht_Wz_all icon light_control&lt;br /&gt;
 attr Licht_Wz_all readingList milight/0x5D02/rgb_cct/0:.* { json2nameValue($EVENT) }\&lt;br /&gt;
 milight/updates/0x5D02/rgb_cct/0:.* { json2nameValue($EVENT) }\&lt;br /&gt;
 milight/states/0x5D02/rgb_cct/0:.* { json2nameValue($EVENT) }\&lt;br /&gt;
 &lt;br /&gt;
 attr Licht_Wz_all room Wohnzimmer&lt;br /&gt;
 attr Licht_Wz_all setList on milight/0x5D02/rgb_cct/0 {&amp;quot;status&amp;quot;:&amp;quot;ON&amp;quot;}\&lt;br /&gt;
 off milight/0x5D02/rgb_cct/0 {&amp;quot;status&amp;quot;:&amp;quot;OFF&amp;quot;}\&lt;br /&gt;
 level milight/0x5D02/rgb_cct/0 {&amp;quot;$EVTPART0&amp;quot;:&amp;quot;$EVTPART1&amp;quot;}\&lt;br /&gt;
 hue:colorpicker,HUE,0,1,359 milight/0x5D02/rgb_cct/0 {&amp;quot;$EVTPART0&amp;quot;:&amp;quot;$EVTPART1&amp;quot;}\&lt;br /&gt;
 command:uzsuSelectRadio,Weiss,Nacht,Mode,Up,Down milight/0x5D02/rgb_cct/0 {&amp;quot;$EVTPART0&amp;quot;:&amp;quot;$EVTPART1&amp;quot;}\&lt;br /&gt;
 brightness:colorpicker,BRI,0,1,255 milight/0x5D02/rgb_cct/0 {&amp;quot;$EVTPART0&amp;quot;:&amp;quot;$EVTPART1&amp;quot;}\&lt;br /&gt;
 next_mode milight/0x5D02/rgb_cct/0 {&amp;quot;$EVTPART0&amp;quot;:&amp;quot;$EVTPART1&amp;quot;}\&lt;br /&gt;
 mode_speed_up milight/0x5D02/rgb_cct/0 {&amp;quot;$EVTPART0&amp;quot;:&amp;quot;$EVTPART1&amp;quot;}\&lt;br /&gt;
 mode_speed_down milight/0x5D02/rgb_cct/0 {&amp;quot;$EVTPART0&amp;quot;:&amp;quot;$EVTPART1&amp;quot;}\&lt;br /&gt;
 saturation:colorpicker,BRI,0,1,100 milight/0x5D02/rgb_cct/0 {&amp;quot;$EVTPART0&amp;quot;:&amp;quot;$EVTPART1&amp;quot;}\&lt;br /&gt;
 color_temp:colorpicker,CT,153,1,370 milight/0x5D02/rgb_cct/0 {&amp;quot;$EVTPART0&amp;quot;:&amp;quot;$EVTPART1&amp;quot;}\&lt;br /&gt;
 device_id milight/0x5D02/rgb_cct/0 {&amp;quot;$EVTPART0&amp;quot;:&amp;quot;$EVTPART1&amp;quot;}\&lt;br /&gt;
 effect milight/0x5D02/rgb_cct/0 {&amp;quot;$EVTPART0&amp;quot;:&amp;quot;$EVTPART1&amp;quot;}\&lt;br /&gt;
 mode milight/0x5D02/rgb_cct/0 {&amp;quot;$EVTPART0&amp;quot;:&amp;quot;$EVTPART1&amp;quot;}\&lt;br /&gt;
 commands milight/0x5D02/rgb_cct/0 {&amp;quot;$EVTPART0&amp;quot;:&amp;quot;$EVTPART1&amp;quot;}&lt;br /&gt;
 attr Licht_Wz_all sortby 1&lt;br /&gt;
 attr Licht_Wz_all webCmd command:brightness:saturation:color_temp:hue&lt;br /&gt;
 attr Licht_Wz_all webCmdLabel command\ &lt;br /&gt;
 :brightness:saturation\&lt;br /&gt;
 :color_temp:hue&lt;br /&gt;
==== Ein Leuchtmittel, mehrere Fernbedienungen ====&lt;br /&gt;
Pairt man mehrere Fernbedienungen mit einem Leuchtmittel, sollten auch alle entsprechenden Fernbedienungscodes in das readingList-Attribut übernommen werden. Dazu übernimmt man am einfachsten die Einträge aus den zusätzlichen MQTT2_DEVICEs. Benötigt man das zusätzliche Device nicht separat, um z.B. eine getrennte Gruppenschaltung zu realisieren, kann man dieses löschen. Beispiel-readingList für ein Device, das auf zwei Fernbedienungscodes und zwei Gruppen &amp;quot;hört&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 attr Licht_Wz_all readingList milight/states/0x1234/rgbw/2:.* {json2nameValue($EVENT) }\&lt;br /&gt;
 milight/updates/0x1234/rgbw/2:.* { json2nameValue($EVENT) }\&lt;br /&gt;
 milight/states/0x1234/rgbw/0:.* { json2nameValue($EVENT) }\&lt;br /&gt;
 milight/updates/0x1234/rgbw/0:.* { json2nameValue($EVENT) }\&lt;br /&gt;
 milight/states/0xABCD/rgbw/0:.* { json2nameValue($EVENT) }\&lt;br /&gt;
 milight/updates/0xABCD/rgbw/0:.* { json2nameValue($EVENT) }\&lt;br /&gt;
 milight/states/0xABCD/rgbw/4:.* { json2nameValue($EVENT) }\&lt;br /&gt;
 milight/updates/0xABCD/rgbw/4:.* { json2nameValue($EVENT) }&lt;br /&gt;
&lt;br /&gt;
==== Fernbedienung als Input-Device nutzen ====&lt;br /&gt;
In diesem {{Link2Forum|Topic=103493|LinkText=Thread}} ist dargestellt, wie man eine Fernbedingung des Typs FUT089 dazu verwenden kann, einen [[MPD]] oder Rollladenaktoren zu steuern, oder diese Fernbedienung für [[Hue#HUE-Device|HUEDevice]]-Leuchtmittel zu nutzen.&lt;br /&gt;
Um hier nur Differenz-Meldungen direkt an die betreffende myUtils-Funktion zu übergeben und doppelte Events zu verhindern, sollte hier die readingList so angepasst werden, dass nur Messages aus dem &amp;quot;updates&amp;quot;-Zweig ausgewertet werden: &lt;br /&gt;
 defmod MiLight_RC1_0 MQTT2_DEVICE milight_0xABCD_0&lt;br /&gt;
 attr MiLight_RC1_0 readingList milight/states/0xABCD/fut089/[0-8]:.* {}&lt;br /&gt;
 milight/updates/0xABCD/fut089/0:.* { FHEM::attrT_MiLight_Utils::MPDcontrol(&#039;myMPD&#039;,$EVENT, &#039;Yamaha_Main&#039;) }\&lt;br /&gt;
 milight/updates/0x5D47/fut089/1:.* { FHEM::attrT_MiLight_Utils::FUT_to_RGBW(&#039;Licht_Stehlampe_links&#039;,$EVENT) }\&lt;br /&gt;
 milight/updates/0x5D47/fut089/2:.* { FHEM::attrT_MiLight_Utils::FUT_to_RGBW(&#039;Licht_Stehlampe_rechts&#039;,$EVENT) }\&lt;br /&gt;
 milight/updates/0x5D47/fut089/3:.* { FHEM::attrT_MiLight_Utils::four_Lights_matrix($EVENT, &#039;Licht_WoZi_Vorn_Aussen&#039;, &#039;Licht_WoZi_Vorn_Mitte&#039;, &#039;Licht_WoZi_Hinten_Aussen&#039;, &#039;Licht_WoZi_Hinten_Mitte&#039;) }\&lt;br /&gt;
 milight/updates/0x5D47/fut089/4:.* { FHEM::attrT_MiLight_Utils::shuttercontrol(&#039;Jalousie_WZ&#039;,$EVENT) }\&lt;br /&gt;
 milight/updates/0x5D47/fut089/5:.* { FHEM::attrT_MiLight_Utils::shuttercontrol(&#039;Rollladen_WZ_SSO&#039;,$EVENT) }\&lt;br /&gt;
 milight/updates/0x5D47/fut089/6:.* { FHEM::attrT_MiLight_Utils::shuttercontrol(&#039;Rollladen_WZ_SSW&#039;,$EVENT) }\&lt;br /&gt;
 milight/updates/0x5D47/fut089/7:.* {}\&lt;br /&gt;
 milight/updates/0x5D47/fut089/8:.* {}&lt;br /&gt;
 attr MiLight_RC_WZ stateFormat CommandSet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== eBus ==&lt;br /&gt;
An dieser Stelle sollen lediglich die Grundzüge erläutert werden, eine ausführliche Anleitung über die Konfiguration des [[EBUS-MQTT2|eBus mit MQTT2 gibt es hier]].&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitung und Definition am eBus ===&lt;br /&gt;
Vorausgesetzt wird ein laufender eBus-Dämon. Dessen Einrichtung wird im Artikel [[EBUS#Software|EBUS]] beschrieben.&lt;br /&gt;
In der Konfiguration des Dämons ( /etc/default/ebusd ) ist die Kommunikation über MQTT zu aktivieren und die Topic-Struktur festzulegen, z.B. &#039;&#039;ebusd/%circuit/%name&#039;&#039;.&lt;br /&gt;
 --accesslevel=* --mqttport=1883 --mqttjson --mqtthost=IpAdresseMQTTSERVER --mqtttopic=ebusd/%circuit/%name&lt;br /&gt;
{{Hinweis|Nachfolgend wird davon ausgegangen, dass als Vorgabe für mqtttopic &#039;&#039;ebusd&#039;&#039; verwendet wurde. Dies kann geändert werden, es wird aber dringend empfohlen, das mqtttopic in jedem Fall mit &#039;&#039;ebus...&#039;&#039; zu beginnen!}}&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitung und Definition  in FHEM ===&lt;br /&gt;
Unabhängig von dem konkret genutzten IO-Modul (MQTT2_SERVER oder MQTT2_CLIENT) sollte an diesem &#039;&#039;&#039;&#039;&#039;vor&#039;&#039;&#039;&#039;&#039; den nachfolgenden Schritten zunächst das autocreate ausgeschaltet werden. Weiter sollte geprüft werden, ob es bereits MQTT2_DEVICE-Geräte gibt, die Einträge in der &#039;&#039;readingList&#039;&#039; enthalten, die vom ebus stammen. Da wir die &#039;&#039;readingList&#039;&#039; anschließend mit erweiterten JSON-Optionen erstellen wollen, müssen zumindest sämtliche &#039;&#039;readingList&#039;&#039;-Attribute entsprechend bereinigt oder gelöscht werden; in der Regel ist es einfacher, diese Geräte nach dem Deaktivieren des autocreate am IO zu löschen.&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Sollten Sie MQTT2_CLIENT als IO nutzen, sollte für das weitere Vorgehen eine Kopie des MQTT2-&amp;quot;Sammeldevices&amp;quot; genutzt werden, und dessen &#039;&#039;CID&#039;&#039; auf &#039;&#039;ebusd&#039;&#039; geändert werden. Nach Anwendung des ebusd-splitter-templates müssen dann alle den ebus betreffenden Einträge aus der &#039;&#039;readingList&#039;&#039; des &amp;quot;Sammeldevices&amp;quot; gelöscht werden oder diese ganz gelöscht.}}Ist der ebus-Dämon lauffähig und für MQTT konfiguriert, sendet dieser regelmäßige Messages. &lt;br /&gt;
&lt;br /&gt;
Sind die Vorbereitungen abgeschlossen, aktivieren wir &#039;&#039;autocreate&#039;&#039; wieder, allerdings wählen wir als autocreate-Methode &#039;&#039;complex&#039;&#039; aus, da der eBus-Dämon teilweise&amp;lt;ref&amp;gt;Dies betrifft vorrangig die Statusmeldungen&amp;lt;/ref&amp;gt; eine weiter verschachtelte JSON-Struktur zum Versenden der Informationen verwendet als üblich. Danach wird wie bei den anderen o.g. Geräten automatisch ein neues MQTT2_DEVICE angelegt&amp;lt;ref&amp;gt;Bei Verwendung des MQTT2_CLIENT wird dann die &#039;&#039;readingList&#039;&#039; am bereits definierten MQTT2_DEVICE aus der Kopie des &amp;quot;Sammeldevice&amp;quot; automatisch wieder erstellt bzw. gefüllt.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;quot;ebus-Bridge&amp;quot; ====&lt;br /&gt;
Auf das von &#039;&#039;autocreate&#039;&#039; erstellte MQTT2_DEVICE wird nunmehr das template &#039;&#039;eBus_daemon_splitter&#039;&#039; angewendet. Nach einiger Zeit sollte sowohl die readingList an diesem Device erweitert worden sein, wie auch ein oder mehrere neue MQTT2_DEVICE-Geräte angelegt. &lt;br /&gt;
Dieses Device liefert zukünftig Readings zum Dämon selbst, wie dessen &#039;&#039;uptime&#039;&#039;, alle weiteren am eBus angeschlossenen Teilnehmer werden dagegen zweckmäßigerweise durch ein oder mehrere weitere MQTT2_DEVICE-Geräte dargestellt. &lt;br /&gt;
&lt;br /&gt;
Das &#039;&#039;attrTemplate&#039;&#039; läd eine weitere &#039;&#039;attrTemplate&#039;&#039;-file und [[99 myUtils anlegen|99_myUtils-Code]] vom FHEM-Server nach. Beides steht dann auch unmittelbar zur Nutzung zur Verfügung. &lt;br /&gt;
==== &amp;quot;ebusd_bai&amp;quot; und weitere Geräte ====&lt;br /&gt;
{{Hinweis|Der eBus-Dämon sendet nicht alle Informationen zu allen am eBus angeschlossenen Geräte automatisch. Diese müssen teilweise erst aktiv angefragt werden. Wie das im einzelnen erfolgen kann, ist dem o.g. Detailartikel zu entnehmen.}}&lt;br /&gt;
Funktioniert die Kommunikation zwischen dem eBus-Dämon und FHEM, sollte nach einigen Minuten zumindest ein weiteres Gerät namens &#039;&#039;MQTT2_ebus_bai&#039;&#039; angelegt worden sein.&lt;br /&gt;
&lt;br /&gt;
== Sonos2Mqtt ==&lt;br /&gt;
Aus einem Versuch heraus ist ein {{Link2Forum|Topic=111711|LinkText=kleines Projekt}} geworden: Die Sonos Umgebung mit Hilfe von sonos2mqtt als generisches MQTT2_DEVICE komfortabel in FHEM einzubinden.&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe von ein paar Templates ist die grundlegende Einbindung in FHEM nach einer kleinen Installation auf Systemebene schnell erledigt. Es läuft derzeit noch zahlreiche Entwicklung und Ideenfindung, die Fortschritte sind live im Thread oder [[Sonos2mqtt|konsolidiert im Wiki]] zu finden.&lt;br /&gt;
&lt;br /&gt;
=== Setup im System ===&lt;br /&gt;
Voraussetzung: nodejs und pm2 ist installiert und für alle Benutzer verfügbar. Je nach Entwicklungsstand sind auch Betaversionen verfügbar. Für aktuelle Beta einfach anstatt sonos2mqtt -&amp;gt; sonosmqtt@3.1.0-beta.1 beim Setup verwenden.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo npm install -g sonos2mqtt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Setup in FHEM ===&lt;br /&gt;
Man definiert lediglich ein Bridge Device, der Rest wird automatisch erledigt.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung: &lt;br /&gt;
* autocreate im System ist aktiv. &lt;br /&gt;
* Der verwendete MQTT2_SERVER steht auf &#039;&#039;&#039;autocreate simple&#039;&#039;&#039; (default/Standard).&lt;br /&gt;
Bei der Anwendung des Template für die Bridge wird der Topic (default: sonos) abgefragt! Einfach eintippen und ok drücken. &lt;br /&gt;
&lt;br /&gt;
Der folgende Code muss modifiziert werden! Den Abschnitt [[MQTT2-Module - Praxisbeispiele#Start sonos2mqtt|Start sonos2mqtt]] beachten!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung dieser Code muss &amp;quot;am Block&amp;quot; in der Raw Def ausgeführt werden!&#039;&#039;&#039; &lt;br /&gt;
# man kopiert diesen Codeblock, &lt;br /&gt;
# drückt im Webinterface das große + ,&lt;br /&gt;
# und fügt den Code ins Editorfenster ein. &lt;br /&gt;
# Dort muss/kann man die persönlichen Anpassungen machen. &lt;br /&gt;
# Zum Abschluss execute - fertig&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
define SonosBridge MQTT2_DEVICE&lt;br /&gt;
attr SonosBridge IODev NameDesVorhandenenMQTT2Servers&lt;br /&gt;
attr SonosBridge room MQTT2_DEVICE&lt;br /&gt;
define n_pm2_sonos notify global:INITIALIZED|n_pm2_sonos:start &amp;quot;pm2 -s start sonos2mqtt -- --mqtt mqtt://myuser:the_secret_password@192.168.0.3:1800&amp;quot;&lt;br /&gt;
sleep global:ATTR.SonosBridge.stateFormat.connected;trigger n_pm2_sonos start&lt;br /&gt;
set SonosBridge attrTemplate sonos2mqtt_bridge_comfort&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Der obige Code startet sowohl das sonso2mqtt Modul sofort und implentiert ein notify für den zukünftigen automatischen Start beim Start von FHEM.&lt;br /&gt;
&lt;br /&gt;
Das hier verwendete Template sonos2mqtt_bridge_comfort: &lt;br /&gt;
* setzt das Template sonos2mqtt_bridge auf das Device SonosBridge&lt;br /&gt;
* definiert zwei notify, diese erledigen im weiteren Betrieb die automatische Konfiguration der automatisch erzeugten MQTT2_DEVICEs &lt;br /&gt;
** mit dem Template sonos2mqtt_speaker.&lt;br /&gt;
** Ermitteln Detailinformation des jeweiligen Players (vor allem IP Adresse und Modelnumber)&lt;br /&gt;
** Laden die Sonosgeräte Icons von den UPNP Devices herunter&lt;br /&gt;
** erweitern das setList input Kommando um den TV Eingang (HDMI, spdif) bzw. Line_IN Eingang falls vorhanden (Modelnumber)&lt;br /&gt;
&lt;br /&gt;
==== Wozu dient die Bridge? ====&lt;br /&gt;
Sie stellt ein paar wesentliche Funktionen zu Verfügung&lt;br /&gt;
# Auffangen von nicht benötigten MQTT Nachrichten&lt;br /&gt;
# Erzeugung/Weiterleitung von Nachrichten für die einzelnen Player - damit auch die Erzeugung von separaten Playern nach dem Schema MQTT2_RINCON12345678901234567&lt;br /&gt;
# Status sonos2mqtt als Reading connected (0 offline, 1 connected, 2 Player connected)&lt;br /&gt;
Sie kann auch als zentrales Device verwendet werden um die Sonos Umgebung abzubilden, z.B. Readings für Favoriten  u.ä.&lt;br /&gt;
&lt;br /&gt;
==== Start sonos2mqtt ====&lt;br /&gt;
Soll das Modul sonos2mqtt mit seinen default Einstellungen gestartet werden genügt dieser kurze Befehl:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;pm2 start sonos2mqtt&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ist der MQTT2_SERVER in FHEM nicht &amp;quot;einfach so&amp;quot; sondern mit anderen Einstellungen erstellt und mit allowed abgesichert, müssen weiter Parameter übergeben werden. Dies erfolgt mit dem doppelten Bindestrich -- hinter dem nodejs Modul.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;pm2 start sonos2mqtt -- --mqtt mqtt://myuser:the_secret_password@192.168.0.3:1800&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Tipp: Verwendet man anstatt &amp;quot;Befehl&amp;quot; den Syntax {qx(Befehl)} in der FHEM Kommandozeile, wirkt der Befehl zwar blockierend aber die Ausgabe erfolgt im Browser und nicht im Logfile. Mit dem Parameter -s erfolgt keine Ausgabe.&lt;br /&gt;
&lt;br /&gt;
==== Autostart von sonos2mqtt mit pm2 (Alternative) ====&lt;br /&gt;
Der obige Code startet das sonos2mqtt nodejs Modul mit pm2 beim Start von FHEM. Sollte das nicht funktionieren oder nicht ins gesamte Konzept passen (weil z.B. mehrere nodejs Module geladen werden) kann der automatische Start direkt im System erfolgen. Zunächst dafür das oben eventuell schon definierte notify löschen!&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
delete n_pm2_sonos&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Der Start des Modul muss nicht mit erhöhten Rechten geschehen! Im Terminal folgendes eingeben (unter dem angemeldeten Benutzer wird sonos2mqtt später immer gestartet):&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pm2 start sonos2mqtt&lt;br /&gt;
pm2 startup&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Der letzte Befehl &amp;quot;redet&amp;quot;, d.h. es gibt eine Ausgabe in der Art:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[PM2] To setup the Startup Script, copy/paste the following command:&lt;br /&gt;
sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u pi --hp /home/pi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Man tut einfach genau das, was dasteht: die letzte Zeile kopieren und wieder einfügen und ausführen. Danach muss man die Konfiguration von pm2 noch sichern:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pm2 save&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Sonos2mqtt mit mehr Komfort ===&lt;br /&gt;
Im Wiki Artikel [[Sonos2mqtt]] geht es weiter.&lt;br /&gt;
&lt;br /&gt;
== Allgemeine Hinweise ==&lt;br /&gt;
=== MQTT2_SERVER und MQTT2_CLIENT für Debugging nutzen ===&lt;br /&gt;
Nutzt man das rawEvents-Attribut am MQTT2-IO&amp;lt;ref&amp;gt;z.B. &amp;lt;code&amp;gt;attr MQTT2_FHEM_Server rawEvents .*&amp;lt;/code&amp;gt;, der regex-Filter kann wie üblich angepasst werden&amp;lt;/ref&amp;gt;, kann man den Datenverkehr des Servers am Event-Monitor mitschneiden. Dies ist insbesondere für unbekannte Geräte nützlich, deren Topic- und Payload-Struktur noch nicht bekannt ist.&lt;br /&gt;
Um den kompletten MQTT Datenaustausch mitzuschneiden, kann man mit &amp;lt;code&amp;gt;attr mqtt2_server verbose 5&amp;lt;/code&amp;gt; auch alles ins FHEM-Log schreiben lassen.&lt;br /&gt;
&lt;br /&gt;
=== autocreate funktioniert anscheinend nicht? ===&lt;br /&gt;
In der Regel wird bei neu eingehenden MQTT-Messages über &#039;&#039;autocreate&#039;&#039; ein neues Device erstellt, wenn Nachrichten von einem bisher unbekannten Gerät kommen. Geschieht dies nicht, sollten folgende Punkte geprüft werden:&lt;br /&gt;
# Ein allgemeines {{Link2CmdRef|Anker=autocreate|Lang=en|Label=autocreate}}-Device (&#039;&#039;TYPE=autocreate&#039;&#039;) muss vorhanden und aktiv sein.&lt;br /&gt;
# &#039;&#039;autocreate&#039;&#039; am IO muss eingeschaltet sein, was für MQTT2_SERVER bedeutet, dass es nicht auf &amp;quot;0&amp;quot; stehen darf (hier ist dann &#039;&#039;simple&#039;&#039; die aktive Voreinstellung), für MQTT2_CLIENT sollte ebenfalls &#039;&#039;simple&#039;&#039; verwendet werden; dies muss hier allerdings explizit gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
Wird dann immer noch kein Device erstellt, gibt es in aller Regel ein Device, das bereits einen entsprechenden Eintrag in der readingList enthält, oder es sind keine Nachrichten eingegangen. Überprüfen Sie daher dann ggf. die Einstellungen am Client-Gerät (z.B. im Web-Interface des Shelly oder Tasmota-geflashten ESP8266).&lt;br /&gt;
&lt;br /&gt;
=== attrTemplate ===&lt;br /&gt;
Zur Konfiguration von MQTT2_DEVICE-Geräten kann die Funktion &#039;&#039;[[AttrTemplate|attrTemplate]]&#039;&#039; genutzt werden. &lt;br /&gt;
Die Anwendung für MQTT2_DEVICE ist [[MQTT2 DEVICE#attrTemplate|hier]] beschrieben.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|In einigen Fällen kann es vorkommen, dass die template-Bezeichnung zwischenzeitlich geändert wurde. Seit 21.09.2019 erfolgt die Sortierung der auswählbaren templates nicht mehr nur nach den Namen, so dass die entsprechenden Namensbestandteile entfallen sind, die einer besseren Sortierung dienten.}}&lt;br /&gt;
&lt;br /&gt;
=== attrTemplate: Es werden nicht alle templates angezeigt ===&lt;br /&gt;
Siehe Beitrag [[AttrTemplate#Warum finde ich das Template xyz nicht.3F|AttrTemplate: Warum finde ich das Template xyz nicht.]]&lt;br /&gt;
&lt;br /&gt;
=== attrTemplate und Sprachsteuerung ===&lt;br /&gt;
Konfiguriert man MQTT2_DEVICE-Geräte mit attrTemplate, werden in der Regel auch direkt die für die Sprachsteuerung der Geräte erforderlichen Attribute mit gesetzt. Weiterführende Hinweise sind auch zu diesem Teilaspekt von &#039;&#039;[[AttrTemplate|attrTemplate]]&#039;&#039; dem betreffenden Hauptartikel zu entnehmen.&lt;br /&gt;
&lt;br /&gt;
=== bridgeRegexp ===&lt;br /&gt;
[[Datei:Mqtt2 server.png|300px|thumb|left|Logische Verortung der bridgeRegexp-Angaben]]{{Randnotiz|RNTyp=y|RNText=Beachten Sie, dass aufgrund des geschilderten Prinzips eine Änderung einer bridgeRegexp bei einem Gerät auch dazu führt, dass alle Readings eines Geräts und alle readingList-Einträge gelöscht werden.}}Üblicherweise werden alle Informationen, die aus einer Quelle stammen auch &#039;&#039;&#039;&#039;&#039;einem&#039;&#039;&#039;&#039;&#039; &#039;&#039;MQTT2_DEVICE&#039;&#039; zugeordnet, wobei im Falle des dort nicht aktivierten autocreate-Attributs entsprechende readingList-Einträge erzeugt werden. In dem nebenstehenden Schaubild wären dies die Geräte &#039;&#039;A&#039;&#039; bis &#039;&#039;D&#039;&#039;. Das &#039;&#039;&#039;Attribut&#039;&#039;&#039; &#039;&#039;bridgeRegexp&#039;&#039; kann dazu genutzt werden, um neue, bisher unbekannte Topic-Strukturen im Rahmen des autocreate-Vorgangs anders zu strukturieren. Diese werden dabei im Ergebnis einem &#039;&#039;&#039;anderen Device&#039;&#039;&#039; (das ggf. erst erstellt wird) zugeschlagen, sollte eine zu der topic-Struktur passende regex in diesem Attribut gesetzt sein. Für dessen CID und die Bildung des Names wird die im 2. Teil jedes Eintrags als &#039;&#039;newClientId&#039;&#039; hinterlegte Angabe verwendet. In nebenstehendem Schaubild ist dies exemplarisch für die Gerätegruppe &#039;&#039;D&#039;&#039; mit dem &#039;&#039;bridge&#039;&#039;-Device &#039;&#039;D&#039;&#039; und dessen &#039;&#039;Satelliten&#039;&#039; &#039;&#039;D1&#039;&#039; bis &#039;&#039;D4&#039;&#039; dargestellt.&lt;br /&gt;
Dementsprechend sind in den hier aufgeführten Beispielen &#039;&#039;bridgeRegexp&#039;&#039;-Attribute immer dort zu finden, wo ein Gerät oder Dienst dazu dient, mit weiteren, ggf. auf andere Weise kommunizierende Geräte oder Baugruppen zu kommunizieren, wie z.B. für über hier dargestellten &#039;&#039;zigbee2mqtt&#039;&#039; oder &#039;&#039;zigbee2tasmota&#039;&#039;. Ein Sonderfall hierbei ist das template &#039;&#039;MQTT2_CLIENT_general_bridge&#039;&#039; zur Verwendung mit dem [[MQTT2_CLIENT#Anwendung|MQTT2_CLIENT]], denn aus dessen Sicht stammen alle Informationen aus derselben Quelle, nämlich z.B. dem &#039;&#039;mosquitto&#039;&#039;-Server und würden sonst alle einem einem MQTT2_DEVICE zugewiesen.&lt;br /&gt;
&lt;br /&gt;
=== Ständig neue Devices? ===&lt;br /&gt;
MQTT2_SERVER kann zwischen verschiedenen Geräten auch anhand der ClientID unterscheiden. Für jedes neu erkannte Gerät wird auch ein eigenes MQTT2_DEVICE angelegt. Abhilfemaßnahmen:&lt;br /&gt;
==== Vergabe einer ClientID ====&lt;br /&gt;
Die meisten MQTT-fähigen Geräte enthalten Optionen zur Vergabe einer eindeutigen ClientID (siehe das Beispiel des zigbee2mqtt-Dienstes oben). &lt;br /&gt;
Wird keine ClientID vergeben, verwenden manche Clients für jede Verbindung wieder neue ID&#039;s. Es wird empfohlen, möglichst von diesen Einstelloptionen Gebrauch zu machen.&lt;br /&gt;
&lt;br /&gt;
==== Löschen der ClientID aus der readingList usw. ====&lt;br /&gt;
Ist dies nicht möglich oder erwünscht, kann man auch die ClientID aus den readingList-, setList- und getList-Attributen entfernen. Dies ist jedenfalls solange unschädlich als nicht mehrere Geräte identische Topic-Pfade verwenden (daher die Empfehlung, insbesondere bei Tasmota-Geräten den &#039;&#039;default&#039;&#039; &amp;quot;sonoff&amp;quot; zu ändern).&lt;br /&gt;
Beispielsweise wäre &amp;lt;code&amp;gt;attr Milight_Bridge readingList milight_hub_1370325:milight/LWT:.* {json2nameValue($EVENT) }&amp;lt;/code&amp;gt; zu ändern in &amp;lt;code&amp;gt;attr Milight_Bridge readingList milight/LWT:.* {json2nameValue($EVENT) }&amp;lt;/code&amp;gt;&lt;br /&gt;
Die über &#039;&#039;attrTemplate&#039;&#039; verfügbaren Konfigurationen verwenden in der Regel keine ClientID&#039;s bzw. entfernen diese.&lt;br /&gt;
&lt;br /&gt;
=== Wildcards in readingList und setList ===&lt;br /&gt;
Auch in readingList und in setList sollten sich sog. wildcards verwenden lassen. Die Vorgehensweise ist jedoch unterschiedlich:&lt;br /&gt;
&lt;br /&gt;
In &#039;&#039;readingList&#039;&#039; werden normale regex-Ausdrücke verwendet. Ein Punkt steht daher z.B. für ein beliebiges Zeichen, alles zwischen zwei Topic-Tree-Elementen (getrennt typischerweise durch einen &amp;quot;/&amp;quot;) kann man so schreiben: &amp;quot;[^/]+&amp;quot; (entspricht: &amp;quot;Mindestens ein Zeichen, das kein Schrägstrich ist&amp;quot;). Ergänzender Hinweis: Will man z.B. Informationen aus einem beliebigen Teil des Topic-trees extrahieren und als Reading-Namen verwenden, kann dies im Rahmen eines Perl-Aufrufs geschehen. Beispiele aus der mqtt2.template-file: OpenMQTTGateway_BT_scanner und OpenMQTTGateway_BT_gtag (letzteres überführt die Information, über welches Gateway bestimmte Informationen eingegangen ist jeweils in eigene Readings pro Gateway).&lt;br /&gt;
&lt;br /&gt;
In &#039;&#039;setList&#039;&#039; gelten dagegen die wildcard-Konventionen aus der MQTT-Welt. Dort steht &amp;quot;+&amp;quot; für einen austauschbaren Teil des Topic-Trees (zwischen zwei Schrägstrichen). Anmerkung: Bitte vorher prüfen, ob es wirklich sinnvoll ist, derart unspezifische Publishes vorzunehmen. Meist gibt es &amp;quot;Gruppen-Topics&amp;quot;, auf die mehrere Geräte eines bestimmten Typs hören bzw. man kann dies dort (in der firmware bzw. auf den Konfigurationsseiten der Geräte) einstellen.&lt;br /&gt;
&lt;br /&gt;
=== Die JSON-Daten sollen ausnahmsweise nicht ausgepackt werden ===&lt;br /&gt;
In manchen Fällen ist das automatische Auspacken der JSON-Payload nicht erwünscht. In diesen Fällen kann man einfach den gewünschten Reading-Namen in die readingList eintragen, statt der Anweisung, den JSON an json2NameValue() zu übergeben. Aus&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;attr MQTT_OwnTracks readingList owntracks/clouduser/mi6:.* { json2nameValue($EVENT) }\&lt;br /&gt;
owntracks/clouduser/mi6/waypoints:.* { json2nameValue($EVENT) }\&lt;br /&gt;
owntracks/clouduser/mi6/event:.* { json2nameValue($EVENT) }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
wird dann:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
attr MQTT_OwnTracks readingList owntracks/clouduser/mi6:.* json_mi6\&lt;br /&gt;
owntracks/clouduser/mi6/waypoints:.* json_waypoints\&lt;br /&gt;
owntracks/clouduser/mi6/event:.* json_event&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Erforderlichenfalls kann man die Einträge auch doppelt erstellen, um sowohl den JSON wie auch die ausgepackten Readings zu erhalten.&lt;br /&gt;
&lt;br /&gt;
=== Weiterführende Themen ===&lt;br /&gt;
==== Verbinden mehrerer FHEM-Instanzen über MQTT ====&lt;br /&gt;
Wie im Hauptartikel zu [[MQTT#Kommunikation zu sonstigen FHEM-Geräten über MQTT|MQTT]] erläutert, gibt es mehrere Varianten, wie man mit Hilfe von FHEM aus Events an beliebigen Geräten MQTT-Messages erzeugen kann. So kann man z.B. Messdaten eines Systems über ein &#039;&#039;notify&#039;&#039; iVm. einer einfachen &#039;&#039;publish&#039;&#039;-Anweisung an ein zweites FHEM schicken, das diese Daten dann z.B. mit Hilfe der MQTT2-Module auswerten kann.&lt;br /&gt;
Damit dabei Nachrichten unterschiedlicher Quellen auch als getrennte Readings bzw. ggf. auch gesonderten MQTT2_DEVICE-Instanzen zugeordnet werden, sollte man entsprechende Topic-Strukturen wählen, die dann auch mit Hilfe einer geeigneten &#039;&#039;bridgeRegexp&#039;&#039; automatisiert ausgewertet werden kann, siehe z.B. dieser {{Link2Forum|Topic=107145|LinkText=Forumsthread}}:&lt;br /&gt;
 attr MQTT2_myMqttServer bridgeRegexp \&lt;br /&gt;
   SmartHome/MqttGenericBridge2/([A-Za-z0-9]*)/.*:.* &amp;quot;mgb2_$1&amp;quot;&lt;br /&gt;
Dabei werden die betreffenden Informationen der entfernten FHEM-Instanz alle nach dem Schema &#039;&#039;SmartHome/MqttGenericBridge2/&amp;lt;Device-Name&amp;gt;/&amp;lt;Reading-Name&amp;gt;&#039;&#039; versendet.&lt;br /&gt;
&lt;br /&gt;
==== Umstellung von MQTT_DEVICE (und Derivaten wie XiaomiMQTTDevice) zu MQTT2_DEVICE ====&lt;br /&gt;
Wer beabsichtigt, von der Implementierung MQTT+MQTT_DEVICE zu MQTT2-IO und MQTT2_DEVICE zu wechseln, sollte einige Punkte beachten. Viele diesbezügliche Fragen sind vor allem in  {{Link2Forum|Topic=103762|LinkText=diesem Foren-Thread}}&lt;br /&gt;
&lt;br /&gt;
näher erläutert.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=91394|LinkText=Thread, aus dem diese Anleitung ursprünglich entstanden ist}}&lt;br /&gt;
* {{Link2Forum|Topic=91807|LinkText=Thread zum Tasmota-Device}}&lt;br /&gt;
* {{Link2Forum|Topic=97989|LinkText=Thread, aus dem diese Anleitung für den eBus ursprünglich entstanden ist}}&lt;br /&gt;
* {{Link2Forum|Topic=94495|LinkText=Neue templates einreichen}}&lt;br /&gt;
* {{Link2Forum|Topic=94494|LinkText=Fragen, Wünsche und Kritik zu mqtt2.template}}&lt;br /&gt;
&lt;br /&gt;
== Hinweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:MQTT]]&lt;br /&gt;
[[Kategorie:ZigBee]]&lt;br /&gt;
[[Kategorie:IP Components|IP Komponenten]]&lt;br /&gt;
[[Kategorie:Other Components]]&lt;br /&gt;
[[Kategorie:Interfaces]]&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Knxd&amp;diff=23010</id>
		<title>Knxd</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Knxd&amp;diff=23010"/>
		<updated>2017-10-21T19:44:42Z</updated>

		<summary type="html">&lt;p&gt;Fidel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= knxd mit einem IP Gateway einrichten =&lt;br /&gt;
Damit FHEM auf den KNX Bus zugreifen kann, benötigt man ein passendes Interface&lt;br /&gt;
&lt;br /&gt;
Es gibt:&lt;br /&gt;
&lt;br /&gt;
* RS232&lt;br /&gt;
* USB&lt;br /&gt;
* IP&lt;br /&gt;
&lt;br /&gt;
Ich beschreibe die Einrichtung von knxd mit einem IP Gateway auf einen Raspberry Pi2 mit Wheezy oder Jessie.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1. als erstes müssen folgende Pakete installiert werden (Referenz Debian Jessie):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get update&lt;br /&gt;
sudo apt-get install debhelper cdbs automake libtool libusb-1.0-0-dev git-core build-essential libsystemd-daemon-dev dh-systemd libev-dev cmake&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.1 als erstes müssen folgende Pakete installiert werden (Referenz Debian Stretch):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get update&lt;br /&gt;
sudo apt-get install debhelper cdbs automake libtool libusb-1.0-0-dev git-core build-essential libsystemd-dev dh-systemd libev-dev cmake&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2. knxd herunterladen und installieren&#039;&#039;&#039;&lt;br /&gt;
Achtung: Wenn Abhängigkeiten fehlen, dann installiere diese nach. Nicht einfach mittels &amp;quot;-d&amp;quot; diese übergehen!&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone https://github.com/knxd/knxd.git&lt;br /&gt;
cd knxd&lt;br /&gt;
git checkout stable&lt;br /&gt;
dpkg-buildpackage -b -uc&lt;br /&gt;
cd ..&lt;br /&gt;
sudo dpkg -i knxd_*.deb knxd-tools_*.deb&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
&#039;&#039;&#039;1. Ohne systemd&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
es muss als nächstes die Konfigurationsdatei editiert werden.&lt;br /&gt;
&lt;br /&gt;
das geht mit:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo nano /etc/default/knxd &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
dann folgende Einträge anpassen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
DAEMON_ARGS=&amp;quot;-u /tmp/eib -u /var/run/knx -i -b ipt:192.168.188.XX&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
und&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
START_KNXD=YES&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;2. Mit systemd z. B. für Debian Jessie&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Konfigurationsdatei bei Jessie hat sich wegen der Nutzung von systemd geändert:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo nano /etc/knxd.conf &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
dann folgende Einträge anpassen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
KNXD_OPTS=&amp;quot;-u /tmp/eib -u /var/run/knx -b ipt:192.168.188.XX&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
und&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
START_KNXD=YES&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== knxd Status überprüfen ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/init.d/knxd status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== FAQ ==&lt;br /&gt;
&#039;&#039;&#039;Wie wird eibd vorher deinstalliert?&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo rm -r /usr/local/bin/{eibd,knxtool,group*} /usr/local/lib/lib{eib,pthsem}*.so* /usr/local/include/pth*&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;folgender Fehler: dpkg-buildpackage: Fehler: Fehler-Exitstatus von debian/rules build war 2&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install git-core build-essential&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
in der datei knxd/debian/rules die Zeile:&lt;br /&gt;
bash tools/test.sh auskommentieren&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fehler: dpkg-buildpackage: error: fakeroot not found, either install the fakeroot &amp;lt;....&amp;gt; &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install fakeroot dpkg-dev&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
[[Benutzer:Marthinx]]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/knxd/knxd Github knxd]&lt;br /&gt;
&lt;br /&gt;
[https://knx-user-forum.de/forum/projektforen/knxd/1049547-grundlagen-zum-knxd-mit-installationsanleitung-vor-dem-schreiben-lesen Forums-Thread zu knxd. Sehr informativ.]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Examples]]&lt;br /&gt;
[[Kategorie:EIB/KNX]]&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Alexa-Fhem&amp;diff=17838</id>
		<title>Alexa-Fhem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Alexa-Fhem&amp;diff=17838"/>
		<updated>2016-12-16T22:19:11Z</updated>

		<summary type="html">&lt;p&gt;Fidel: /* Alexa-Fhem installieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Alexa-Fhem&#039;&#039;&#039; ist eine in JavaScript und auf NodeJS basierende Software, welche es ermöglicht, der digitalen Amazon Assistentin Alexa zusätzliche Skills für die Heimautomatisierung via FHEM beizubringen. Eine erste funktionierende Version wurde von [https://forum.fhem.de/index.php?action=profile;u=430 justme1968] im [https://forum.fhem.de/index.php/topic,60244.0.html Forum] veröffentlicht.&lt;br /&gt;
Das ist eine erste Version der Dokumentation zur Installation und Einrichtung, eine Erweiterung wird sicherlich in nächster Zeit noch folgen.&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Anbindung von FHEM an Amazon Assistent Alexa&lt;br /&gt;
|ModType=x&lt;br /&gt;
|ModTechName=&lt;br /&gt;
|ModForumArea=Sonstige Systeme&lt;br /&gt;
|ModOwner=justme1968&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Einführung==&lt;br /&gt;
&lt;br /&gt;
===Arbeitsweise und Datenfluss===&lt;br /&gt;
[[Datei:2gpXyLN.jpg|200px|thumb|right|Grafische Darstellung der beteiligten Komponenten]]&lt;br /&gt;
Echo -&amp;gt; AVS -&amp;gt; AWS Lambda -&amp;gt; alexa-fhem -&amp;gt; AWS Lambds -&amp;gt; AVS -&amp;gt; Echo&lt;br /&gt;
 &lt;br /&gt;
*Der Echo (oder ein anderes Alexa/AVS fähiges device)  nimmt Audiodaten auf und schickt diese an AVS  (Amazon Voice Service) zur Erkennung&lt;br /&gt;
*AVS führt die Spracherkennung durch und erzeugt ein Event mit Informationen zu den Erkannten Daten&lt;br /&gt;
:*Beim Custom Sill kommen die dazu nötgen Informationen aus dem &#039;&#039;Interaction Model&#039;&#039; der Alexa Skills Konfiguration&lt;br /&gt;
:*Beim Home Automation Skill sind die möglichen Sätze fest vorgegeben &lt;br /&gt;
*Das Event wird an den unter &#039;&#039;Configruation&#039;&#039; in der Alexa Skills Konfiguration hinterlegten Endpoint geschickt&lt;br /&gt;
:*Beim Home Automation Skill ist das zwingend eine AWS Lambda Routine&lt;br /&gt;
:*Beim Custom Skill kann das im Prinzip auch ein eigener Web Service sein&lt;br /&gt;
*Das Event wird vom &amp;lt;code&amp;gt;lambda.js&amp;lt;/code&amp;gt; code an alexa-fhem weitergeleitet&lt;br /&gt;
*alexa-fhem steuert FHEM und sendet ein Antwort Event zurück&lt;br /&gt;
*&amp;lt;code&amp;gt;lambda.js&amp;lt;/code&amp;gt; nimmt diese Antwort entgegen und gibt sie an AVS zurück&lt;br /&gt;
*AVS sogt dafür das der echo &#039;antwortet&#039; und das die Card in der Alexa App erscheint&lt;br /&gt;
&lt;br /&gt;
===Anmerkungen===&lt;br /&gt;
*Ein Skill hat keinen zugriff auf die Audiodaten&lt;br /&gt;
*Mit dem Skill API kann ein Skill zu zu keiner Zeit von sich aus aktiv werden und &#039;einfach&#039; Daten an den Echo schicken oder ihn dazu bringen irgendetwas zu tun.&lt;br /&gt;
*Es ist ein kleines Wunder wie schnell die Reaktion auf einen gesprochenen Satz erfolgt wenn man berücksichtigt welchen Weg die Daten insgesamt gehen.&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
&lt;br /&gt;
Grundvoraussetzung für alle folgenden Schritte ist, dass ein Amazon-Account vorhanden ist. Es wird davon ausgegangen, dass bereits für alle folgenden Amazon-Dienste vorab das Konto jeweils eingerichtet wurde, die Einrichtung dieser ist nicht Bestandteil dieser Anleitungen.&lt;br /&gt;
&lt;br /&gt;
Es sei an dieser Stelle darauf hingewiesen, dass für die Nutzung der Amazon AWS-Dienste zwingend die Daten einer Kreditkarte angegeben werden müssen. Nach gegenwärtigem Kenntnisstand sollen jedoch keine Kosten für die Nutzung der im Rahmen dieses How To beschriebenen Dienste anfallen, sofern diese in einem Rahmen genutzt werden, der selbst eine intensive private Nutzung nicht überschreitet. Der Benutzer sei an dieser Stelle auf die von Amazon veröffentlichten Preislisten verwiesen.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNTyp=[g|Info]|RNText=Da die einzelnen Schritte der Anleitung an verschiedenen Stellen unterbrochen und später fortgesetzt werden müssen, empfiehlt es sich, die Anleitung einmal vollständig gelesen zu haben. Dies vermeidet Fehler, die ansonsten geschehen können. Während der Konfiguration bietet es sich an diese Schritte dann parallel in gleichzeitig geöffneten Browserfenster durchzuführen. }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Voraussetzungen ===&lt;br /&gt;
Folgende grundlegende Voraussetzungen sollten erfüllt sein, bevor du mit der Einrichtung beginnst:&lt;br /&gt;
* Amazon Echo oder Amazon Dot&lt;br /&gt;
* node.js (vermutlich ab Version 0.12.7, getestet mit 4.2.6. Kann in Debian z.B. mit &amp;lt;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;sudo apt-get install nodejs-legacy&amp;lt;/source&amp;gt; installiert werden)&lt;br /&gt;
* Weiterleitung von Port 3000 vom Router aus auf den Rechner, auf dem Alexa-Fhem läuft&lt;br /&gt;
* Es empfiehlt sich ein alexa Gerät in FHEM anzulegen.&lt;br /&gt;
&lt;br /&gt;
=== Alexa-Fhem installieren ===&lt;br /&gt;
# Die tgz-Datei entpacken (Quelle: https://forum.fhem.de/index.php/topic,60244.0.html) (neuere Version verügbar, bitte Hinweise unter Custom Skill beachten:https://forum.fhem.de/index.php/topic,60244.msg540117.html#msg540117)&lt;br /&gt;
# Verzeichnis &#039;&#039;package&#039;&#039; in &#039;&#039;alexa-fhem&#039;&#039; umbenennen&lt;br /&gt;
# Durch &amp;lt;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;cd alexa-fhem&amp;lt;/source&amp;gt; in das Verzeichnis wechseln&lt;br /&gt;
# Mit (kein sudo!) &amp;lt;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;npm install&amp;lt;/source&amp;gt; alle Abhängigkeiten installieren&lt;br /&gt;
# SSL Zertifikat erzeugen durch Aufruf von (kein sudo!)&amp;lt;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;./createKey.sh&amp;lt;/source&amp;gt;. Hierbei beachten, dass ein Kennwort vergeben werden soll, das mindestens aus 4 Zeichen besteht.&lt;br /&gt;
# Die Datei &#039;&#039;config-sample.json&#039;&#039; nach &#039;&#039;~/.alexa/config.json&#039;&#039; kopieren und die Werte auf die eigene Umgebung hin anpassen. Der Filter funktioniert hierbei wie bei [http://www.fhemwiki.de/wiki/Homebridge_einrichten#Einstellungen_f.C3.BCr_homebridge homebridge-fhem],die folgenden Zeilen sind anzupassen oder zu löschen:&amp;lt;br&amp;gt;&amp;quot;nat-pmp&amp;quot;: -&amp;gt; wenn nat-pmp verwendet werden soll: die ip des eigenen routers,&amp;lt;br&amp;gt;&amp;quot;nat-upnp&amp;quot;: -&amp;gt; wenn nat-upnp verwendet werden soll: &#039;&#039;true&#039;&#039;,&amp;lt;br&amp;gt;&amp;quot;applicationId&amp;quot;: -&amp;gt; SkillID aus &amp;quot;Alexa Custom Skill anlegen&amp;quot; Punkt 7 (s.u.),&amp;lt;br&amp;gt;&amp;quot;oauthClientID&amp;quot;: -&amp;gt; &#039;&#039;Client Id&#039;&#039; aus Punkt 1. &#039;&#039;&#039;Login with Amazon&#039;&#039;&#039;&lt;br /&gt;
# Durch Aufruf von &amp;lt;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;./bin/alexa&amp;lt;/source&amp;gt; den Dienst starten (kein sudo!)&lt;br /&gt;
&lt;br /&gt;
Der Start des Alexa-Dienstes auf der Console ist immer dann zu empfehlen, wenn man auf die Ausgaben des Dienstes angewiesen ist und beispielsweise sehen möchte, welche Devices durch den Dienst bereitgestellt werden oder ob Fehler auftreten. Beendet man die Console-Session wird auch der Dienst wieder beendet. Insofern ist die vorgenannte Vorgehensweise nur für ein Debugging zu empfehlen und nicht im Regelbetrieb. Nachfolgend ist beschrieben, wie man den Alexa-Dienst aus FHEM heraus starten / stoppen und neu starten kann.&lt;br /&gt;
&lt;br /&gt;
=== Alexa-Fhem aus FHEM heraus starten ===&lt;br /&gt;
Zunächst das Start-up-Skript aus diesem Post herunterladen [https://forum.fhem.de/index.php/topic,60244.msg517271.html#msg517271 https://forum.fhem.de/index.php/topic,60244.msg517271.html#msg517271] und unter /etc/init.d/alexa speichern.&lt;br /&gt;
&lt;br /&gt;
Das Script geht davon aus, das der alexa-fhem script unter /opt/fhem/alexa-fhem liegt, und die logfiles später unter /opt/fhem/log. Sollte das nicht der Fall sein, muss das Skript angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Nun folgende Kommandos ausführen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;sudo chmod 755 /etc/init.d/alexa&lt;br /&gt;
sudo update-rc.d alexa defaults&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der Datei &amp;lt;code&amp;gt;/etc/sudoers&amp;lt;/code&amp;gt; den User fhem für die Nutzung von sudo zulassen (&amp;lt;code&amp;gt;sudo nano /etc/sudoers&amp;lt;/code&amp;gt;), z.B. durch Anfügen der nachfolgenden Zeile:&lt;br /&gt;
&amp;lt;code&amp;gt;fhem ALL=(ALL) NOPASSWD: ALL&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun folgende Devices anlegen (ggf. einem Raum zuordnen, z.B. AlexaControl):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:75%;&amp;quot;&amp;gt;define FHEM.Alexa.Status dummy&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:75%;&amp;quot;&amp;gt;define FHEM.Alexa dummy&lt;br /&gt;
attr FHEM.Alexa event-on-change-reading state&lt;br /&gt;
attr FHEM.Alexa webCmd status:start:stop:restart&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:75%;&amp;quot;&amp;gt;define FHEM.Alexa.DOIF DOIF ([FHEM.Alexa] eq &amp;quot;start&amp;quot;) &lt;br /&gt;
(set FHEM.Alexa on, {system (&amp;quot;sudo /etc/init.d/alexa start &amp;gt; /dev/null 2&amp;gt;&amp;amp;1 &amp;amp;&amp;quot;)}) &lt;br /&gt;
DOELSEIF ([FHEM.Alexa] eq &amp;quot;stop&amp;quot;) &lt;br /&gt;
(set FHEM.Alexa on, {system (&amp;quot;sudo /etc/init.d/alexa stop &amp;gt; /dev/null 2&amp;gt;&amp;amp;1 &amp;amp;&amp;quot;)}) &lt;br /&gt;
DOELSEIF ([FHEM.Alexa] eq &amp;quot;restart&amp;quot;) &lt;br /&gt;
(set FHEM.Alexa on, {system (&amp;quot;sudo /etc/init.d/alexa restart &amp;gt; /dev/null 2&amp;gt;&amp;amp;1 &amp;amp;&amp;quot;)}) &lt;br /&gt;
DOELSEIF ([FHEM.Alexa] eq &amp;quot;status&amp;quot;) &lt;br /&gt;
(set FHEM.Alexa on, {system (&amp;quot;sudo /etc/init.d/alexa status &amp;gt; /dev/null 2&amp;gt;&amp;amp;1 &amp;amp;&amp;quot;)})&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Alexa Device mit dem Modul 39_alexa.pm anlegen ===&lt;br /&gt;
&lt;br /&gt;
Das Modul 39_alexa.pm stellt innerhalb von FHEM verschiedene Attribute z.B. alexaName oder alexaRoom zur Verfügung. Manche dieser Attribute (wie z.b. alexaName) werden in beiden Skills verwendet, andere werden ausschließlich bei einer Nutzung des Alexa Custom Skill verwendet.&lt;br /&gt;
&lt;br /&gt;
Die Einrichtung des Alexa Device geschieht durch die nachfolgende Definition:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:70%;&amp;quot;&amp;gt;define MyAlexa alexa&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Alexa Skills anlegen ===&lt;br /&gt;
&lt;br /&gt;
==== Abgrenzung des &#039;&#039;&#039;Alexa Smart Home Skills&#039;&#039;&#039; und des &#039;&#039;&#039;Alexa Custom Skills&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
Der Alexa Smart Home Skill ist ein Amazon-Alexa-Standard-Skill, der wesentliche Basisfunktionalitäten bereitstellt. Zu diesen gehört im Wesentlichen die Funktionalität, durch Alexa-FHEM bereitgestellte Devices im Alexa-Account des Benutzers anzulegen. Der Alexa Smart Home Skill reagiert auf gesprochene Interaktion in einem beschränkten Umfang. Beispielsweise genügt ein &amp;quot;Alexa, schalte die Wohnzimmerlampe an&amp;quot; um eine Interaktion zwischen Alexa Smart Home Skill und FHEM-Alexa auszulösen. Nach erfolgreicher Einrichtung wird dieser Skill in der Alexa-App bzw. im Web in der Rubrik &amp;quot;Smart Home&amp;quot; als Skill angezeigt.&lt;br /&gt;
&lt;br /&gt;
Der Alexa Custom Skill ist kein Standard-Smart-Home-Skill, sondern ein individuell entwickelter Skill, so wie alle anderen Skills auch. Er wird daher auch nicht in der Alexa-App unter der Rubrik &amp;quot;Smart Home&amp;quot; angezeigt. Gesprochene Interaktion mit diesem Skill erfolgt dadurch, dass entweder der Skill explizit gestartet wird (z.B. &amp;quot;Alexa, starte [Name des Skills]&amp;quot;) oder direkt angesprochen wird (z.B. &amp;quot;Alexa, frage [Name des Skills] wie ist der Status von [Device] &amp;quot;). Der Alexa Custom Skill befindet sich in Entwicklung und wird hinsichtlich seiner Funktionalitäten laufend weiterentwickelt. Die Einrichtung dieses Skills ist grundsätzlich optional, jedoch werden anspruchsvollere Steuerungsmöglichkeiten nur mit diesem realisiert werden können.&lt;br /&gt;
&lt;br /&gt;
=== Alexa Smart Home Skill anlegen ===&lt;br /&gt;
Für folgende Schritte muss man unter der Adresse http://developer.amazon.com angemeldet sein&lt;br /&gt;
# Anmeldung auswählen&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-01-login2.png|200px]]&lt;br /&gt;
# Anmeldedaten eingeben&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-02-userpass2.png|200px]]&lt;br /&gt;
&lt;br /&gt;
==== Apps &amp;amp; Services ====&lt;br /&gt;
# Klicke nach der Anmeldung auf &#039;&#039;APPS &amp;amp; SERVICES&#039;&#039;&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-03-apps_and_services.png|200px]]&lt;br /&gt;
# Klicke anschließend auf &#039;&#039;Security Profiles&#039;&#039;&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-05-apps_and_services_-_security_profiles.png|200px]]&lt;br /&gt;
# Wähle anschließend &#039;&#039;Create a New Security Profile&#039;&#039; aus&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-06-apps_and_services_-_create_a_new_security_profile.png|200px]]&lt;br /&gt;
# Gebe dann ein Namen und eine Beschreibung für das Profil ein und bestätige die Eingaben durch anklicken von &#039;&#039;Save&#039;&#039;&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-07-apps_and_services_-_security_profile_management.png|200px]]&lt;br /&gt;
&lt;br /&gt;
==== Login with Amazon ====&lt;br /&gt;
{{Randnotiz|RNTyp=[g|Info]|RNText=Hier wird beschrieben, wo &#039;&#039;Client Id&#039;&#039; und &#039;&#039;Client Secret&#039;&#039; zu finden ist}}&lt;br /&gt;
# Nachdem du die vorherigen Schritte befolgt hast, siehst du im Browser das Profil dass du angelegt hast. Klicke jetzt oben rechts auf &#039;&#039;Login with Amazon&#039;&#039;&amp;lt;br/&amp;gt;[[Datei:Developer.amazon.com-08-login_with_amazon.png|200px]]&lt;br /&gt;
# Auf der neu geladenen Seite klickst du dann auf &#039;&#039;Sign up&#039;&#039;&amp;lt;br/&amp;gt;[[Datei:Developer.amazon.com-09-login_with_amazon_-_sign_up.png|200px]]&lt;br /&gt;
# Wähle anschließend im Dropdown Menü das vorher angelegte Profil aus und bestätige das anschließend mit &#039;&#039;Confirm&#039;&#039;&amp;lt;br/&amp;gt;[[Datei:Developer.amazon.com-10-login_with_amazon_-_create_new_profile.png|200px]] [[Datei:Developer.amazon.com-11-login_with_amazon_-_create_new_profile2.png|200px]]&lt;br /&gt;
# Im folgenden Fenster gibst du dann die Adresse [https://www.amazon.com/gp/help/customer/display.html?nodeId=468496 https://www.amazon.com/gp/help/customer/display.html?nodeId=468496] ein und bestätigst die Eingabe mit &#039;&#039;Save&#039;&#039;&amp;lt;br/&amp;gt;[[Datei:Developer.amazon.com-12-login_with_amazon_-_enter_consent_screen_information.png|200px]]&lt;br /&gt;
# Klicke dann bei dem neu angelegten Eintrag auf der rechten Seite auf das Zahnrad und wähle &#039;&#039;Web Settings&#039;&#039; aus&amp;lt;br/&amp;gt;[[Datei:Developer.amazon.com-13-login_with_amazon_-_web_settings.png|200px]]&lt;br /&gt;
# Im neu geladenen Fenster klickst du dann auf &#039;&#039;Edit&#039;&#039;&amp;lt;br/&amp;gt;[[Datei:Developer.amazon.com-14-login_with_amazon_-_edit.png|200px]]&lt;br /&gt;
# Füge zuletzt dann bei &#039;&#039;Allowed Return URLs&#039;&#039; die Adresse [https://layla.amazon.co.uk/api/skill/link/xxx https://layla.amazon.co.uk/api/skill/link/xxx], [https://pitangui.amazon.com/api/skill/link/xxx https://pitangui.amazon.com/api/skill/link/xxx], und [https://layla.amazon.com/api/skill/link/xxx https://layla.amazon.com/api/skill/link/xxx] hinzu. xxx muss hierbei durch den Wert ersetzt werden, der bei Punkt 6 &#039;&#039;&#039;Skill Kit einrichten&#039;&#039;&#039; unter &#039;&#039;&#039;Redirect Urls&#039;&#039;&#039; am Ende der URLs angezeigt wird.&amp;lt;br/&amp;gt;[[Datei:Developer.amazon.com-15-login_with_amazon_-_allowed_return_urls.png|200px]]&lt;br /&gt;
&lt;br /&gt;
==== Skill Kit einrichten ====&lt;br /&gt;
# Wähle im Menü den Punkt &#039;&#039;Alexa&#039;&#039; aus&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-03-apps_and_services.png|200px]]&lt;br /&gt;
# Klicke dann &#039;&#039;Get started&#039;&#039; beim Punkt &#039;&#039;Alexa Skills Kit&#039;&#039; an&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-17-alexa_-_alex_skills_kit_-_get_started.png|200px]]&lt;br /&gt;
# Wähle dann auf der neu geladenen Seite oben rechts &#039;&#039;Add a New Skill&#039;&#039; aus&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-18-alexa_-_alex_skills_kit_-_add_a_new_skill.png|200px]]&lt;br /&gt;
# Auf der folgenden Seite wählst du &#039;&#039;Smart Home Skill API&#039;&#039; sowie &#039;&#039;German&#039;&#039; als Sprache aus und gibst ein Name für den Skill ein was du dann mit &#039;&#039;Next&#039;&#039; bestätigst.&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-19-alexa_-_alex_skills_kit_-_skill_information.png|200px]]&lt;br /&gt;
# Die folgende Seite klickst du mit &#039;&#039;Next&#039;&#039; dann weiter&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-20-alexa_-_alex_skills_kit_-_interaction_model.png|200px]]&lt;br /&gt;
# Auf der Seite Configuration gibst du dann unter &#039;&#039;&#039;Authorization URL&#039;&#039;&#039; die Adresse: &amp;lt;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:70%;&amp;quot;&amp;gt;https://www.amazon.com/ap/oa&amp;lt;/source&amp;gt;an, bei &#039;&#039;&#039;Scope&#039;&#039;&#039;: &amp;lt;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:70%;&amp;quot;&amp;gt;profile:user_id&amp;lt;/source&amp;gt; und bei &#039;&#039;&#039;Access Token URI&#039;&#039;&#039;: &amp;lt;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:70%;&amp;quot;&amp;gt;https://api.amazon.com/auth/o2/token&amp;lt;/source&amp;gt;sowie bei &#039;&#039;&#039;Privacy Policy URL&#039;&#039;&#039; die Adresse: &amp;lt;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:70%;&amp;quot;&amp;gt;https://www.amazon.com/gp/help/customer/display.html?nodeId=468496&amp;lt;/source&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Folgende Felder müssen individuell ausgefüllt werden:&amp;lt;br /&amp;gt;* &#039;&#039;Service Endpoint Type&#039;&#039; -&amp;gt; Europe auswählen und im Textfeld den Wert aus Punkt 12 &#039;&#039;&#039;AWS Lambda Funktion anlegen&#039;&#039;&#039; eintragen&amp;lt;br /&amp;gt;* &#039;&#039;Client Id&#039;&#039; -&amp;gt; &#039;&#039;Client Id&#039;&#039; aus Punkt 1. &#039;&#039;&#039;Login with Amazon&#039;&#039;&#039;&amp;lt;br /&amp;gt;* &#039;&#039;Client Secret&#039;&#039; -&amp;gt; &#039;&#039;Client Secret&#039;&#039; aus Punkt 1. &#039;&#039;&#039;Login with Amazon&#039;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-21-alexa_-_alex_skills_kit_-_configuration.png|200px]]&lt;br /&gt;
# &amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-22-alexa_-_alex_skills_kit_-_test.png|200px]]&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNTyp=[g|Info]|RNText=Hier wird beschrieben, wo die &#039;&#039;Alexa Skill Id&#039;&#039; zu finden ist}}&lt;br /&gt;
Zur späteren Verwendung unter Punkt 7 &#039;&#039;&#039;AWS Lambda Funktion anlegen&#039;&#039;&#039; wird noch die Application Id benötigt. An diese kommt man wie folgt:&lt;br /&gt;
# Wähle im Menü den Punkt &#039;&#039;Alexa&#039;&#039; aus&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-03-apps_and_services.png|200px]]&lt;br /&gt;
# Klicke dann &#039;&#039;Get started&#039;&#039; beim Punkt &#039;&#039;Alexa Skills Kit&#039;&#039; an&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-17-alexa_-_alex_skills_kit_-_get_started.png|200px]]&lt;br /&gt;
# Beim vorher angelegten Eintrag auf &#039;&#039;Edit&#039;&#039; klicken&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-23-alexa_-_alex_skills_kit_-_overview.png|200px]]&lt;br /&gt;
# Die Id, die nun oben angezeigt wird, ist die gesuchte &amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-06-configure_triggers2.png|200px]]&lt;br /&gt;
&lt;br /&gt;
=== Alexa Custom Skill anlegen ===&lt;br /&gt;
&#039;&#039;&#039;ACHTUNG:&#039;&#039;&#039; die daten unter &#039;interaction model&#039; unten gelten nur für skill version 0.1.3. ab version 0.1.4 werden die daten im alexa device erzeugt. wie das geht steht hier   {{Link2Forum|Topic=60244|Message=540117|LinkText=im Forum}}.&lt;br /&gt;
&lt;br /&gt;
Für folgende Schritte muss man unter der Adresse http://developer.amazon.com angemeldet sein&lt;br /&gt;
# Anmeldung auswählen&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-01-login2.png|200px]]&lt;br /&gt;
# Anmeldedaten eingeben&amp;lt;br /&amp;gt;[[Datei:Developer.amazon.com-02-userpass2.png|200px]]&lt;br /&gt;
# Wähle im Menü den Punkt &#039;&#039;Alexa&#039;&#039; aus und klicke dann &#039;&#039;Get started&#039;&#039; beim Punkt &#039;&#039;Alexa Skills Kit&#039;&#039;&amp;lt;br /&amp;gt;[[Datei:CustomSkill_1.PNG|400px]]&lt;br /&gt;
# Klicke dann oben rechts auf &#039;&#039;Add a new skill&#039;&#039;&lt;br /&gt;
# Auf der Seite &#039;&#039;&#039;Create a new Alexa Skill&#039;&#039;&#039; werden folgende Optionen gewählt / Informationen eingetragen:&lt;br /&gt;
#:* Skill Type = Custom Interaction Model&lt;br /&gt;
#:* Language = German&lt;br /&gt;
#:* Name: Hier dem Skill einen beliebigen Namen geben. Dieser wird in der Alexa App unter &amp;quot;Meine Skills&amp;quot; angezeigt.&lt;br /&gt;
#:* Invocation Name: Name des Skills, unter dem dieser später gestartet wird. Z.B. &amp;quot;Alexa, starte James&amp;quot;&amp;lt;br /&amp;gt;[[Datei:CustomSkill_2.PNG|400px]]&lt;br /&gt;
# Mit &#039;&#039;Next&#039;&#039; die Seite verlassen.&lt;br /&gt;
# Auf der Seite &#039;&#039;&#039;Interaction Model&#039;&#039;&#039; folgende Eingaben tätigen:&lt;br /&gt;
#:* In die Box &#039;&#039;&#039;Intent Schema&#039;&#039;&#039; den Programmcode aus folgendem Post einfügen: [https://forum.fhem.de/index.php/topic,60244.msg528230.html#msg528230 https://forum.fhem.de/index.php/topic,60244.msg528230.html#msg528230]&amp;lt;br /&amp;gt;[[Datei:CustomSkill_3.PNG|400px]]&lt;br /&gt;
{{Randnotiz|RNTyp=[g|Info]|RNText=Hier wird bereits die Skill ID angezeigt (siehe Screenshot), die später als zusätzlicher Trigger für AWS Lambda verwendet wird. Bitte per Copy / Paste speichern.}}&lt;br /&gt;
:* Nun auf &#039;&#039;Add Slot Type&#039;&#039; klicken und die Custom Slot Types (siehe [https://forum.fhem.de/index.php/topic,60244.msg528230.html#msg528230 https://forum.fhem.de/index.php/topic,60244.msg528230.html#msg528230]) einrichten. Bitte beachten, dass das Pipeline-Zeichen einen Zeilenumbruch darstellen soll. Im Screenshot ist sichtbar, wie das aussehen muss.&amp;lt;br /&amp;gt; Für FHEM_DEVICE und FHEM_ROOM bitte die eigenen in FHEM definierten Devices und Räume benennen (siehe oben alexaName und alexaRoom).&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Datei:CustomSkill_4.PNG|400px]]&amp;lt;br /&amp;gt;&lt;br /&gt;
Der Screenshot zeigt die Einrichtung für FHEM_DEVICE. Nach der Einrichtung von FHEM_DEVICE &#039;&#039;SAVE&#039;&#039; klicken und die weiteren Slot Types (FHEM_ROOM, FHEM_SWITCH_ACTION und FHEM_artikel) jeweils durch klicken auf &#039;&#039;Add Slot Type&#039;&#039; einrichten.&lt;br /&gt;
:* Unter Sample Utterances bitte den Text aus [https://forum.fhem.de/index.php/topic,60244.msg528230.html#msg528230 https://forum.fhem.de/index.php/topic,60244.msg528230.html#msg528230] reinkopieren&amp;lt;br /&amp;gt;[[Datei:CustomSkill_5.PNG|400px]]&lt;br /&gt;
#:* Eingaben mit &#039;&#039;Next&#039;&#039; abschließen.&lt;br /&gt;
# Auf der Folgeseite &#039;&#039;Configuration&#039;&#039; bitte folgende Angaben machen:&lt;br /&gt;
#:* Service Endpoint Type = AWS Lambda&lt;br /&gt;
#:* Geographical Region = Europe&lt;br /&gt;
#:* Im Feld &#039;&#039;Europe&#039;&#039; wird die ARN eingetragen, die man erst in nachfolgenden Abschnitt erhält! Es muss hier also erst mal pausiert werden! Den Browser Tab geöffnet lassen!&lt;br /&gt;
#:* Sobald man die ARN hat geht es hier weiter...&lt;br /&gt;
#:* Do you allow users to create an account or link to an existing account with you? = Yes&lt;br /&gt;
#:* Authorization URL = https://www.amazon.com/ap/oa&lt;br /&gt;
#:* Client ID = Client ID von oben aus &#039;&#039;&#039;Login with Amazon&#039;&#039;&#039;&lt;br /&gt;
#:* Domain List - nichts eingeben&lt;br /&gt;
#:* Scope = profile:user_id&lt;br /&gt;
#:* Redirect URLs - sollten vorbelegt sein&lt;br /&gt;
#:* Authorization Grant Type - Auth Code Grant auswählen&lt;br /&gt;
#:* Access Token URI = https://api.amazon.com/auth/o2/token&lt;br /&gt;
#:* Client Secret = siehe oben bei &#039;&#039;&#039;Login with Amazon&#039;&#039;&#039;&lt;br /&gt;
#:* Client Authentication Scheme = HTTP Basic&lt;br /&gt;
#:* Privacy Policy URL = https://www.amazon.com/gp/help/customer/display.html?nodeId=468496&lt;br /&gt;
#:* Das sollte jetzt alles wie folgt aussehen:&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Datei:CustomSkill_6.PNG|400px]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Datei:CustomSkill_7.PNG|400px]]&amp;lt;br /&amp;gt;&lt;br /&gt;
:* Damit ist die Einrichtung des Custom Skill abgeschlossen. Auf der Folgeseite lässt sich der Skill dann testen. In der Alexa App sollte der Skill nun auch sichtbar sein. Er musshier noch aktiviert werden und die Kontoverknüpfung eingerichtet werden, was selbsterklärend ist.&lt;br /&gt;
&lt;br /&gt;
=== AWS Lambda Funktion anlegen ===&lt;br /&gt;
Für folgende Schritte muss man unter der Adresse http://aws.amazon.com angemeldet sein&lt;br /&gt;
# Anmeldung auswählen&amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-01-site.png|200px]]&lt;br /&gt;
# Anmeldedaten eingeben&amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-02-login.png|200px]]&lt;br /&gt;
# Den Punkt &#039;&#039;Lambda&#039;&#039; links auf der Startseite auswählen&amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-03-lambda.png|200px]]&lt;br /&gt;
# Anschließend den Punkt &#039;&#039;Get Started Now&#039;&#039; auswählen&amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-04-get_started_now.png|200px]]&lt;br /&gt;
# Den Blueprint &#039;&#039;Blank function&#039;&#039; auswählen&amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-05-select_blueprint.png|200px]]&lt;br /&gt;
# Im neuen Fenster dann auf den gestrichelten Kasten klicken und &#039;&#039;Alexa Smart Home&#039;&#039; auswählen und mit &#039;&#039;Next&#039;&#039; bestätigen&amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-06-configure_triggers1.png|200px]]&amp;lt;br /&amp;gt;&#039;&#039;Achtung! Es ist möglich, dass ihr hier &#039;&#039;&#039;Alexa Smart Home&#039;&#039;&#039; überhaupt nicht auswählen könnt. Dann solltet ihr ganz rechts oben in der Ecke mal schauen, welche Region bzw. welches Land ausgewählt ist. Ich empfehle hier &#039;&#039;&#039;Ireland&#039;&#039;&#039; auszuwählen. Dann erscheint bei den Funktionen auch &#039;&#039;&#039;Alexa Smart Home&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
# Bei &#039;&#039;Application Id&#039;&#039; den Wert eintragen, dessen Ermittlung unter &#039;&#039;&#039;Skill Kit einrichten&#039;&#039;&#039; in der zusätzlichen Beschreibung beschrieben wird, den Haken bei &#039;&#039;Enable trigger&#039;&#039; setzen und mit &#039;&#039;Next&#039;&#039; bestätigen &amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-06-configure_triggers3.png|200px]]&lt;br /&gt;
# Auf der Konfigurationsseite bei &#039;&#039;Name&#039;&#039; den Wert FHEM eingeben, bei &#039;&#039;Runtime&#039;&#039; Node.js 4.3. Bei &#039;&#039;Role&#039;&#039; den Wert &#039;&#039;Choose an existing role&#039;&#039; wählen (wenn es noch keine existing role gibt: zuerst Create a custom role -&amp;gt; in dem Popup dann lambda_basic_execution und auf Allow)  und bei &#039;&#039;Existing role&#039;&#039; dann &#039;&#039;x&#039;&#039; wählen. Der Quellcode der Datei lambda.js aus dem Quellpaket wird dann an die Stelle des großen Textfeldes vollständig eingefügt. Dann noch den Hostname im Quellcode an den eigenen anpassen. Anschließend alles mit &#039;&#039;Next&#039;&#039; bestätigen.&amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-07-configure_function.png|200px]]&lt;br /&gt;
# Auf der Übersichtsseite dann &#039;&#039;Create function&#039;&#039; anklicken&amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-08-review.png|200px]]&lt;br /&gt;
# Klicke dann auf der Übersichtsseite oben links auf &#039;&#039;Function&#039;&#039;&amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-09-go_overview.png|200px]]&lt;br /&gt;
# Wähle dann die angelegte Funktion aus und klicke dann im Menü &#039;&#039;Action&#039;&#039; auf den Punkt &#039;&#039;Show ARN&#039;&#039;&amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-10-1-show_arn.png|200px]]&lt;br /&gt;
# Es wird nun eine ARN Adresse angezeigt, die für den Punkt 6 bei &#039;&#039;&#039;Skill Kit einrichten&#039;&#039;&#039; benötigt wird&amp;lt;br /&amp;gt;[[Datei:Aws.amazon.com-10-2-arn.png|200px]]&lt;br /&gt;
&lt;br /&gt;
=== Alexa Skill einrichten ===&lt;br /&gt;
# Auf http://alexa.amazon.de anmelden&lt;br /&gt;
# Auf &#039;&#039;Skills&#039;&#039; klicken&amp;lt;br /&amp;gt;[[Datei:Alexa.amazon.de-01-startseite.png|200px]]&lt;br /&gt;
# Oben rechts &#039;&#039;Meine Skills&#039;&#039;  auswählen&amp;lt;br /&amp;gt;[[Datei:Alexa.amazon.de-03-meine_skills.png|200px]]&lt;br /&gt;
# In der Liste der Skills sollte das angelegte FHEM Skill angezeigt werden. Dieses anklicken&amp;lt;br /&amp;gt;[[Datei:Alexa.amazon.de-02-liste_skills.png|200px]]&lt;br /&gt;
# Oben Rechts in den Details des Skills auf &#039;&#039;Skill aktivieren&#039;&#039; klicken&amp;lt;br /&amp;gt;[[Datei:Alexa.amazon.de-04-skill_details.png|200px]]&lt;br /&gt;
# In dem neu geöffneten Fenster die Authorisierung bestätigen&amp;lt;br /&amp;gt;[[Datei:Alexa.amazon.de-05-amazon_auth.png|200px]]&lt;br /&gt;
# Anschließend sollte die Verbindung erfolgreich aufgebaut worden sein &amp;lt;br /&amp;gt;[[Datei:Alexa.amazon.de-06-success.png|200px]]&lt;br /&gt;
&lt;br /&gt;
=== Geräteeinrichtung ===&lt;br /&gt;
# Auf http://alexa.amazon.de anmelden&lt;br /&gt;
# Auf &#039;&#039;Smart Home&#039;&#039; klicken&amp;lt;br /&amp;gt;[[Datei:Alexa.amazon.de-01-startseite.png|200px]]&lt;br /&gt;
# Anschließend den Punkt &#039;&#039;Geräte suchen&#039;&#039; anklicken&amp;lt;br /&amp;gt;[[Datei:Alexa.amazon.de-07-Gerätesuche.png|200px]]&lt;br /&gt;
# Wurde soweit alles korrekt eingerichtet, werden nun die gefundenen Geräte angezeigt.&lt;br /&gt;
&lt;br /&gt;
Tip: Es macht Sinn, unter &#039;&#039;Meine Gruppen&#039;&#039; Gruppen benannt nach den Räumen einzurichten. Hierdurch kann Alexa die Geräte besser auseinander halten, vor allem wenn die den gleichen Alias (z.B. &amp;quot;Licht&amp;quot;) haben.&lt;br /&gt;
&lt;br /&gt;
== Nutzung ==&lt;br /&gt;
=== Sprachkommandos ===&lt;br /&gt;
Nach erfolgreicher Einrichtung sollte Alexa mit den folgenden Befehlen nutzbar sein:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
“alexa, schalte &amp;lt;gerät/raum&amp;gt; ein”&lt;br /&gt;
“alexa, schalte &amp;lt;gerät/raum&amp;gt; aus”&lt;br /&gt;
“alexa, stelle &amp;lt;gerät/raum&amp;gt; auf &amp;lt;wert&amp;gt; prozent”&lt;br /&gt;
“alexa, stelle &amp;lt;gerät/raum&amp;gt; auf &amp;lt;anzahl&amp;gt; grad”&lt;br /&gt;
“alexa, erhöhe &amp;lt;gerät/raum&amp;gt; um &amp;lt;anzahl&amp;gt; prozent”&lt;br /&gt;
“alexa, reduziere &amp;lt;gerät/raum&amp;gt; um &amp;lt;anzahl&amp;gt; prozent”&lt;br /&gt;
“alexa, erhöhe &amp;lt;gerät/raum&amp;gt; um &amp;lt;anzahl&amp;gt; grad”&lt;br /&gt;
“alexa, reduziere &amp;lt;gerät/raum&amp;gt; um &amp;lt;anzahl&amp;gt; grad”&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Optimierung ===&lt;br /&gt;
Normalerweise wird von Alexa-Fhem der Wert im Feld &#039;&#039;NAME&#039;&#039; verwendet, mit dem ein Gerät angesprochen werden kann via Alexa. Ist ein anderer &amp;quot;Rufname&amp;quot; gewünscht, kann das Feld &#039;&#039;Alias&#039;&#039; gesetzt werden. Der hier gesetzte Wert wird dann als alternativer Name verwendet.&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
&lt;br /&gt;
====Allgemeiner Hinweis====&lt;br /&gt;
Besonders wichtig ist, dass man sich sehr genau an diese Anleitung hält. Ein häufiger Fehler ist, dass die einfachen Anführungszeichen in der Anleitung unter &#039;&#039;&#039;AWS Lambda Funktion anlegen&#039;&#039;&#039; Punkt 8 einfach weggelassen werden. Diese sind zwingend notwendig. Es darf auch nur der reine Hostname eingetragen werden. Also kein &#039;&#039;http://&#039;&#039; davor. Entweder eine feste IP Adresse oder den Hostnamen, um den Rechner zu erreichen, den ihr über den Port 3000 freigegeben habt. Das sollte dann so aussehen:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;width:50%;&amp;quot;&amp;gt;&lt;br /&gt;
const PORT=3000;&lt;br /&gt;
const HOST=&#039;mein.host.name&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Freigabe von Port 3000====&lt;br /&gt;
{{Randnotiz|RNTyp=Fehl|RNText=Derzeit müsst ihr über einen echten IPv4 Anschluss verfügen, damit der Amazon Lambda-Server euch erreichen kann. DS-Lite Anschlüsse wie die von &amp;lt;b&amp;gt;UnityMedia&amp;lt;/b&amp;gt; z.B. funktionieren derzeit leider nicht. Eine möglicher &amp;quot;Workaround&amp;quot; wird hier beschrieben: https://forum.fhem.de/index.php/topic,60244.msg518276.html#msg518276}}&lt;br /&gt;
&lt;br /&gt;
Auf dem Router muss der Port 3000 Protokoll TCP freigegeben werden. D.h. von außen muss man wenn man den Port 3000 aufruft, auf dem intern laufenden node.js Alexa-Dienst zugreifen können.&lt;br /&gt;
Je nach Router gestaltet sich das Portforwarding bzw. die Portumleitung etwas schwieriger.&lt;br /&gt;
&lt;br /&gt;
Bei einem Speedport Router der Telekom beispielsweise, muss der Router komplett neu gestartet werden, wenn die Portfreigabe eingerichtet wurde. &lt;br /&gt;
&lt;br /&gt;
Bei der Fritz!Box ist das nicht nötig, bei dieser finden die Freigabe unter &#039;&#039;Internet -&amp;gt; Freigaben -&amp;gt; Portfreigaben&#039;&#039; statt. Dort wählt man dann den Rechner aus und richtet eine neue Freigabe ein. Wichtig hierbei ist, dass man Portfreigabe auswählt und nicht MyFRITZ!-Freigabe. Bei Port von bis trägt man 3000 ein, bei Port extern ebenfalls.&lt;br /&gt;
&lt;br /&gt;
Um die Portweiterleitung zu testen, solltet ihr euch auch nicht im gleichen Netz befinden. Viele Router blockieren den Netzaufruf aus dem gleichen Netz. Am besten testet ihr es, wenn ihr an eurem Mobiltelefon W-LAN deaktiviert und im Browser folgende Seite aufruft: &#039;&#039;https://mein.hostname:3000&#039;&#039;. Wenn ihr im Browser dann einen Quellcode von Alexa seht, funktioniert die Portumleitung.&lt;br /&gt;
&lt;br /&gt;
Wenn bis hier alles funktioniert und es läuft dennoch nicht rund, liegt das Problem woanders. Kommt z.B. bei der Gerätesuche kein Request rein (sichtbar auf dem Bildschirm, wenn bin/alexa gestartet wurden), kann evtl. der Lambda-Dienst falsch konfiguriert sein.&lt;br /&gt;
&lt;br /&gt;
====Probleme mit node.js - npm install====&lt;br /&gt;
&lt;br /&gt;
Falls eine Fehlermeldung auftritt, dass &amp;quot;npm&amp;quot; nicht gefunden werden kann, bitte NodeJS entsprechend der Anleitung im Homebridge-Artikel vorgehen: [http://www.fhemwiki.de/wiki/Homebridge_einrichten#NodeJS_installieren NodeJS installieren] sowie [http://www.fhemwiki.de/wiki/Homebridge_einrichten#Python.2C_g.2B.2B.2C_MDNS_installieren Python, g++, MDNS installieren], siehe auch folgenden Abschnitt.&lt;br /&gt;
&lt;br /&gt;
====Es kommen diverse Fehlermeldungen beim Starten von alexa-fhem und es beendet sich====&lt;br /&gt;
Wenn man auf der Konsole angemeldet ist, den Befehl&amp;lt;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:50%;&amp;quot;&amp;gt;node -v&amp;lt;/source&amp;gt;eingeben. Ist die Version niedriger als die geforderte 0.12, muss eine neuere installiert werden. Hier darf man dann im Wiki unter http://www.fhemwiki.de/wiki/Homebridge_einrichten#NodeJS_installieren nachschauen. NodeJS V4 sollte hierbei schon ausreichen. Solange die node.js Version nicht passt, gar nicht groß rum experimentieren! Bitte beachtet, dass alle Voraussetzungen unter http://www.fhemwiki.de/wiki/Alexa-Fhem#Voraussetzungen erfüllt sind! Keine Experimente mit Versionen die darunter liegen.&lt;br /&gt;
&lt;br /&gt;
====Fehlermeldung &#039;&#039;NAT-PMP failed: Error: timeout&#039;&#039; Fehler angezeigt beim Start von alexa-fhem====&lt;br /&gt;
Wenn ihr dann alexa-fhem über die Konsole startet und bekommt folgenden Fehler: &#039;&#039;NAT-PMP failed: Error: timeout&#039;&#039;, lasst euch davon nicht irritieren. Das bedeutet lediglich, dass der Port nicht automatich freigegeben wurde über uPNP. Alternativ prüft, ob die Funktion der Portfreigabe via uPNP auf eurem Router aktiviert ist.&lt;br /&gt;
&lt;br /&gt;
====Nach Start auf der Console beendet sich Alexa-FHEM sofort wieder====&lt;br /&gt;
Unmittelbar nach dem Start von Alexa-FHEM werden ein paar UPNP Fehlermeldungen ausgegeben. Unmittelbar danach beendet sich Alexa-FHEM wieder. &lt;br /&gt;
&lt;br /&gt;
Viele scheinen ein Problem mit UPNP auf dem Raspberry Pi zu haben. Wenn dieses Problem auftritt einfach in der &amp;lt;code&amp;gt;~/.alexa/config.json&amp;lt;/code&amp;gt; die folgenden Zeilen rauslöschen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        &amp;quot;nat-pmp&amp;quot;: &amp;quot;10.0.1.1&amp;quot;,&lt;br /&gt;
        &amp;quot;nat-upnp&amp;quot;: true,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt erneut Alexa-FHEM starten. Sollte nun laufen.&lt;br /&gt;
&lt;br /&gt;
====Was ist zu tun, wenn alexa-fhem keine Geräte findet?====&lt;br /&gt;
Zunächst müssen die Geräte, die angesprochen werden wollen, unter FHEM ein neues Attribut zugewiesen bekommen. Dazu das Gerät in FHEM öffnen und das Attribut &#039;&#039;genericDeviceType switch&#039;&#039; hinzufügen, wenn es ein Schalter mit der Funktiona AN/AUS sein soll. Wenn man will, kann man dem Gerät jetzt noch über das Attribut &#039;&#039;alias&#039;&#039; eine besseren Namen geben, mit dem Alexa das Gerät dann auch finden kann.&lt;br /&gt;
Anschließend muss alexa-fhem neu gestartet werden und die definierten Geräte sollten nun gefunden werden.&lt;br /&gt;
&lt;br /&gt;
====Was ist zu tun, wenn Alexa zwar Geräte findet, diese aber nicht angesprochen werden können?====&lt;br /&gt;
Zuerst die Informationen zum Datenfluss ganz oben ansehen. Dann am besten von hinten nach vorne vorgehen:&lt;br /&gt;
* wenn nichts bei alexa-fhem ankommt: port forwarding prüfen&lt;br /&gt;
* wenn lambda.js nichts los wird: im cloudwatch log nachsehen&lt;br /&gt;
* wenn bei lambda.js nichts ankommt: den trigger prüfen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zunächst sollte man sich unter &#039;&#039;http://aws.amazon.com&#039;&#039; das Logfile seiner erstellten Funktion anschauen. Ist überhaupt ein Logfile vorhanden? Falls nicht, liegt es vermutlich am Trigger.&lt;br /&gt;
Den solltet ihr überprüfen. Scheinbar kommt es hin und wieder vor, dass dieser nicht gesetzt ist. Dazu einfach auf &#039;&#039;Triggers&#039;&#039; klicken und mit &#039;&#039;Add trigger&#039;&#039; erneut einen anlegen. Hier muss, wie in der Anleitung unter &#039;&#039;&#039;AWS Lambda Funktion anlegen&#039;&#039;&#039; Punkt 7, die &#039;&#039;Application Id&#039;&#039; stehen und der Haken bei &#039;&#039;Enable trigger&#039;&#039; gesetzt sein. Dann alexa-fhem neu starten.&lt;br /&gt;
Wenn ihr Änderugen gemacht habt und den alexa-fhem Dienst noch nicht neu gestartet habt, wäre jetzt der richtige Zeitpunkt.&lt;br /&gt;
&lt;br /&gt;
====Was ist zu tun, wenn sich der Alexa-Service nicht starten lässt?====&lt;br /&gt;
Schaut bitte in das Unterverzeichnis [alexa-fhem (also dort, wo Ihr Alexa-FHEM instelliert habt]/bin. Die dort befindliche Datei &#039;&#039;alexa&#039;&#039; muss ausführbar sein. Also z.B. so:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:70%;&amp;quot;&amp;gt;2755327 4 -rwxr-xr-x 1 pi pi  339 Nov 26 23:20 alexa&amp;lt;/source&amp;gt;&lt;br /&gt;
Sollte dies nicht der Fall sein bitte mit:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot; style=&amp;quot;width:70%;&amp;quot;&amp;gt;chmod +x alexa&amp;lt;/source&amp;gt;&lt;br /&gt;
die Datei ausführbar machen. Sofern der User &amp;quot;pi&amp;quot; Eigentümer ist, ist kein sudo erforderlich.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=PanStamp_RGBWW_Board_mit_DMX_und_IR&amp;diff=12609</id>
		<title>PanStamp RGBWW Board mit DMX und IR</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=PanStamp_RGBWW_Board_mit_DMX_und_IR&amp;diff=12609"/>
		<updated>2015-10-21T21:09:35Z</updated>

		<summary type="html">&lt;p&gt;Fidel: /* IR-Belegung Panstamp RGB-Board TBC */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle}}&lt;br /&gt;
{{SEITENTITEL:panStamp RGBWW Board mit DMX und IR}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Hardware&lt;br /&gt;
|Bild=panStampRGBv1.0.jpg&lt;br /&gt;
|Bildbeschreibung=RGBWW Board&lt;br /&gt;
|HWProtocol=SWAP&lt;br /&gt;
|HWType=Sender, Empfänger, Sensor, [[Interface]]&lt;br /&gt;
|HWCategory=&lt;br /&gt;
|HWComm=868MHz&lt;br /&gt;
|HWChannels=&lt;br /&gt;
|HWVoltage=12V&lt;br /&gt;
|HWPowerConsumption=&lt;br /&gt;
|HWPoweredBy=Netzteil&lt;br /&gt;
|HWSize=&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#SWAP_0000002200000003 35_SWAP_0000002200000003.pm] [http://fhem.de/commandref.html#SWAP 34_SWAP.pm]&lt;br /&gt;
|ModOwner=[http://forum.fhem.de/index.php?action=profile;u=430 Andre / justme1968]&lt;br /&gt;
|HWManufacturer=panStamp&lt;br /&gt;
}}&lt;br /&gt;
[[panStamp RGBWW Board mit DMX und IR]] unterstützt RGBW LEDs und lässt sich per Infrarot Fernbedienung, DMX Controller (z.B. als Unterputz Touchpanel) und FHEM bedienen.&lt;br /&gt;
Es ist eine Hard- und Softwareentwicklung auf Basis von panStamp Modulen und verwendet zusätzlich das FHEM Modul [[SWAP 0000002200000003]] als 3. Ebene&lt;br /&gt;
&lt;br /&gt;
Der Funktionsumfang wird in diesem {{Link2Forum|Topic=12487|Message=81923|LinkText=Forenthread}} vorgestellt. Die Hardware für das Board wird {{Link2Forum|Topic=13890|LinkText=hier}} im FHEM Forum vorgestellt und ein Prototyp ist {{Link2Forum|Topic=12487|Message=85777|LinkText=hier}} zu sehen.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Die Projektseite zur Hardware findet sich [http://itse.homeip.net/projekte/12/6/ hier]. Eine Version 2 des Boards in geplant. &lt;br /&gt;
&lt;br /&gt;
=== Kompatibilität RBG-Board mit NRG-panStamps ===&lt;br /&gt;
Mit dem hier beschriebenen Sketch ist das Board nur mit den panStamp AVRs kompatibel. Die Pinbelegung zwischen AVR und NRG ist im Prinzip gleich bis auf Pin 23. Das ist bei dem NRG ein IO Pin und nicht GND wie beim AVR. Das wäre kein Problem wenn man entweder hardwareseitig den Kontakt unterbricht oder aber programmiertechnisch diesen Pin &#039;&#039;&#039;NIE&#039;&#039;&#039; als Ausgang definiert. Ansonsten gibt’s einen „kurzen“. Oder wenn er als Ausgang definiert ist darf er nur das GND Potential haben, also Low, 0. {{Link2Forum|Topic=13890 |Message=247069}}&lt;br /&gt;
&lt;br /&gt;
Da es derzeit (Stand 01.05.2015) aber keinen Sketch gibt, der auf den NRG lauffähig ist, wäre vorher noch diese Herausforderung zu lösen.&lt;br /&gt;
&lt;br /&gt;
=== Eigenschaften des fade TBC ===&lt;br /&gt;
Der wichtige Punkt ist das das RGBWW-Board Farbübergänge autonom macht und FHEM nur den Trigger zum starten und Rückmeldung über den Status gibt. d.h. wie ruckelfrei das faden ist hängt nicht von äußeren Bedingungen wie Funklast, FHEM timing oder FHEM Auslastung ab. Im Board gibt es 15 &#039;&#039;&#039;Register&#039;&#039;&#039; die jeweils eine Farbe und eine Anzeigedauer enthalten. Diese werden (ein mal) von FHEM aus programmiert. Zum starten wird dann nur noch das Anfangs- und das Endregister gesendet und das Board überblendet zwischen allen Farben der Register zwischen Anfang und Ende in der eingestellten Zeit.&lt;br /&gt;
Die eigentliche Einschränkung ist das die aktuelle AVR Version der panstamps &#039;&#039;nur&#039;&#039; 8bit pwm kann (jedenfalls wenn es 3 oder mehr Kanäle sein sollen und die Hardware PWM genutzt wird). Wenn dir diese 256 Stufen pro Grundfarbe reichen ist es absolut Ruckelfrei. d.h. es gibt keinen zeitlichen Jitter. Ob dir die Anzahl der Helligkeitsstufen reicht hängt ein wenig von den LEDs selber ab und davon zwischen welchen Farben du konkret wechselst. Im dunklen Bereich wirst du vermutlich stufen sehen (also beim aufblenden von dunkel zu hell). wenn du zwischen zwei hellen Farben (z.b. von rot nach grün) blendest wirst du keine stufen sehen. {{Link2Forum|Topic=13890|Message=106644}}&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Eine Übersicht über die derzeit vorhandene Funktionalität des [[SWAP_0000002200000003|Fhem Moduls]] und panStamp Sketches (Stand 01.05.2015):&lt;br /&gt;
{{Link2Forum|Topic=13890 |Message=1205404}}&lt;br /&gt;
was geht:&lt;br /&gt;
* Bis zu vier LED Kanäle (je nach Kombination von ir und soft PWM)&lt;br /&gt;
* Ir senden&lt;br /&gt;
* Ir empfangen&lt;br /&gt;
* Messen ob die LED Versorgungsspannung an ist&lt;br /&gt;
* Helligkeit eines an Pin &amp;lt;code&amp;gt;A2&amp;lt;/code&amp;gt; angeschlossenen Helligkeitssensors (LDR)&lt;br /&gt;
* Konfiguration der DMX Basisadresse über das SWAP Register &amp;lt;code&amp;gt;0x12&amp;lt;/code&amp;gt;&lt;br /&gt;
* Optional soft on auf letzten RGBW Wert&lt;br /&gt;
* Alles was auch vorher schon ging: dimmen, faden, ir fernbedienungen anlernen, ...&lt;br /&gt;
&lt;br /&gt;
wichtig zu wissen:&lt;br /&gt;
* Wenn ir aktiv ist und kein soft PWM lässt sich der 4. Kanal nur ein und aus schalten&lt;br /&gt;
* Wenn ir aktiv ist muss soft PWM aktiv sein um den 4. Kanal auch zu dimmen&lt;br /&gt;
* Es wird nur ein zusätzlicher LED Kanal tatsächlich schon unterstützt. Der fünfte kommt noch&lt;br /&gt;
* Bei ir senden sind nur die Aufrufe für Sony und NEC tatsächlich eingebaut. Die Anderen sind aber einfach zu ergänzen&lt;br /&gt;
* Beim ir senden sind noch keine Wiederholungen eingebaut. Die müssen laut Protokoll aber eigentlich sein&lt;br /&gt;
&lt;br /&gt;
was noch kommt:&lt;br /&gt;
* besseres soft PWM&lt;br /&gt;
* mehr Konfiguration bezüglich default verhalten. ramp zeiten, delays, ...&lt;br /&gt;
* hsv Farbmodell um besser zu faden und vor allem um den Weißanteil automatisch auf die weißen LEDs zu legen&lt;br /&gt;
* die virtuellen channel &lt;br /&gt;
* fhem kompatibles ir senden&lt;br /&gt;
* sofortiges senden von Helligkeit und LED Spannung bei Änderung&lt;br /&gt;
* andere ir lib mit sehr viel besserer Geräte Unterstützung&lt;br /&gt;
&lt;br /&gt;
wie gehabt muss alles über &amp;lt;code&amp;gt;config.h&amp;lt;/code&amp;gt; mit Compilerschalter konfiguriert werden.&lt;br /&gt;
&lt;br /&gt;
=== Arduino IDE 1.5 / 1.6 einrichten ===&lt;br /&gt;
Mit der Arduino IDE 1.5.x gab es zusätzlich eine [http://www.panstamp.com/news/panstamp-is-now-fully-arduino-1-5-enabled/ grundlegende Umstellungen der Arduino SWAP Library], für die der derzeitige Sketch [r4716] angepasst werden muss. Der Sketch ist nur kompatibel zur alten SWAP Library, die unter [[panStamp_Programmierung#Arduino_IDE_1.0.x_vorbereiten|Arduino IDE 1.0 installiert]] werden muss (Stand 01.05.2015).&lt;br /&gt;
&lt;br /&gt;
=== Arduino IDE 1.0 einrichten ===&lt;br /&gt;
Zum Flashen der panStamps wird die [[panStamp_Programmierung#Arduino_IDE_1.0.x_vorbereiten|Arduino IDE 1.0.x benötigt]]. Für den RGBWW-Sketch sind je nach gewünschtem Funktionsumfang noch folgende libs zu installieren:&lt;br /&gt;
&lt;br /&gt;
* Die Dateien der &#039;&#039;&#039;Panstamp Lib&#039;&#039;&#039; läd man von hier [[http://old.panstamp.com/downloads]] (panstamp_library.zip, 129k v.25, May 31, 2013). Mit der neueren Lib v.4 läuft die Kompillierung des derzeitigen Sketches nicht durch. Die Dateien der Lib speichert man in einem entsprechend neuen  Unterordner, z.B. hierin &amp;lt;code&amp;gt;C:\Users\&amp;lt;username&amp;gt;\Documents\Arduino\libraries&amp;lt;/code&amp;gt;. Am Ende der ganzen Aktion sollten sich in diesem Unterordner 3 neue Unterordner befinden: &amp;lt;code&amp;gt;IRremote, DMXSerial und panstamp&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Die Dateien der &#039;&#039;&#039;IR Remote Lib&#039;&#039;&#039; kopiert man von hier [[https://github.com/shirriff/Arduino-IRremote]] und speichert sie ebenfalls in einem passenden Unterordner von &amp;lt;code&amp;gt;libraries&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Die Dateien der &#039;&#039;&#039;DMX Lib&#039;&#039;&#039; kopiert man von hier [[http://www.mathertel.de/Arduino/DMXSerial.aspx]] und speichert sie ein weiteres Mal in einem weiteren Unterordner von &amp;lt;code&amp;gt;libraries&amp;lt;/code&amp;gt;. Weitere Informationen zur Verwendung von Arduino Librarys finden sich hier [[http://arduino.cc/en/Hacking/Libraries]]. Dass die Librarys richtig erkannt worden sind, lässt sich dadurch erkennen, dass unter dem Menüpunkt &amp;lt;code&amp;gt;Sketch/Library importieren&amp;lt;/code&amp;gt; die 3 weiteren Punkte unten unter &amp;lt;code&amp;gt;beigetragen&amp;lt;/code&amp;gt; auftauchen.&lt;br /&gt;
&lt;br /&gt;
Die Librarys sollten entweder mit dem entsprechenden Menüpunkt in die IDE integriert werden oder jeweils nach auspacken des zip files als als kompletten Ordner im Arduino &amp;lt;code&amp;gt;libraries&amp;lt;/code&amp;gt; Verzeichnis abgelegt werden (siehe [http://www.arduino.cc/en/Hacking/Libraries)]).&lt;br /&gt;
* Windows IDE only: Falls alles so bleibt, wie es heruntergeladen wurde, wechselt man wieder auf den Reiter Sketch und importiert über -&amp;gt;Sketch Library importieren die entsprechenden Libs für IRremote und DMX. Dadurch werden 3 neue Zeilen hinzugefügt.&lt;br /&gt;
* Nun sollte über Sketch/Überprüften/Kompillieren die Erstellung des Sketches möglich sein.&lt;br /&gt;
* Falls erfolgreich unter Datei/Hochladen (ohne Programmer) den Sketch auf den Panstamp laden.&lt;br /&gt;
&lt;br /&gt;
Für das kompilieren mit INO siehe [[panStamp_Programmierung#INO|hier]].&lt;br /&gt;
&lt;br /&gt;
=== Link zum Sketch ===&lt;br /&gt;
Die aktuelle Version des RGBWW-Driver Sketches findet sich auf [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ sourceforge]. {{Link2Forum|Topic=13890 |Message=201391}}&lt;br /&gt;
Dieser muss in &amp;lt;code&amp;gt;Arduino\libraries\panstamp\examples\sketches&amp;lt;/code&amp;gt; entpackt und die &amp;lt;code&amp;gt;rbgdriver.ino&amp;lt;/code&amp;gt; gestartet werden. In der Arduino IDE sollte unter Tools-&amp;gt;Board &amp;quot;Arduino Pro or Pro Mini (3.3V, 8MHz) w/ Atmega328&amp;quot; eingestellt sein. Wenn man das boards.txt file von [http://code.google.com/p/panstamp/downloads/detail?name=boards.txt&amp;amp;can=2&amp;amp;q= hier] installiert kann man in der IDE auch direkt panStamp als Plattform auswählen.&lt;br /&gt;
&lt;br /&gt;
==== Kompillierte hex version ====&lt;br /&gt;
Eine kompiliertes HEX-File für drei (vier) Kanäle plus IR-Empfang und DMX ist hier im Forum zu finden: {{Link2Forum|Topic=13890 |Message=121619}}&lt;br /&gt;
&lt;br /&gt;
==== HEX-File ohne IR und DMX ====&lt;br /&gt;
Eine kompiliertes HEX-File ohne IR-Empfang und DMX ist hier im Forum zu finden: {{Link2Forum|Topic=13890 |Message=201955}}&lt;br /&gt;
&lt;br /&gt;
=== Compilerschalter ===&lt;br /&gt;
Welche Features der sketch bietet lässt sich im &amp;lt;code&amp;gt;config.h&amp;lt;/code&amp;gt; file durch ein- oder auskommentieren der &amp;lt;code&amp;gt;#define ENABLE_...&amp;lt;/code&amp;gt; Zeilen festlegen. {{Link2Forum|Topic=13890 |Message=173431}}&lt;br /&gt;
&lt;br /&gt;
==== #define ENABLE_DMX ====&lt;br /&gt;
 #define ENABLE_DMX&lt;br /&gt;
Ermöglicht die Nutzung eines DMX RGB Einstellers zur Steuerung der RGB LEDs&lt;br /&gt;
&lt;br /&gt;
Hierbei ist darauf zu achten, dass in der DMX-Lib in der Datei &amp;lt;code&amp;gt;DMXSerial.h&amp;lt;/code&amp;gt; die Zeile&lt;br /&gt;
 #define DmxModePin 2     // Arduino pin 2 for controlling the data direction&lt;br /&gt;
in &lt;br /&gt;
 #define DmxModePin 7     // Arduino pin 7 for controlling the data direction&lt;br /&gt;
abgeändert werden muss.&lt;br /&gt;
&lt;br /&gt;
==== #define HAS_SENSOR ====&lt;br /&gt;
  #define HAS_SENSOR&lt;br /&gt;
Ermöglicht die Nutzung eines DHT22 Sensors zur Auswertung von Temperatur und Luftfeuchtigkeit&lt;br /&gt;
Dafür sollten diese Konfigurationszeilen auskommentiert sein:&lt;br /&gt;
  USE_SOFT_PWM;&lt;br /&gt;
  ENABLE_IR_SEND;&lt;br /&gt;
  ENABLE_REPEATER;&lt;br /&gt;
&lt;br /&gt;
In der &amp;lt;code&amp;gt;IRremote.cpp&amp;lt;/code&amp;gt; Datei in der Irremote Library muss die Zeile&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void IRrecv::disableIRIn() &lt;br /&gt;
{&lt;br /&gt;
TIMER_DISABLE_INTR;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sowie die &amp;lt;code&amp;gt;Irremote.h&amp;lt;/code&amp;gt; Datei unter &amp;lt;code&amp;gt;Public:&amp;lt;/code&amp;gt; um die Zeile &lt;br /&gt;
 void disableIRIn();&lt;br /&gt;
erweitert werden.&lt;br /&gt;
&lt;br /&gt;
Der Daten-Pin des DHT22 Sensors muss hierfür an Pin &amp;lt;code&amp;gt;A2&amp;lt;/code&amp;gt; des panStamps angeschlossen werden.&lt;br /&gt;
Ein Beispiel für die Umrechnung der userReading für Spannung Temp etc. ist hier beschrieben: {{Link2Forum|Topic=12487 |Message=76489}}&lt;br /&gt;
&lt;br /&gt;
=== Zusammenhänge der Konfiguration ===&lt;br /&gt;
Die Zusammenhänge der Konfiguration sind hier beschrieben {{Link2Forum|Topic=13890 |Message=175181}}&lt;br /&gt;
&lt;br /&gt;
=== 4. und 5. LED Kanal TBC ===&lt;br /&gt;
http://forum.fhem.de/index.php?topic=13890.msg169741#msg169741&lt;br /&gt;
http://forum.fhem.de/index.php?topic=13890.msg192132#msg192132&lt;br /&gt;
http://forum.fhem.de/index.php?topic=13890.msg201922#msg201922&lt;br /&gt;
http://forum.fhem.de/index.php?topic=13890.msg201936#msg201936&lt;br /&gt;
&lt;br /&gt;
=== Alternativer Fade per Patch ===&lt;br /&gt;
Als Alternative zum im Sketch und im Modul eingebauten Fade-Befehl ist hier ein Patch vorgestellt:&lt;br /&gt;
{{Link2Forum|Topic=12487 |Message=133096}} &lt;br /&gt;
[http://forum.fhem.de/index.php/topic,12487.msg133096.html#msg133096]&lt;br /&gt;
&lt;br /&gt;
Der Patch ist &#039;&#039;&#039;nicht eingecheckt&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== IR Schnittstelle TBC ==&lt;br /&gt;
=== IR TBC ===&lt;br /&gt;
http://forum.fhem.de/index.php?topic=13890.msg107061#msg107061&lt;br /&gt;
http://forum.fhem.de/index.php?topic=13890.msg107197#msg107197&lt;br /&gt;
http://forum.fhem.de/index.php?topic=13890.msg107415#msg107415&lt;br /&gt;
http://forum.fhem.de/index.php/topic,13890.msg122021.html#msg122021&lt;br /&gt;
http://forum.fhem.de/index.php/topic,13890.msg122077.html#msg122077&lt;br /&gt;
http://forum.fhem.de/index.php?topic=13890.msg167351#msg167351&lt;br /&gt;
http://forum.fhem.de/index.php?topic=13890.msg175269#msg175269&lt;br /&gt;
http://forum.fhem.de/index.php?topic=13890.msg175285#msg175285&lt;br /&gt;
http://forum.fhem.de/index.php?topic=13890.msg182582#msg182582&lt;br /&gt;
http://forum.fhem.de/index.php?topic=13890.msg245597#msg245597&lt;br /&gt;
http://forum.fhem.de/index.php?topic=13890.msg259267#msg259267&lt;br /&gt;
&lt;br /&gt;
=== IR-Belegung Panstamp RGB-Board TBC ===&lt;br /&gt;
http://forum.fhem.de/index.php/topic,13890.msg163008.html#msg163008&lt;br /&gt;
http://forum.fhem.de/index.php/topic,13890.msg163153.html#msg163153&lt;br /&gt;
&lt;br /&gt;
Es gibt Unterschiede in der Pinbelegung zwischen dem Panstamp rgbdriver Board und dem rgbdriver Board aus dem fhem Forum.&lt;br /&gt;
&lt;br /&gt;
Original Panstamp rgbdriver Board:&lt;br /&gt;
Der IR Empfänger läuft auf Pin D0 des PanstampAVR auf.&lt;br /&gt;
&lt;br /&gt;
Panstamp rgbdriver Board aus dem Forum:&lt;br /&gt;
Der IR Empfänger läuft auf Pin A0 des PanstampAVR auf.&lt;br /&gt;
&lt;br /&gt;
Im Sketch sollte die folgende Zeile demnach angepasst werden:&lt;br /&gt;
# define IR_RECV_PIN  0 //Orginal Board 0; fhem Board A0&lt;br /&gt;
&lt;br /&gt;
=== Ircluster TBC ===&lt;br /&gt;
http://forum.fhem.de/index.php?topic=13890.msg175331#msg175331&lt;br /&gt;
&lt;br /&gt;
=== Irgate TBC ===&lt;br /&gt;
http://forum.fhem.de/index.php?topic=13890.msg175278#msg175278&lt;br /&gt;
&lt;br /&gt;
== DMX Schnittstelle ==&lt;br /&gt;
Da die DMX-Schrittstelle kein direktes Interface zu FHEM hat, sondern nur die direkte Kommunikation zwischen DMX-Kontroller und RGB-Board betrifft, ist die Schnittstelle nur bei der Konfiguration des Sketches und über die Dokumentation des Boards beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.panstamp.com/home panStamp] panStamp Hersteller&lt;br /&gt;
* [http://itse.homeip.net/projekte/12/6/ Projektseite] für das RGB-Multi-Board.&lt;br /&gt;
* [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ rgbdriver sketch] auf sourceforge&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:panStamp]]&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SmartVISU/ical&amp;diff=10807</id>
		<title>SmartVISU/ical</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SmartVISU/ical&amp;diff=10807"/>
		<updated>2015-04-03T20:17:59Z</updated>

		<summary type="html">&lt;p&gt;Fidel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Um einen Kalender in [[SmartVisu]] mit dem Widget widget_ical einzubinden, ist folgendes zu tun:&lt;br /&gt;
&lt;br /&gt;
* Die Datei iCalcreator.class.php aus dem Paket http://kigkonsult.se/downloads/index.php#iCalcreator unter einem beliebigen Pfad ablegen, der aber in der ical.php eingetragen werden muss.&lt;br /&gt;
* Ablegen der Datei ical.php in das Verzeichnis /smartVISU/lib/calendar/service  &lt;br /&gt;
* Ablegen der Datei widget_ical.html in das Homeverzeichnis der eigenen Seite z.b. /smartVISU/pages/fhem&lt;br /&gt;
* Definition der Kalender findet in den Settings statt. Die Kalender werden wie folgt definiert:&lt;br /&gt;
: - wie bisher nur die Url&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://xxx:xxx@xxx.xxx.xxx.xxx/davical/caldav.php/norbert/calendar&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: - die Url mit Parameter Farbe und Icon&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://xxx:xxx@xxx.xxx.xxx.xxx/davical/caldav.php/norbert/calendar(Default Farbe,Default Icon)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: - die Url mit Parameter Farbe&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://xxx:xxx@xxx.xxx.xxx.xxx/davical/caldav.php/norbert/calendar(Default Farbe)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: - die Url mit Parameter Icon&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://xxx:xxx@xxx.xxx.xxx.xxx/davical/caldav.php/norbert/calendar(,Default Icon)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: - zwei Kalenderurls mit unterschiedlichen Parametern&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://xxx:xxx@xxx.xxx.xxx.xxx/davical/caldav.php/norbert/calendar(,message_garbage);http://xxx:xxx@xxx.xxx.xxx.xxx/davical/caldav.php/norbert/Geburtstage(#ff69b4,scene_party)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: - eine lokale Url&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;file:/tmp/calendar.ics&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: - zwei Kalenderurls eine lokale und eine auf einem Caldav/Webserver&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;file:/tmp/calendar.ics(,message_garbage);http://xxx:xxx@xxx.xxx.xxx.xxx/davical/caldav.php/norbert/Geburtstage(#ff69b4,scene_party)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;    &lt;br /&gt;
: Die Icons sind die Namen der png-Dateien ohne .png. Wenn keine Parameter, für Farbe und Icon mitgegeben werden und auch keine in den Terminen hinterlegt sind,     wird ein Standardicon und eine Standardfarbe gesetzt. Das setzen dieser Parameter pro Termin erfolgt im Beschreibungsfeld des jeweiligen Termin.&lt;br /&gt;
:Bei allen abgelegten Dateien muss auf die Rechte geachtet werden. Es sollten die gleichen User/Group-Rechte verwendet werden, wie auch bei den Dateien im pages Ordner.&lt;br /&gt;
* Einbinden es Kalenders auf einer SV-Seite:&lt;br /&gt;
: &amp;lt;code&amp;gt;{% import &amp;quot;widget_ical.html&amp;quot; as calendar %}&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{ calendar.list(&#039;calendarlist&#039;, &#039;Termine&#039;, 6, 21) }}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Die erste Zahl (6) ist die Anzahl der Termine die aufgelistet werden. Die zweite Zahl (21) ist die Anzahl der Tage, die im Kalender in die Zukunft geprüft wird, ob sich ein Termin wiederholt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Quelle und Download benötigter Dateien: {{Link2Forum|Topic=35831}}&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SmartVISU/ical&amp;diff=10806</id>
		<title>SmartVISU/ical</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SmartVISU/ical&amp;diff=10806"/>
		<updated>2015-04-03T20:17:18Z</updated>

		<summary type="html">&lt;p&gt;Fidel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Um einen Kalender in [[SmartVisu]] mit dem Widget widget_ical einzubinden, ist folgendes zu tun:&lt;br /&gt;
&lt;br /&gt;
* Die Datei iCalcreator.class.php aus dem Paket http://kigkonsult.se/downloads/index.php#iCalcreator unter einem beliebigen Pfad ablegen, der aber in der ical.php eingetragen werden muss.&lt;br /&gt;
* Ablegen der Datei ical.php in das Verzeichnis /smartVISU/lib/calendar/service  &lt;br /&gt;
* Ablegen der Datei widget_ical.html in das Homeverzeichnis der eigenen Seite z.b. /smartVISU/pages/fhem&lt;br /&gt;
* Definition der Kalender findet in den Settings statt. Die Kalender werden wie folgt definiert:&lt;br /&gt;
: - wie bisher nur die Url&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://xxx:xxx@xxx.xxx.xxx.xxx/davical/caldav.php/norbert/calendar&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: - die Url mit Parameter Farbe und Icon&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://xxx:xxx@xxx.xxx.xxx.xxx/davical/caldav.php/norbert/calendar(Default Farbe,Default Icon)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: - die Url mit Parameter Farbe&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://xxx:xxx@xxx.xxx.xxx.xxx/davical/caldav.php/norbert/calendar(Default Farbe)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: - die Url mit Parameter Icon&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://xxx:xxx@xxx.xxx.xxx.xxx/davical/caldav.php/norbert/calendar(,Default Icon)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: - zwei Kalenderurls mit unterschiedlichen Parametern&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://xxx:xxx@xxx.xxx.xxx.xxx/davical/caldav.php/norbert/calendar(,message_garbage);http://xxx:xxx@xxx.xxx.xxx.xxx/davical/caldav.php/norbert/Geburtstage(#ff69b4,scene_party)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: - eine lokale Url&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;file:/tmp/calendar.ics&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: - zwei Kalenderurls eine lokale und eine auf einem Caldav/Webserver&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;file:/tmp/calendar.ics(,message_garbage);http://xxx:xxx@xxx.xxx.xxx.xxx/davical/caldav.php/norbert/Geburtstage(#ff69b4,scene_party)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;    &lt;br /&gt;
: Die Icons sind die Namen der png-Dateien ohne .png. Wenn keine Parameter, für Farbe und Icon mitgegeben werden und auch keine in den Terminen hinterlegt sind,     wird ein Standardicon und eine Standardfarbe gesetzt. Das setzen dieser Parameter pro Termin erfolgt im Beschreibungsfeld des jeweiligen Termin.&lt;br /&gt;
Bei allen abgelegten Dateien muss auf die Rechte geachtet werden. Es sollten die gleichen User/Group-Rechte verwendet werden, wie auch bei den Dateien im pages Ordner.&lt;br /&gt;
* Einbinden es Kalenders auf einer SV-Seite:&lt;br /&gt;
: &amp;lt;code&amp;gt;{% import &amp;quot;widget_ical.html&amp;quot; as calendar %}&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{ calendar.list(&#039;calendarlist&#039;, &#039;Termine&#039;, 6, 21) }}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Die erste Zahl (6) ist die Anzahl der Termine die aufgelistet werden. Die zweite Zahl (21) ist die Anzahl der Tage, die im Kalender in die Zukunft geprüft wird, ob sich ein Termin wiederholt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Quelle und Download benötigter Dateien: {{Link2Forum|Topic=35831}}&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=10799</id>
		<title>Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=10799"/>
		<updated>2015-04-03T17:04:23Z</updated>

		<summary type="html">&lt;p&gt;Fidel: &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. (im Moment aber inaktiviert!)&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;
&lt;br /&gt;
==Universelle ZeitSchaltUhr UZSU==&lt;br /&gt;
Es existiert ein Widget für eine universelle ZeitSchaltUhr auf GitHub unter https://github.com/mworion/uzsu_widget .&lt;br /&gt;
&lt;br /&gt;
Hierbei bitte die Version 2.0 des UZSU Widgets verwenden oder das UZSU Widget aus https://github.com/herrmannj/smartvisu-widgets beziehen&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 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 (für ein Ergebnis 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 an das Reading uzsu des zu schaltenden Device read und write in fhem&lt;br /&gt;
&lt;br /&gt;
3. folgenden Code in der 99_FronthemUtils.pm:&lt;br /&gt;
&lt;br /&gt;
Im Package Main:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
use JSON;&lt;br /&gt;
&lt;br /&gt;
###############################################################################&lt;br /&gt;
#&lt;br /&gt;
# Umsetzen der UZSU-Settings für ein device&lt;br /&gt;
#&lt;br /&gt;
###############################################################################&lt;br /&gt;
sub UZSU_execute($$)&lt;br /&gt;
{&lt;br /&gt;
  my ($device, $uzsu) = @_;&lt;br /&gt;
  &lt;br /&gt;
  $uzsu = decode_json($uzsu);&lt;br /&gt;
  fhem(&#039;delete wdt_&#039;.$device.&#039;_uzsu&#039;);&lt;br /&gt;
  my $weekdays_part = &amp;quot; &amp;quot;;&lt;br /&gt;
  for(my $i=0; $i &amp;lt; @{$uzsu-&amp;gt;{list}}; $i++) {&lt;br /&gt;
      my $weekdays = $uzsu-&amp;gt;{list}[$i]-&amp;gt;{rrule};&lt;br /&gt;
      $weekdays = substr($weekdays,18,50);  &lt;br /&gt;
      if (($uzsu-&amp;gt;{list}[$i]-&amp;gt;{active})) {&lt;br /&gt;
          $weekdays_part = $weekdays_part.&#039; &#039;.$weekdays.&#039;|&#039;.$uzsu-&amp;gt;{list}[$i]-&amp;gt;{time}.&#039;|&#039;.$uzsu-&amp;gt;{list}[$i]-&amp;gt;{value};&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
  fhem(&#039;define wdt_&#039;.$device.&#039;_uzsu&#039;.&#039; WeekdayTimer &#039;.$device.&#039; en &#039;.$weekdays_part);&lt;br /&gt;
  if ($uzsu-&amp;gt;{active}){    &lt;br /&gt;
     fhem(&#039;attr wdt_&#039;.$device.&#039;_uzsu disable 0&#039;);&lt;br /&gt;
  } else {&lt;br /&gt;
     fhem(&#039;attr wdt_&#039;.$device.&#039;_uzsu disable 1&#039;);&lt;br /&gt;
  }    &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Package fronthem, selbe Datei:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
use JSON;&lt;br /&gt;
&lt;br /&gt;
###############################################################################&lt;br /&gt;
#&lt;br /&gt;
# Setreading a device reading using JSON conversion (gadval =&amp;gt; reading=decode_json() =&amp;gt; setval =&amp;gt; encode_json(reading) )&lt;br /&gt;
#&lt;br /&gt;
###############################################################################&lt;br /&gt;
&lt;br /&gt;
sub UZSU(@)&lt;br /&gt;
{&lt;br /&gt;
  my ($param) = @_;&lt;br /&gt;
  my $cmd = $param-&amp;gt;{cmd};&lt;br /&gt;
  my $gad = $param-&amp;gt;{gad};&lt;br /&gt;
  my $gadval = $param-&amp;gt;{gadval};&lt;br /&gt;
&lt;br /&gt;
  my $device = $param-&amp;gt;{device};&lt;br /&gt;
  my $reading = $param-&amp;gt;{reading};&lt;br /&gt;
  my $event = $param-&amp;gt;{event};&lt;br /&gt;
  &lt;br /&gt;
  my @args = @{$param-&amp;gt;{args}};&lt;br /&gt;
  my $cache = $param-&amp;gt;{cache};&lt;br /&gt;
&lt;br /&gt;
  if ($param-&amp;gt;{cmd} eq &#039;get&#039;)&lt;br /&gt;
  {&lt;br /&gt;
    $param-&amp;gt;{cmd} = &#039;send&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  if ($param-&amp;gt;{cmd} eq &#039;send&#039;)&lt;br /&gt;
  {&lt;br /&gt;
    $param-&amp;gt;{gad} = $gad;&lt;br /&gt;
	$param-&amp;gt;{gadval} = decode_json(main::ReadingsVal($device, $reading, &#039;&#039;));&lt;br /&gt;
	$param-&amp;gt;{gads} = [];&lt;br /&gt;
    return undef;&lt;br /&gt;
  }&lt;br /&gt;
  elsif ($param-&amp;gt;{cmd} eq &#039;rcv&#039;)&lt;br /&gt;
  {&lt;br /&gt;
	$gadval = encode_json($gadval);&lt;br /&gt;
	$gadval =~ s/;/;;/ig;&lt;br /&gt;
	$param-&amp;gt;{result} = main::fhem(&amp;quot;setreading $device $reading $gadval&amp;quot;);&lt;br /&gt;
	$param-&amp;gt;{results} = [];&lt;br /&gt;
    return &#039;done&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  elsif ($param-&amp;gt;{cmd} eq &#039;?&#039;)&lt;br /&gt;
  {&lt;br /&gt;
    return &#039;usage: UZSU&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&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;
Voila!&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: FHEM Frontends]]&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=10793</id>
		<title>Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=10793"/>
		<updated>2015-04-03T15:37:53Z</updated>

		<summary type="html">&lt;p&gt;Fidel: &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. (im Moment aber inaktiviert!)&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;
&lt;br /&gt;
==Universelle ZeitSchaltUhr UZSU==&lt;br /&gt;
Es existiert ein Widget für eine universelle ZeitSchaltUhr auf GitHub unter https://github.com/mworion/uzsu_widget .&lt;br /&gt;
&lt;br /&gt;
Hierbei bitte die Version 2.0 des UZSU Widgets verwenden oder das UZSU Widget aus https://github.com/herrmannj/smartvisu-widgets beziehen&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 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 (für ein Ergebnis 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 an das Reading uzsu des zu schaltenden Device read und write in fhem&lt;br /&gt;
&lt;br /&gt;
3. folgenden Code in der 99_FronthemUtils.pm:&lt;br /&gt;
&lt;br /&gt;
Im Package Main:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
use JSON;&lt;br /&gt;
&lt;br /&gt;
###############################################################################&lt;br /&gt;
#&lt;br /&gt;
# Umsetzen der UZSU-Settings für ein device&lt;br /&gt;
#&lt;br /&gt;
###############################################################################&lt;br /&gt;
sub UZSU_execute($$)&lt;br /&gt;
{&lt;br /&gt;
  my ($device, $uzsu) = @_;&lt;br /&gt;
  &lt;br /&gt;
  $uzsu = decode_json($uzsu);&lt;br /&gt;
  fhem(&#039;delete wdt_&#039;.$device.&#039;_uzsu&#039;);&lt;br /&gt;
  my $weekdays_part = &amp;quot; &amp;quot;;&lt;br /&gt;
  for(my $i=0; $i &amp;lt; @{$uzsu-&amp;gt;{list}}; $i++) {&lt;br /&gt;
      my $weekdays = $uzsu-&amp;gt;{list}[$i]-&amp;gt;{rrule};&lt;br /&gt;
      $weekdays = substr($weekdays,18,50);  &lt;br /&gt;
      if (($uzsu-&amp;gt;{list}[$i]-&amp;gt;{active})) {&lt;br /&gt;
          $weekdays_part = $weekdays_part.&#039; &#039;.$weekdays.&#039;|&#039;.$uzsu-&amp;gt;{list}[$i]-&amp;gt;{time}.&#039;|&#039;.$uzsu-&amp;gt;{list}[$i]-&amp;gt;{value};&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
  fhem(&#039;define wdt_&#039;.$device.&#039;_uzsu&#039;.&#039; WeekdayTimer &#039;.$device.&#039; en &#039;.$weekdays_part);&lt;br /&gt;
  if ($uzsu-&amp;gt;{active}){    &lt;br /&gt;
     fhem(&#039;attr wdt_&#039;.$device.&#039;_uzsu disable 0&#039;);&lt;br /&gt;
  } else {&lt;br /&gt;
     fhem(&#039;attr wdt_&#039;.$device.&#039;_uzsu disable 1&#039;);&lt;br /&gt;
  }    &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Package fronthem, selbe Datei:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
use JSON;&lt;br /&gt;
&lt;br /&gt;
###############################################################################&lt;br /&gt;
#&lt;br /&gt;
# Setreading a device reading using JSON conversion (gadval =&amp;gt; reading=decode_json() =&amp;gt; setval =&amp;gt; encode_json(reading) )&lt;br /&gt;
#&lt;br /&gt;
###############################################################################&lt;br /&gt;
&lt;br /&gt;
sub UZSU(@)&lt;br /&gt;
{&lt;br /&gt;
  my ($param) = @_;&lt;br /&gt;
  my $cmd = $param-&amp;gt;{cmd};&lt;br /&gt;
  my $gad = $param-&amp;gt;{gad};&lt;br /&gt;
  my $gadval = $param-&amp;gt;{gadval};&lt;br /&gt;
&lt;br /&gt;
  my $device = $param-&amp;gt;{device};&lt;br /&gt;
  my $reading = $param-&amp;gt;{reading};&lt;br /&gt;
  my $event = $param-&amp;gt;{event};&lt;br /&gt;
  &lt;br /&gt;
  my @args = @{$param-&amp;gt;{args}};&lt;br /&gt;
  my $cache = $param-&amp;gt;{cache};&lt;br /&gt;
&lt;br /&gt;
  if ($param-&amp;gt;{cmd} eq &#039;get&#039;)&lt;br /&gt;
  {&lt;br /&gt;
    $param-&amp;gt;{cmd} = &#039;send&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  if ($param-&amp;gt;{cmd} eq &#039;send&#039;)&lt;br /&gt;
  {&lt;br /&gt;
    $param-&amp;gt;{gad} = $gad;&lt;br /&gt;
	$param-&amp;gt;{gadval} = decode_json(main::ReadingsVal($device, $reading, &#039;&#039;));&lt;br /&gt;
	$param-&amp;gt;{gads} = [];&lt;br /&gt;
    return undef;&lt;br /&gt;
  }&lt;br /&gt;
  elsif ($param-&amp;gt;{cmd} eq &#039;rcv&#039;)&lt;br /&gt;
  {&lt;br /&gt;
	$gadval = encode_json($gadval);&lt;br /&gt;
	$gadval =~ s/;/;;/ig;&lt;br /&gt;
	$param-&amp;gt;{result} = main::fhem(&amp;quot;setreading $device $reading $gadval&amp;quot;);&lt;br /&gt;
	$param-&amp;gt;{results} = [];&lt;br /&gt;
    return &#039;done&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  elsif ($param-&amp;gt;{cmd} eq &#039;?&#039;)&lt;br /&gt;
  {&lt;br /&gt;
    return &#039;usage: UZSU&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&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;
Voila!&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: FHEM Frontends]]&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=10792</id>
		<title>Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=10792"/>
		<updated>2015-04-03T15:37:00Z</updated>

		<summary type="html">&lt;p&gt;Fidel: &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. (im Moment aber inaktiviert!)&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;
&lt;br /&gt;
==Universelle ZeitSchaltUhr UZSU==&lt;br /&gt;
Es existiert ein Widget für eine universelle ZeitSchaltUhr auf GitHub unter https://github.com/mworion/uzsu_widget .&lt;br /&gt;
&lt;br /&gt;
Hierbei bitte die Version 2.0 des UZSU Widgets verwenden oder das UZSU Widget aus https://github.com/herrmannj/smartvisu-widgets beziehen&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 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 (für ein Ergebnis 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 an das Reading uzsu des zu schaltenden Device read und write in fhem&lt;br /&gt;
&lt;br /&gt;
3. folgenden Code in der 99_FronthemUtils.pm:&lt;br /&gt;
&lt;br /&gt;
Im Package Main:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
use JSON;&lt;br /&gt;
&lt;br /&gt;
###############################################################################&lt;br /&gt;
#&lt;br /&gt;
# Umsetzen der UZSU-Settings für ein device&lt;br /&gt;
#&lt;br /&gt;
###############################################################################&lt;br /&gt;
sub UZSU_execute($$)&lt;br /&gt;
{&lt;br /&gt;
  my ($device, $uzsu) = @_;&lt;br /&gt;
  &lt;br /&gt;
  $uzsu = decode_json($uzsu);&lt;br /&gt;
  fhem(&#039;delete wdt_&#039;.$device.&#039;_uzsu&#039;);&lt;br /&gt;
  my $weekdays_part = &amp;quot; &amp;quot;;&lt;br /&gt;
  for(my $i=0; $i &amp;lt; @{$uzsu-&amp;gt;{list}}; $i++) {&lt;br /&gt;
      my $weekdays = $uzsu-&amp;gt;{list}[$i]-&amp;gt;{rrule};&lt;br /&gt;
      $weekdays = substr($weekdays,18,50);  &lt;br /&gt;
      if (($uzsu-&amp;gt;{list}[$i]-&amp;gt;{active})) {&lt;br /&gt;
          $weekdays_part = $weekdays_part.&#039; &#039;.$weekdays.&#039;|&#039;.$uzsu-&amp;gt;{list}[$i]-&amp;gt;{time}.&#039;|&#039;.$uzsu-&amp;gt;{list}[$i]-&amp;gt;{value};&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
  fhem(&#039;define wdt_&#039;.$device.&#039;_uzsu&#039;.&#039; WeekdayTimer &#039;.$device.&#039; en &#039;.$weekdays_part);&lt;br /&gt;
  if ($uzsu-&amp;gt;{active}){    &lt;br /&gt;
     fhem(&#039;attr wdt_&#039;.$device.&#039;_uzsu disable 0&#039;);&lt;br /&gt;
  } else {&lt;br /&gt;
     fhem(&#039;attr wdt_&#039;.$device.&#039;_uzsu disable 1&#039;);&lt;br /&gt;
  }    &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Package fronthem, selbe Datei:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
use JSON;&lt;br /&gt;
&lt;br /&gt;
###############################################################################&lt;br /&gt;
#&lt;br /&gt;
# Setreading a device reading using JSON conversion (gadval =&amp;gt; reading=decode_json() =&amp;gt; setval =&amp;gt; encode_json(reading) )&lt;br /&gt;
#&lt;br /&gt;
###############################################################################&lt;br /&gt;
&lt;br /&gt;
sub UZSU(@)&lt;br /&gt;
{&lt;br /&gt;
  my ($param) = @_;&lt;br /&gt;
  my $cmd = $param-&amp;gt;{cmd};&lt;br /&gt;
  my $gad = $param-&amp;gt;{gad};&lt;br /&gt;
  my $gadval = $param-&amp;gt;{gadval};&lt;br /&gt;
&lt;br /&gt;
  my $device = $param-&amp;gt;{device};&lt;br /&gt;
  my $reading = $param-&amp;gt;{reading};&lt;br /&gt;
  my $event = $param-&amp;gt;{event};&lt;br /&gt;
  &lt;br /&gt;
  my @args = @{$param-&amp;gt;{args}};&lt;br /&gt;
  my $cache = $param-&amp;gt;{cache};&lt;br /&gt;
&lt;br /&gt;
  if ($param-&amp;gt;{cmd} eq &#039;get&#039;)&lt;br /&gt;
  {&lt;br /&gt;
    $param-&amp;gt;{cmd} = &#039;send&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  if ($param-&amp;gt;{cmd} eq &#039;send&#039;)&lt;br /&gt;
  {&lt;br /&gt;
    $param-&amp;gt;{gad} = $gad;&lt;br /&gt;
	$param-&amp;gt;{gadval} = decode_json(main::ReadingsVal($device, $reading, &#039;&#039;));&lt;br /&gt;
	$param-&amp;gt;{gads} = [];&lt;br /&gt;
    return undef;&lt;br /&gt;
  }&lt;br /&gt;
  elsif ($param-&amp;gt;{cmd} eq &#039;rcv&#039;)&lt;br /&gt;
  {&lt;br /&gt;
	$gadval = encode_json($gadval);&lt;br /&gt;
	$gadval =~ s/;/;;/ig;&lt;br /&gt;
	$param-&amp;gt;{result} = main::fhem(&amp;quot;setreading $device $reading $gadval&amp;quot;);&lt;br /&gt;
	$param-&amp;gt;{results} = [];&lt;br /&gt;
    return &#039;done&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  elsif ($param-&amp;gt;{cmd} eq &#039;?&#039;)&lt;br /&gt;
  {&lt;br /&gt;
    return &#039;usage: UZSU&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&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;
Voila!&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: FHEM Frontends]]&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SmartVISU&amp;diff=10791</id>
		<title>SmartVISU</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SmartVISU&amp;diff=10791"/>
		<updated>2015-04-03T15:34:27Z</updated>

		<summary type="html">&lt;p&gt;Fidel: /* Widgets: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SmartVisu ist ein Framework zur Visualisierung von Hausautomationssystemen, die eigentlich KNX-Installationen bedient.&lt;br /&gt;
&lt;br /&gt;
Durch [[Fronthem]] ist es möglich SmartVisu an Fhem anzubinden.&lt;br /&gt;
&lt;br /&gt;
* Ausführliche Beschreibung von Fronthem: [[Fronthem]]&lt;br /&gt;
* Installationsanleitung für SmartVisu in Verbindung mit Fronthem: [[Installation Fronthem]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Codebeispiele:&lt;br /&gt;
&lt;br /&gt;
* [[SmartVisu/IconHighlights in Menus]]&lt;br /&gt;
* [[SmartVisu/lichtSzene]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Widgets:==&lt;br /&gt;
&lt;br /&gt;
zusätzliche Widgets werden im git-Repository /smartvisu-widgets breitgestellt &lt;br /&gt;
https://github.com/herrmannj/smartvisu-widgets&lt;br /&gt;
&lt;br /&gt;
*ical &lt;br /&gt;
[[SmartVisu/ical]] &lt;br /&gt;
*fritz!box_via_TR-064 &lt;br /&gt;
[[SmartVisu/fritz!box_via_TR-064]] &lt;br /&gt;
*fritz!box_v6.20&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: FHEM Frontends]]&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SmartVISU&amp;diff=10790</id>
		<title>SmartVISU</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SmartVISU&amp;diff=10790"/>
		<updated>2015-04-03T15:30:35Z</updated>

		<summary type="html">&lt;p&gt;Fidel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SmartVisu ist ein Framework zur Visualisierung von Hausautomationssystemen, die eigentlich KNX-Installationen bedient.&lt;br /&gt;
&lt;br /&gt;
Durch [[Fronthem]] ist es möglich SmartVisu an Fhem anzubinden.&lt;br /&gt;
&lt;br /&gt;
* Ausführliche Beschreibung von Fronthem: [[Fronthem]]&lt;br /&gt;
* Installationsanleitung für SmartVisu in Verbindung mit Fronthem: [[Installation Fronthem]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Codebeispiele:&lt;br /&gt;
&lt;br /&gt;
* [[SmartVisu/IconHighlights in Menus]]&lt;br /&gt;
* [[SmartVisu/lichtSzene]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Widgets:==&lt;br /&gt;
&lt;br /&gt;
zusätzliche Widgets werden im git-Repository /smartvisu-widgets breitgestellt&lt;br /&gt;
&lt;br /&gt;
*ical &lt;br /&gt;
[[SmartVisu/ical]] &lt;br /&gt;
*fritz!box_via_TR-064 &lt;br /&gt;
[[SmartVisu/fritz!box_via_TR-064]] &lt;br /&gt;
*fritz!box_v6.20&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: FHEM Frontends]]&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SmartVISU&amp;diff=10789</id>
		<title>SmartVISU</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SmartVISU&amp;diff=10789"/>
		<updated>2015-04-03T15:29:01Z</updated>

		<summary type="html">&lt;p&gt;Fidel: /* Widgets: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SmartVisu ist ein Framework zur Visualisierung von Hausautomationssystemen, die eigentlich KNX-Installationen bedient.&lt;br /&gt;
&lt;br /&gt;
Durch [[Fronthem]] ist es möglich SmartVisu an Fhem anzubinden.&lt;br /&gt;
&lt;br /&gt;
* Ausführliche Beschreibung von Fronthem: [[Fronthem]]&lt;br /&gt;
* Installationsanleitung für SmartVisu in Verbindung mit Fronthem: [[Installation Fronthem]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Codebeispiele:&lt;br /&gt;
&lt;br /&gt;
* [[SmartVisu/IconHighlights in Menus]]&lt;br /&gt;
* [[SmartVisu/lichtSzene]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Widgets:==&lt;br /&gt;
&lt;br /&gt;
zusätzliche Widgets werden im git-Repository /smartvisu-widgets breitgestellt&lt;br /&gt;
&lt;br /&gt;
*ical http://www.fhemwiki.de/wiki/SmartVisu/ical&lt;br /&gt;
*fritz!box_via_TR-064 &lt;br /&gt;
http://www.fhemwiki.de/wiki/SmartVisu/fritz!box_via_TR-064&lt;br /&gt;
*fritz!box_v6.20&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: FHEM Frontends]]&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SmartVISU/fritz!box_via_TR-064&amp;diff=10788</id>
		<title>SmartVISU/fritz!box via TR-064</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SmartVISU/fritz!box_via_TR-064&amp;diff=10788"/>
		<updated>2015-04-03T15:28:00Z</updated>

		<summary type="html">&lt;p&gt;Fidel: Die Seite wurde neu angelegt: „ ==fritz!box_via_TR-064==  (unter phoneservice/lib/phone/service)   Dieses Widget verwendet TR-064 zum Auslesen der Anruferliste. Es ist ein Protokoll das nahe…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==fritz!box_via_TR-064==&lt;br /&gt;
&lt;br /&gt;
(unter phoneservice/lib/phone/service) &lt;br /&gt;
&lt;br /&gt;
Dieses Widget verwendet TR-064 zum Auslesen der Anruferliste. Es ist ein Protokoll das nahe am UPnP Standard ist (SOAP).&lt;br /&gt;
Getestet habe ich es mit den FritzOS Versionen 6.03 und 6.20.&lt;br /&gt;
Dieses Widget wird unter der Smartvisu-Config Seite ausgewählt und es muss gegebenenfalls Benutzer und Passwort der Fritzbox in SmartViu angegeben werden.&lt;br /&gt;
Wichtig dabei ist, dass in der Fritzbox unter -&amp;gt;Heimnetz-&amp;gt;Netzwerk-&amp;gt;Netzwerkeinstellungen-&amp;gt;Zugriff für Anwendungen zulassen altiviert ist.&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SmartVISU&amp;diff=10787</id>
		<title>SmartVISU</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SmartVISU&amp;diff=10787"/>
		<updated>2015-04-03T15:27:51Z</updated>

		<summary type="html">&lt;p&gt;Fidel: /* Widgets: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SmartVisu ist ein Framework zur Visualisierung von Hausautomationssystemen, die eigentlich KNX-Installationen bedient.&lt;br /&gt;
&lt;br /&gt;
Durch [[Fronthem]] ist es möglich SmartVisu an Fhem anzubinden.&lt;br /&gt;
&lt;br /&gt;
* Ausführliche Beschreibung von Fronthem: [[Fronthem]]&lt;br /&gt;
* Installationsanleitung für SmartVisu in Verbindung mit Fronthem: [[Installation Fronthem]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Codebeispiele:&lt;br /&gt;
&lt;br /&gt;
* [[SmartVisu/IconHighlights in Menus]]&lt;br /&gt;
* [[SmartVisu/lichtSzene]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Widgets:==&lt;br /&gt;
&lt;br /&gt;
zusätzliche Widgets werden im git-Repository /smartvisu-widgets breitgestellt&lt;br /&gt;
&lt;br /&gt;
*ical http://www.fhemwiki.de/wiki/SmartVisu/ical&lt;br /&gt;
&lt;br /&gt;
*fritz!box_via_TR-064 &lt;br /&gt;
http://www.fhemwiki.de/wiki/SmartVisu/fritz!box_via_TR-064&lt;br /&gt;
&lt;br /&gt;
*fritz!box_v6.20&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: FHEM Frontends]]&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SmartVISU/ical&amp;diff=10786</id>
		<title>SmartVISU/ical</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SmartVISU/ical&amp;diff=10786"/>
		<updated>2015-04-03T15:22:52Z</updated>

		<summary type="html">&lt;p&gt;Fidel: Die Seite wurde neu angelegt: „Um einen Kalender in SV mit dem Widget widget_ical einzubinden, ist folgendes zu tun:  1. Die Datei iCalcreator.class.php aus dem Paket http://kigkonsult.se/do…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Um einen Kalender in SV mit dem Widget widget_ical einzubinden, ist folgendes zu tun:&lt;br /&gt;
&lt;br /&gt;
1. Die Datei iCalcreator.class.php aus dem Paket http://kigkonsult.se/downloads/index.php#iCalcreator&lt;br /&gt;
    unter einem beliebigen Pfad abgelegt werden, der aber in der ical.php eingetragen werden muss.&lt;br /&gt;
    Dabei muss auf die Rechte der Datei geachtet werden. Es sollten die gleichen User/Group-Rechte verwendet werden,&lt;br /&gt;
    wie auch bei den Dateien im pages Ordner&lt;br /&gt;
    &lt;br /&gt;
2. Ablegen der Datei ical.php in das Verzeichnis /smartVISU/lib/calendar/service&lt;br /&gt;
&lt;br /&gt;
3. Ablegen der Datei widget_ical.html in das Homeverzeichnis der eigenen Seite z.b. /smartVISU/pages/fhem&lt;br /&gt;
&lt;br /&gt;
4. Definition der Kalender in den Settings statt. Die Kalender werden wie folgt definiert:&lt;br /&gt;
      - wie bisher nur die Url&lt;br /&gt;
            http://xxx:xxx@xxx.xxx.xxx.xxx/davical/caldav.php/norbert/calendar&lt;br /&gt;
      - die Url mit Parameter Farbe und Icon&lt;br /&gt;
            http://xxx:xxx@xxx.xxx.xxx.xxx/davical/caldav.php/norbert/calendar(Default Farbe,Default Icon)&lt;br /&gt;
      - die Url mit Parameter Farbe&lt;br /&gt;
            http://xxx:xxx@xxx.xxx.xxx.xxx/davical/caldav.php/norbert/calendar(Default Farbe)&lt;br /&gt;
      - die Url mit Parameter Icon&lt;br /&gt;
            http://xxx:xxx@xxx.xxx.xxx.xxx/davical/caldav.php/norbert/calendar(,Default Icon)&lt;br /&gt;
      - zwei Kalenderurls mit unterschiedlichen Parametern&lt;br /&gt;
           http://xxx:xxx@xxx.xxx.xxx.xxx/davical/caldav.php/norbert/calendar(,message_garbage);http://xxx:xxx@xxx.xxx.xxx.xxx/davical/caldav.php/norbert/Geburtstage(#ff69b4,scene_party)&lt;br /&gt;
              - eine lokale Url&lt;br /&gt;
           file:/tmp/calendar.ics&lt;br /&gt;
      - zwei Kalenderurls eine lokale und eine auf einem Caldav/Webserver&lt;br /&gt;
           file:/tmp/calendar.ics(,message_garbage);http://xxx:xxx@xxx.xxx.xxx.xxx/davical/caldav.php/norbert/Geburtstage(#ff69b4,scene_party)&lt;br /&gt;
      &lt;br /&gt;
      Wird eine lokale Datei verwendet, muss auf die Rechte der Datei geachtet werden. Es sollten die gleichen User/Group-Rechte verwendet werden,&lt;br /&gt;
      wie auch bei den Dateien im pages Ordner&lt;br /&gt;
      &lt;br /&gt;
      Die Icons sind die Namen der png-Dateien ohne .png. Wenn keine Parameter, für Farbe und Icon mitgegeben werden und auch keine in den Terminen hinterlegt sind,&lt;br /&gt;
      wird ein Standardicon und eine Standardfarbe gesetzt. Das setzen dieser Parameter pro Termin erfolgt im Beschreibungsfeld des jeweiligen Termin.&lt;br /&gt;
      &lt;br /&gt;
5.  Einbinden es Kalenders auf einer SV-Seite:&lt;br /&gt;
    {% import &amp;quot;widget_ical.html&amp;quot; as calendar %}&lt;br /&gt;
    {{ calendar.list(&#039;calendarlist&#039;, &#039;Termine&#039;, 6, 21) }}&lt;br /&gt;
    Die erste Zahl (6) ist die Anzahl der Termine die aufgelistet werden. Die zweite Zahl (21) ist die Anzahl der Tage, die&lt;br /&gt;
    im Kalender in die Zukunft geprüft wird, ob sich ein Termin wiederholt.&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SmartVISU&amp;diff=10785</id>
		<title>SmartVISU</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SmartVISU&amp;diff=10785"/>
		<updated>2015-04-03T15:19:45Z</updated>

		<summary type="html">&lt;p&gt;Fidel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SmartVisu ist ein Framework zur Visualisierung von Hausautomationssystemen, die eigentlich KNX-Installationen bedient.&lt;br /&gt;
&lt;br /&gt;
Durch [[Fronthem]] ist es möglich SmartVisu an Fhem anzubinden.&lt;br /&gt;
&lt;br /&gt;
* Ausführliche Beschreibung von Fronthem: [[Fronthem]]&lt;br /&gt;
* Installationsanleitung für SmartVisu in Verbindung mit Fronthem: [[Installation Fronthem]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Codebeispiele:&lt;br /&gt;
&lt;br /&gt;
* [[SmartVisu/IconHighlights in Menus]]&lt;br /&gt;
* [[SmartVisu/lichtSzene]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Widgets:==&lt;br /&gt;
&lt;br /&gt;
zusätzliche Widgets werden im git-Repository /smartvisu-widgets breitgestellt&lt;br /&gt;
&lt;br /&gt;
*fritz!box_via_TR-064 (unter phoneservice/lib/phone/service) &lt;br /&gt;
&lt;br /&gt;
Dieses Widget verwendet TR-064 zum Auslesen der Anruferliste. Es ist ein Protokoll das nahe am UPnP Standard ist (SOAP).&lt;br /&gt;
Getestet habe ich es mit den FritzOS Versionen 6.03 und 6.20.&lt;br /&gt;
Dieses Widget wird unter der Smartvisu-Config Seite ausgewählt und es muss gegebenenfalls Benutzer und Passwort der Fritzbox in SmartViu angegeben werden.&lt;br /&gt;
Wichtig dabei ist, dass in der Fritzbox unter -&amp;gt;Heimnetz-&amp;gt;Netzwerk-&amp;gt;Netzwerkeinstellungen-&amp;gt;Zugriff für Anwendungen zulassen altiviert ist.&lt;br /&gt;
&lt;br /&gt;
*fritz!box_v6.20&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: FHEM Frontends]]&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SmartVISU&amp;diff=10784</id>
		<title>SmartVISU</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SmartVISU&amp;diff=10784"/>
		<updated>2015-04-03T15:15:45Z</updated>

		<summary type="html">&lt;p&gt;Fidel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SmartVisu ist ein Framework zur Visualisierung von Hausautomationssystemen, die eigentlich KNX-Installationen bedient.&lt;br /&gt;
&lt;br /&gt;
Durch [[Fronthem]] ist es möglich SmartVisu an Fhem anzubinden.&lt;br /&gt;
&lt;br /&gt;
* Ausführliche Beschreibung von Fronthem: [[Fronthem]]&lt;br /&gt;
* Installationsanleitung für SmartVisu in Verbindung mit Fronthem: [[Installation Fronthem]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Codebeispiele:&lt;br /&gt;
&lt;br /&gt;
* [[SmartVisu/IconHighlights in Menus]]&lt;br /&gt;
* [[SmartVisu/lichtSzene]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Widgets:==&lt;br /&gt;
&lt;br /&gt;
==zusätzliche Widgets werden im git-Repository /smartvisu-widgets breitgestellt==&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
*&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
==Widgets die die Config-Seite betreffen liegen bereits im git-Repository smartvisu-cleaninstall==&lt;br /&gt;
&lt;br /&gt;
*fritz!box_via_TR-064&lt;br /&gt;
Dieses Widget verwendet TR-064 zum Auslesen der Anruferliste. Es ist ein Protokoll das nahe am UPnP Standard ist (SOAP).&lt;br /&gt;
Getestet habe ich es mit den FritzOS Versionen 6.03 und 6.20.&lt;br /&gt;
Dieses Widget wird unter der Smartvisu-Config Seite ausgewählt und es muss gegebenenfalls Benutzer und Passwort der Fritzbox in SmartViu angegeben werden.&lt;br /&gt;
Wichtig dabei ist, dass in der Fritzbox unter -&amp;gt;Heimnetz-&amp;gt;Netzwerk-&amp;gt;Netzwerkeinstellungen-&amp;gt;Zugriff für Anwendungen zulassen altiviert ist.&lt;br /&gt;
&lt;br /&gt;
*fritz!box_v6.20&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: FHEM Frontends]]&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=10596</id>
		<title>Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=10596"/>
		<updated>2015-03-22T13:06:43Z</updated>

		<summary type="html">&lt;p&gt;Fidel: /* Universelle ZeitSchaltUhr UZSU */&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 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. (im Moment aber inaktiviert!)&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;
&lt;br /&gt;
==Universelle ZeitSchaltUhr UZSU==&lt;br /&gt;
Es existiert ein Widget für eine universelle ZeitSchaltUhr auf GitHub unter https://github.com/mworion/uzsu_widget .&lt;br /&gt;
&lt;br /&gt;
Hierbei bitte die Version 2.0 des UZSU Widgets verwenden oder das UZSU Widget aus https://github.com/herrmannj/smartvisu-widgets beziehen&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 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 (für ein Ergebnis 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 an das Reading uzsu des zu schaltenden Device read und write in fhem&lt;br /&gt;
&lt;br /&gt;
3. folgenden Code in der 99_FronthemUtils.pm:&lt;br /&gt;
&lt;br /&gt;
Im Package Main:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
use JSON;&lt;br /&gt;
&lt;br /&gt;
###############################################################################&lt;br /&gt;
#&lt;br /&gt;
# Umsetzen der UZSU-Settings für ein device&lt;br /&gt;
#&lt;br /&gt;
###############################################################################&lt;br /&gt;
sub UZSU_execute($$)&lt;br /&gt;
{&lt;br /&gt;
  my ($device, $uzsu) = @_;&lt;br /&gt;
  &lt;br /&gt;
  $uzsu = decode_json($uzsu);&lt;br /&gt;
  fhem(&#039;delete wdt_&#039;.$device.&#039;_uzsu&#039;);&lt;br /&gt;
  my $weekdays_part = &amp;quot; &amp;quot;;&lt;br /&gt;
  for(my $i=0; $i &amp;lt; @{$uzsu-&amp;gt;{list}}; $i++) {&lt;br /&gt;
      my $weekdays = $uzsu-&amp;gt;{list}[$i]-&amp;gt;{rrule};&lt;br /&gt;
      $weekdays = substr($weekdays,18,50);  &lt;br /&gt;
      if (($uzsu-&amp;gt;{list}[$i]-&amp;gt;{active})) {&lt;br /&gt;
          $weekdays_part = $weekdays_part.&#039; &#039;.$weekdays.&#039;|&#039;.$uzsu-&amp;gt;{list}[$i]-&amp;gt;{time}.&#039;|&#039;.$uzsu-&amp;gt;{list}[$i]-&amp;gt;{value};&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
  fhem(&#039;define wdt_&#039;.$device.&#039;_uzsu&#039;.&#039; WeekdayTimer &#039;.$device.&#039; en &#039;.$weekdays_part);&lt;br /&gt;
  if ($uzsu-&amp;gt;{active}){    &lt;br /&gt;
     fhem(&#039;attr wdt_&#039;.$device.&#039;_uzsu disable 0&#039;);&lt;br /&gt;
  } else {&lt;br /&gt;
     fhem(&#039;attr wdt_&#039;.$device.&#039;_uzsu disable 1&#039;);&lt;br /&gt;
  }    &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Package fronthem, selbe Datei:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
use JSON;&lt;br /&gt;
&lt;br /&gt;
###############################################################################&lt;br /&gt;
#&lt;br /&gt;
# Setreading a device reading using JSON conversion (gadval =&amp;gt; reading=decode_json() =&amp;gt; setval =&amp;gt; encode_json(reading) )&lt;br /&gt;
#&lt;br /&gt;
###############################################################################&lt;br /&gt;
&lt;br /&gt;
sub UZSU(@)&lt;br /&gt;
{&lt;br /&gt;
  my ($param) = @_;&lt;br /&gt;
  my $cmd = $param-&amp;gt;{cmd};&lt;br /&gt;
  my $gad = $param-&amp;gt;{gad};&lt;br /&gt;
  my $gadval = $param-&amp;gt;{gadval};&lt;br /&gt;
&lt;br /&gt;
  my $device = $param-&amp;gt;{device};&lt;br /&gt;
  my $reading = $param-&amp;gt;{reading};&lt;br /&gt;
  my $event = $param-&amp;gt;{event};&lt;br /&gt;
  &lt;br /&gt;
  my @args = @{$param-&amp;gt;{args}};&lt;br /&gt;
  my $cache = $param-&amp;gt;{cache};&lt;br /&gt;
&lt;br /&gt;
  if ($param-&amp;gt;{cmd} eq &#039;get&#039;)&lt;br /&gt;
  {&lt;br /&gt;
    $param-&amp;gt;{cmd} = &#039;send&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  if ($param-&amp;gt;{cmd} eq &#039;send&#039;)&lt;br /&gt;
  {&lt;br /&gt;
    $param-&amp;gt;{gad} = $gad;&lt;br /&gt;
	$param-&amp;gt;{gadval} = decode_json(main::ReadingsVal($device, $reading, &#039;&#039;));&lt;br /&gt;
	$param-&amp;gt;{gads} = [];&lt;br /&gt;
    return undef;&lt;br /&gt;
  }&lt;br /&gt;
  elsif ($param-&amp;gt;{cmd} eq &#039;rcv&#039;)&lt;br /&gt;
  {&lt;br /&gt;
	$gadval = encode_json($gadval);&lt;br /&gt;
	$gadval =~ s/;/;;/ig;&lt;br /&gt;
	$param-&amp;gt;{result} = main::fhem(&amp;quot;setreading $device $reading $gadval&amp;quot;);&lt;br /&gt;
	$param-&amp;gt;{results} = [];&lt;br /&gt;
    return &#039;done&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  elsif ($param-&amp;gt;{cmd} eq &#039;?&#039;)&lt;br /&gt;
  {&lt;br /&gt;
    return &#039;usage: UZSU&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&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;
Voila!&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=10595</id>
		<title>Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=10595"/>
		<updated>2015-03-22T13:06:11Z</updated>

		<summary type="html">&lt;p&gt;Fidel: /* Universelle ZeitSchaltUhr UZSU */&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 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. (im Moment aber inaktiviert!)&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;
&lt;br /&gt;
==Universelle ZeitSchaltUhr UZSU==&lt;br /&gt;
Es existiert ein Widget für eine universelle ZeitSchaltUhr auf GitHub unter https://github.com/mworion/uzsu_widget .&lt;br /&gt;
Hierbei bitte die Version 2.0 des UZSU Widgets verwenden oder das UZSU Widget aus https://github.com/herrmannj/smartvisu-widgets beziehen&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 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 (für ein Ergebnis 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 an das Reading uzsu des zu schaltenden Device read und write in fhem&lt;br /&gt;
&lt;br /&gt;
3. folgenden Code in der 99_FronthemUtils.pm:&lt;br /&gt;
&lt;br /&gt;
Im Package Main:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
use JSON;&lt;br /&gt;
&lt;br /&gt;
###############################################################################&lt;br /&gt;
#&lt;br /&gt;
# Umsetzen der UZSU-Settings für ein device&lt;br /&gt;
#&lt;br /&gt;
###############################################################################&lt;br /&gt;
sub UZSU_execute($$)&lt;br /&gt;
{&lt;br /&gt;
  my ($device, $uzsu) = @_;&lt;br /&gt;
  &lt;br /&gt;
  $uzsu = decode_json($uzsu);&lt;br /&gt;
  fhem(&#039;delete wdt_&#039;.$device.&#039;_uzsu&#039;);&lt;br /&gt;
  my $weekdays_part = &amp;quot; &amp;quot;;&lt;br /&gt;
  for(my $i=0; $i &amp;lt; @{$uzsu-&amp;gt;{list}}; $i++) {&lt;br /&gt;
      my $weekdays = $uzsu-&amp;gt;{list}[$i]-&amp;gt;{rrule};&lt;br /&gt;
      $weekdays = substr($weekdays,18,50);  &lt;br /&gt;
      if (($uzsu-&amp;gt;{list}[$i]-&amp;gt;{active})) {&lt;br /&gt;
          $weekdays_part = $weekdays_part.&#039; &#039;.$weekdays.&#039;|&#039;.$uzsu-&amp;gt;{list}[$i]-&amp;gt;{time}.&#039;|&#039;.$uzsu-&amp;gt;{list}[$i]-&amp;gt;{value};&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
  fhem(&#039;define wdt_&#039;.$device.&#039;_uzsu&#039;.&#039; WeekdayTimer &#039;.$device.&#039; en &#039;.$weekdays_part);&lt;br /&gt;
  if ($uzsu-&amp;gt;{active}){    &lt;br /&gt;
     fhem(&#039;attr wdt_&#039;.$device.&#039;_uzsu disable 0&#039;);&lt;br /&gt;
  } else {&lt;br /&gt;
     fhem(&#039;attr wdt_&#039;.$device.&#039;_uzsu disable 1&#039;);&lt;br /&gt;
  }    &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Package fronthem, selbe Datei:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
use JSON;&lt;br /&gt;
&lt;br /&gt;
###############################################################################&lt;br /&gt;
#&lt;br /&gt;
# Setreading a device reading using JSON conversion (gadval =&amp;gt; reading=decode_json() =&amp;gt; setval =&amp;gt; encode_json(reading) )&lt;br /&gt;
#&lt;br /&gt;
###############################################################################&lt;br /&gt;
&lt;br /&gt;
sub UZSU(@)&lt;br /&gt;
{&lt;br /&gt;
  my ($param) = @_;&lt;br /&gt;
  my $cmd = $param-&amp;gt;{cmd};&lt;br /&gt;
  my $gad = $param-&amp;gt;{gad};&lt;br /&gt;
  my $gadval = $param-&amp;gt;{gadval};&lt;br /&gt;
&lt;br /&gt;
  my $device = $param-&amp;gt;{device};&lt;br /&gt;
  my $reading = $param-&amp;gt;{reading};&lt;br /&gt;
  my $event = $param-&amp;gt;{event};&lt;br /&gt;
  &lt;br /&gt;
  my @args = @{$param-&amp;gt;{args}};&lt;br /&gt;
  my $cache = $param-&amp;gt;{cache};&lt;br /&gt;
&lt;br /&gt;
  if ($param-&amp;gt;{cmd} eq &#039;get&#039;)&lt;br /&gt;
  {&lt;br /&gt;
    $param-&amp;gt;{cmd} = &#039;send&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  if ($param-&amp;gt;{cmd} eq &#039;send&#039;)&lt;br /&gt;
  {&lt;br /&gt;
    $param-&amp;gt;{gad} = $gad;&lt;br /&gt;
	$param-&amp;gt;{gadval} = decode_json(main::ReadingsVal($device, $reading, &#039;&#039;));&lt;br /&gt;
	$param-&amp;gt;{gads} = [];&lt;br /&gt;
    return undef;&lt;br /&gt;
  }&lt;br /&gt;
  elsif ($param-&amp;gt;{cmd} eq &#039;rcv&#039;)&lt;br /&gt;
  {&lt;br /&gt;
	$gadval = encode_json($gadval);&lt;br /&gt;
	$gadval =~ s/;/;;/ig;&lt;br /&gt;
	$param-&amp;gt;{result} = main::fhem(&amp;quot;setreading $device $reading $gadval&amp;quot;);&lt;br /&gt;
	$param-&amp;gt;{results} = [];&lt;br /&gt;
    return &#039;done&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  elsif ($param-&amp;gt;{cmd} eq &#039;?&#039;)&lt;br /&gt;
  {&lt;br /&gt;
    return &#039;usage: UZSU&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&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;
Voila!&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=10583</id>
		<title>Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=10583"/>
		<updated>2015-03-21T22:43:26Z</updated>

		<summary type="html">&lt;p&gt;Fidel: /* Universelle ZeitSchaltUhr UZSU */&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 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. (im Moment aber inaktiviert!)&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;
&lt;br /&gt;
==Universelle ZeitSchaltUhr UZSU==&lt;br /&gt;
Es existiert ein Widget für eine universelle ZeitSchaltUhr auf GitHub unter https://github.com/mworion/uzsu_widget .&lt;br /&gt;
&amp;lt;!--Hierbei bitte die Version 2.0 des UZSU Widgets verwenden oder das UZSU Widget aus https://github.com/herrmannj/smartvisu-widgets beziehen--&amp;gt;&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 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 (für ein Ergebnis 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 an das Reading uzsu des zu schaltenden Device read und write in fhem&lt;br /&gt;
&lt;br /&gt;
3. folgenden Code in der 99_FronthemUtils.pm:&lt;br /&gt;
&lt;br /&gt;
Im Package Main:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
use JSON;&lt;br /&gt;
&lt;br /&gt;
###############################################################################&lt;br /&gt;
#&lt;br /&gt;
# Umsetzen der UZSU-Settings für ein device&lt;br /&gt;
#&lt;br /&gt;
###############################################################################&lt;br /&gt;
sub UZSU_execute($$)&lt;br /&gt;
{&lt;br /&gt;
  my ($device, $uzsu) = @_;&lt;br /&gt;
  &lt;br /&gt;
  $uzsu = decode_json($uzsu);&lt;br /&gt;
  fhem(&#039;delete wdt_&#039;.$device.&#039;_uzsu&#039;);&lt;br /&gt;
  my $weekdays_part = &amp;quot; &amp;quot;;&lt;br /&gt;
  for(my $i=0; $i &amp;lt; @{$uzsu-&amp;gt;{list}}; $i++) {&lt;br /&gt;
      my $weekdays = $uzsu-&amp;gt;{list}[$i]-&amp;gt;{rrule};&lt;br /&gt;
      $weekdays = substr($weekdays,18,50);  &lt;br /&gt;
      if (($uzsu-&amp;gt;{list}[$i]-&amp;gt;{active})) {&lt;br /&gt;
          $weekdays_part = $weekdays_part.&#039; &#039;.$weekdays.&#039;|&#039;.$uzsu-&amp;gt;{list}[$i]-&amp;gt;{time}.&#039;|&#039;.$uzsu-&amp;gt;{list}[$i]-&amp;gt;{value};&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
  fhem(&#039;define wdt_&#039;.$device.&#039;_uzsu&#039;.&#039; WeekdayTimer &#039;.$device.&#039; en &#039;.$weekdays_part);&lt;br /&gt;
  if ($uzsu-&amp;gt;{active}){    &lt;br /&gt;
     fhem(&#039;attr wdt_&#039;.$device.&#039;_uzsu disable 0&#039;);&lt;br /&gt;
  } else {&lt;br /&gt;
     fhem(&#039;attr wdt_&#039;.$device.&#039;_uzsu disable 1&#039;);&lt;br /&gt;
  }    &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Package fronthem, selbe Datei:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
use JSON;&lt;br /&gt;
&lt;br /&gt;
###############################################################################&lt;br /&gt;
#&lt;br /&gt;
# Setreading a device reading using JSON conversion (gadval =&amp;gt; reading=decode_json() =&amp;gt; setval =&amp;gt; encode_json(reading) )&lt;br /&gt;
#&lt;br /&gt;
###############################################################################&lt;br /&gt;
&lt;br /&gt;
sub UZSU(@)&lt;br /&gt;
{&lt;br /&gt;
  my ($param) = @_;&lt;br /&gt;
  my $cmd = $param-&amp;gt;{cmd};&lt;br /&gt;
  my $gad = $param-&amp;gt;{gad};&lt;br /&gt;
  my $gadval = $param-&amp;gt;{gadval};&lt;br /&gt;
&lt;br /&gt;
  my $device = $param-&amp;gt;{device};&lt;br /&gt;
  my $reading = $param-&amp;gt;{reading};&lt;br /&gt;
  my $event = $param-&amp;gt;{event};&lt;br /&gt;
  &lt;br /&gt;
  my @args = @{$param-&amp;gt;{args}};&lt;br /&gt;
  my $cache = $param-&amp;gt;{cache};&lt;br /&gt;
&lt;br /&gt;
  if ($param-&amp;gt;{cmd} eq &#039;get&#039;)&lt;br /&gt;
  {&lt;br /&gt;
    $param-&amp;gt;{cmd} = &#039;send&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  if ($param-&amp;gt;{cmd} eq &#039;send&#039;)&lt;br /&gt;
  {&lt;br /&gt;
    $param-&amp;gt;{gad} = $gad;&lt;br /&gt;
	$param-&amp;gt;{gadval} = decode_json(main::ReadingsVal($device, $reading, &#039;&#039;));&lt;br /&gt;
	$param-&amp;gt;{gads} = [];&lt;br /&gt;
    return undef;&lt;br /&gt;
  }&lt;br /&gt;
  elsif ($param-&amp;gt;{cmd} eq &#039;rcv&#039;)&lt;br /&gt;
  {&lt;br /&gt;
	$gadval = encode_json($gadval);&lt;br /&gt;
	$gadval =~ s/;/;;/ig;&lt;br /&gt;
	$param-&amp;gt;{result} = main::fhem(&amp;quot;setreading $device $reading $gadval&amp;quot;);&lt;br /&gt;
	$param-&amp;gt;{results} = [];&lt;br /&gt;
    return &#039;done&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  elsif ($param-&amp;gt;{cmd} eq &#039;?&#039;)&lt;br /&gt;
  {&lt;br /&gt;
    return &#039;usage: UZSU&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&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;
Voila!&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=10582</id>
		<title>Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=10582"/>
		<updated>2015-03-21T22:41:14Z</updated>

		<summary type="html">&lt;p&gt;Fidel: /* Universelle ZeitSchaltUhr UZSU */&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 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. (im Moment aber inaktiviert!)&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;
&lt;br /&gt;
==Universelle ZeitSchaltUhr UZSU==&lt;br /&gt;
Es existiert ein Widget für eine universelle ZeitSchaltUhr auf GitHub unter https://github.com/mworion/uzsu_widget .&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 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 (für ein Ergebnis 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 an das Reading uzsu des zu schaltenden Device read und write in fhem&lt;br /&gt;
&lt;br /&gt;
3. folgenden Code in der 99_FronthemUtils.pm:&lt;br /&gt;
&lt;br /&gt;
Im Package Main:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
use JSON;&lt;br /&gt;
&lt;br /&gt;
###############################################################################&lt;br /&gt;
#&lt;br /&gt;
# Umsetzen der UZSU-Settings für ein device&lt;br /&gt;
#&lt;br /&gt;
###############################################################################&lt;br /&gt;
sub UZSU_execute($$)&lt;br /&gt;
{&lt;br /&gt;
  my ($device, $uzsu) = @_;&lt;br /&gt;
  &lt;br /&gt;
  $uzsu = decode_json($uzsu);&lt;br /&gt;
  fhem(&#039;delete wdt_&#039;.$device.&#039;_uzsu&#039;);&lt;br /&gt;
  my $weekdays_part = &amp;quot; &amp;quot;;&lt;br /&gt;
  for(my $i=0; $i &amp;lt; @{$uzsu-&amp;gt;{list}}; $i++) {&lt;br /&gt;
      my $weekdays = $uzsu-&amp;gt;{list}[$i]-&amp;gt;{rrule};&lt;br /&gt;
      $weekdays = substr($weekdays,18,50);  &lt;br /&gt;
      if (($uzsu-&amp;gt;{list}[$i]-&amp;gt;{active})) {&lt;br /&gt;
          $weekdays_part = $weekdays_part.&#039; &#039;.$weekdays.&#039;|&#039;.$uzsu-&amp;gt;{list}[$i]-&amp;gt;{time}.&#039;|&#039;.$uzsu-&amp;gt;{list}[$i]-&amp;gt;{value};&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
  fhem(&#039;define wdt_&#039;.$device.&#039;_uzsu&#039;.&#039; WeekdayTimer &#039;.$device.&#039; en &#039;.$weekdays_part);&lt;br /&gt;
  if ($uzsu-&amp;gt;{active}){    &lt;br /&gt;
     fhem(&#039;attr wdt_&#039;.$device.&#039;_uzsu disable 0&#039;);&lt;br /&gt;
  } else {&lt;br /&gt;
     fhem(&#039;attr wdt_&#039;.$device.&#039;_uzsu disable 1&#039;);&lt;br /&gt;
  }    &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Package fronthem, selbe Datei:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
use JSON;&lt;br /&gt;
&lt;br /&gt;
###############################################################################&lt;br /&gt;
#&lt;br /&gt;
# Setreading a device reading using JSON conversion (gadval =&amp;gt; reading=decode_json() =&amp;gt; setval =&amp;gt; encode_json(reading) )&lt;br /&gt;
#&lt;br /&gt;
###############################################################################&lt;br /&gt;
&lt;br /&gt;
sub UZSU(@)&lt;br /&gt;
{&lt;br /&gt;
  my ($param) = @_;&lt;br /&gt;
  my $cmd = $param-&amp;gt;{cmd};&lt;br /&gt;
  my $gad = $param-&amp;gt;{gad};&lt;br /&gt;
  my $gadval = $param-&amp;gt;{gadval};&lt;br /&gt;
&lt;br /&gt;
  my $device = $param-&amp;gt;{device};&lt;br /&gt;
  my $reading = $param-&amp;gt;{reading};&lt;br /&gt;
  my $event = $param-&amp;gt;{event};&lt;br /&gt;
  &lt;br /&gt;
  my @args = @{$param-&amp;gt;{args}};&lt;br /&gt;
  my $cache = $param-&amp;gt;{cache};&lt;br /&gt;
&lt;br /&gt;
  if ($param-&amp;gt;{cmd} eq &#039;get&#039;)&lt;br /&gt;
  {&lt;br /&gt;
    $param-&amp;gt;{cmd} = &#039;send&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  if ($param-&amp;gt;{cmd} eq &#039;send&#039;)&lt;br /&gt;
  {&lt;br /&gt;
    $param-&amp;gt;{gad} = $gad;&lt;br /&gt;
	$param-&amp;gt;{gadval} = decode_json(main::ReadingsVal($device, $reading, &#039;&#039;));&lt;br /&gt;
	$param-&amp;gt;{gads} = [];&lt;br /&gt;
    return undef;&lt;br /&gt;
  }&lt;br /&gt;
  elsif ($param-&amp;gt;{cmd} eq &#039;rcv&#039;)&lt;br /&gt;
  {&lt;br /&gt;
	$gadval = encode_json($gadval);&lt;br /&gt;
	$gadval =~ s/;/;;/ig;&lt;br /&gt;
	$param-&amp;gt;{result} = main::fhem(&amp;quot;setreading $device $reading $gadval&amp;quot;);&lt;br /&gt;
	$param-&amp;gt;{results} = [];&lt;br /&gt;
    return &#039;done&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  elsif ($param-&amp;gt;{cmd} eq &#039;?&#039;)&lt;br /&gt;
  {&lt;br /&gt;
    return &#039;usage: UZSU&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&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;
Voila!&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=10579</id>
		<title>Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=10579"/>
		<updated>2015-03-21T00:09:09Z</updated>

		<summary type="html">&lt;p&gt;Fidel: /* Universelle ZeitSchaltUhr UZSU */&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 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. (im Moment aber inaktiviert!)&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;
&lt;br /&gt;
==Universelle ZeitSchaltUhr UZSU==&lt;br /&gt;
Es existiert ein Widget für eine universelle ZeitSchaltUhr auf GitHub unter https://github.com/mworion/uzsu_widget .&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 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 (für ein Ergebnis 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 an das Reading uzsu des zu schaltenden Device read und write in fhem&lt;br /&gt;
&lt;br /&gt;
3. folgenden Code in der 99_FronthemUtils.pm:&lt;br /&gt;
&lt;br /&gt;
Im Package Main:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
use JSON;&lt;br /&gt;
&lt;br /&gt;
###############################################################################&lt;br /&gt;
#&lt;br /&gt;
# Umsetzen der UZSU-Settings für ein device&lt;br /&gt;
#&lt;br /&gt;
###############################################################################&lt;br /&gt;
sub UZSU_execute($$)&lt;br /&gt;
{&lt;br /&gt;
  my ($device, $uzsu) = @_;&lt;br /&gt;
  &lt;br /&gt;
  $uzsu = decode_json($uzsu);&lt;br /&gt;
  fhem(&#039;delete wdt_&#039;.$device.&#039;_uzsu&#039;);&lt;br /&gt;
  my $weekdays_part = &amp;quot; &amp;quot;;&lt;br /&gt;
  for(my $i=0; $i &amp;lt; @{$uzsu-&amp;gt;{list}}; $i++) {&lt;br /&gt;
      my $weekdays = $uzsu-&amp;gt;{list}[$i]-&amp;gt;{rrule};&lt;br /&gt;
      $weekdays = substr($weekdays,18,50);  &lt;br /&gt;
      if (($uzsu-&amp;gt;{list}[$i]-&amp;gt;{active})) {&lt;br /&gt;
          $weekdays_part = $weekdays_part.&#039; &#039;.$weekdays.&#039;|&#039;.$uzsu-&amp;gt;{list}[$i]-&amp;gt;{time}.&#039;|&#039;.$uzsu-&amp;gt;{list}[$i]-&amp;gt;{value};&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
  fhem(&#039;define wdt_&#039;.$device.&#039;_uzsu&#039;.&#039; WeekdayTimer &#039;.$device.&#039; en &#039;.$weekdays_part);&lt;br /&gt;
  if ($uzsu-&amp;gt;{active}){    &lt;br /&gt;
     fhem(&#039;attr wdt_&#039;.$device.&#039;_uzsu disable 0&#039;);&lt;br /&gt;
  } else {&lt;br /&gt;
     fhem(&#039;attr wdt_&#039;.$device.&#039;_uzsu disable 1&#039;);&lt;br /&gt;
  }    &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Package fronthem, selbe Datei:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
use JSON;&lt;br /&gt;
&lt;br /&gt;
###############################################################################&lt;br /&gt;
#&lt;br /&gt;
# Setreading a device reading using JSON conversion (gadval =&amp;gt; reading=decode_json() =&amp;gt; setval =&amp;gt; encode_json(reading) )&lt;br /&gt;
#&lt;br /&gt;
###############################################################################&lt;br /&gt;
&lt;br /&gt;
sub UZSU(@)&lt;br /&gt;
{&lt;br /&gt;
  my ($param) = @_;&lt;br /&gt;
  my $cmd = $param-&amp;gt;{cmd};&lt;br /&gt;
  my $gad = $param-&amp;gt;{gad};&lt;br /&gt;
  my $gadval = $param-&amp;gt;{gadval};&lt;br /&gt;
&lt;br /&gt;
  my $device = $param-&amp;gt;{device};&lt;br /&gt;
  my $reading = $param-&amp;gt;{reading};&lt;br /&gt;
  my $event = $param-&amp;gt;{event};&lt;br /&gt;
  &lt;br /&gt;
  my @args = @{$param-&amp;gt;{args}};&lt;br /&gt;
  my $cache = $param-&amp;gt;{cache};&lt;br /&gt;
&lt;br /&gt;
  if ($param-&amp;gt;{cmd} eq &#039;get&#039;)&lt;br /&gt;
  {&lt;br /&gt;
    $param-&amp;gt;{cmd} = &#039;send&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  if ($param-&amp;gt;{cmd} eq &#039;send&#039;)&lt;br /&gt;
  {&lt;br /&gt;
    $param-&amp;gt;{gad} = $gad;&lt;br /&gt;
	$param-&amp;gt;{gadval} = decode_json(main::ReadingsVal($device, $reading, &#039;&#039;));&lt;br /&gt;
	$param-&amp;gt;{gads} = [];&lt;br /&gt;
    return undef;&lt;br /&gt;
  }&lt;br /&gt;
  elsif ($param-&amp;gt;{cmd} eq &#039;rcv&#039;)&lt;br /&gt;
  {&lt;br /&gt;
	$gadval = encode_json($gadval);&lt;br /&gt;
	$gadval =~ s/;/;;/ig;&lt;br /&gt;
	$param-&amp;gt;{result} = main::fhem(&amp;quot;setreading $device $reading $gadval&amp;quot;);&lt;br /&gt;
	$param-&amp;gt;{results} = [];&lt;br /&gt;
    return &#039;done&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  elsif ($param-&amp;gt;{cmd} eq &#039;?&#039;)&lt;br /&gt;
  {&lt;br /&gt;
    return &#039;usage: UZSU&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&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. Bitte Domotiga driver in smartvisu verwenden! Stand 21.03.2015&lt;br /&gt;
&lt;br /&gt;
Voila!&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=10578</id>
		<title>Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=10578"/>
		<updated>2015-03-21T00:08:47Z</updated>

		<summary type="html">&lt;p&gt;Fidel: /* Universelle ZeitSchaltUhr UZSU */&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 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. (im Moment aber inaktiviert!)&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;
&lt;br /&gt;
==Universelle ZeitSchaltUhr UZSU==&lt;br /&gt;
Es existiert ein Widget für eine universelle ZeitSchaltUhr auf GitHub unter https://github.com/mworion/uzsu_widget .&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 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 (für ein Ergebnis 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 an das Reading uzsu des zu schaltenden Device read und write in fhem&lt;br /&gt;
&lt;br /&gt;
3. folgenden Code in der 99_FronthemUtils.pm:&lt;br /&gt;
&lt;br /&gt;
Im Package Main:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
use JSON;&lt;br /&gt;
&lt;br /&gt;
###############################################################################&lt;br /&gt;
#&lt;br /&gt;
# Umsetzen der UZSU-Settings für ein device&lt;br /&gt;
#&lt;br /&gt;
###############################################################################&lt;br /&gt;
sub UZSU_execute($$)&lt;br /&gt;
{&lt;br /&gt;
  my ($device, $uzsu) = @_;&lt;br /&gt;
  &lt;br /&gt;
  $uzsu = decode_json($uzsu);&lt;br /&gt;
  fhem(&#039;delete wdt_&#039;.$device.&#039;_uzsu&#039;);&lt;br /&gt;
  my $weekdays_part = &amp;quot; &amp;quot;;&lt;br /&gt;
  for(my $i=0; $i &amp;lt; @{$uzsu-&amp;gt;{list}}; $i++) {&lt;br /&gt;
      my $weekdays = $uzsu-&amp;gt;{list}[$i]-&amp;gt;{rrule};&lt;br /&gt;
      $weekdays = substr($weekdays,18,50);  &lt;br /&gt;
      if (($uzsu-&amp;gt;{list}[$i]-&amp;gt;{active})) {&lt;br /&gt;
          $weekdays_part = $weekdays_part.&#039; &#039;.$weekdays.&#039;|&#039;.$uzsu-&amp;gt;{list}[$i]-&amp;gt;{time}.&#039;|&#039;.$uzsu-&amp;gt;{list}[$i]-&amp;gt;{value};&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
  fhem(&#039;define wdt_&#039;.$device.&#039;_uzsu&#039;.&#039; WeekdayTimer &#039;.$device.&#039; en &#039;.$weekdays_part);&lt;br /&gt;
  if ($uzsu-&amp;gt;{active}){    &lt;br /&gt;
     fhem(&#039;attr wdt_&#039;.$device.&#039;_uzsu disable 0&#039;);&lt;br /&gt;
  } else {&lt;br /&gt;
     fhem(&#039;attr wdt_&#039;.$device.&#039;_uzsu disable 1&#039;);&lt;br /&gt;
  }    &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Package fronthem, selbe Datei:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
use JSON;&lt;br /&gt;
&lt;br /&gt;
###############################################################################&lt;br /&gt;
#&lt;br /&gt;
# Setreading a device reading using JSON conversion (gadval =&amp;gt; reading=decode_json() =&amp;gt; setval =&amp;gt; encode_json(reading) )&lt;br /&gt;
#&lt;br /&gt;
###############################################################################&lt;br /&gt;
&lt;br /&gt;
sub UZSU(@)&lt;br /&gt;
{&lt;br /&gt;
  my ($param) = @_;&lt;br /&gt;
  my $cmd = $param-&amp;gt;{cmd};&lt;br /&gt;
  my $gad = $param-&amp;gt;{gad};&lt;br /&gt;
  my $gadval = $param-&amp;gt;{gadval};&lt;br /&gt;
&lt;br /&gt;
  my $device = $param-&amp;gt;{device};&lt;br /&gt;
  my $reading = $param-&amp;gt;{reading};&lt;br /&gt;
  my $event = $param-&amp;gt;{event};&lt;br /&gt;
  &lt;br /&gt;
  my @args = @{$param-&amp;gt;{args}};&lt;br /&gt;
  my $cache = $param-&amp;gt;{cache};&lt;br /&gt;
&lt;br /&gt;
  if ($param-&amp;gt;{cmd} eq &#039;get&#039;)&lt;br /&gt;
  {&lt;br /&gt;
    $param-&amp;gt;{cmd} = &#039;send&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  if ($param-&amp;gt;{cmd} eq &#039;send&#039;)&lt;br /&gt;
  {&lt;br /&gt;
    $param-&amp;gt;{gad} = $gad;&lt;br /&gt;
	$param-&amp;gt;{gadval} = decode_json(main::ReadingsVal($device, $reading, &#039;&#039;));&lt;br /&gt;
	$param-&amp;gt;{gads} = [];&lt;br /&gt;
    return undef;&lt;br /&gt;
  }&lt;br /&gt;
  elsif ($param-&amp;gt;{cmd} eq &#039;rcv&#039;)&lt;br /&gt;
  {&lt;br /&gt;
	$gadval = encode_json($gadval);&lt;br /&gt;
	$gadval =~ s/;/;;/ig;&lt;br /&gt;
	$param-&amp;gt;{result} = main::fhem(&amp;quot;setreading $device $reading $gadval&amp;quot;);&lt;br /&gt;
	$param-&amp;gt;{results} = [];&lt;br /&gt;
    return &#039;done&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  elsif ($param-&amp;gt;{cmd} eq &#039;?&#039;)&lt;br /&gt;
  {&lt;br /&gt;
    return &#039;usage: UZSU&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&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. Bitte Domotiga driver in smartvisu verwenden Stand 21.03.2015&lt;br /&gt;
&lt;br /&gt;
Voila!&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SmartVISU&amp;diff=10479</id>
		<title>SmartVISU</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SmartVISU&amp;diff=10479"/>
		<updated>2015-03-10T22:26:36Z</updated>

		<summary type="html">&lt;p&gt;Fidel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SmartVisu ist ein Framework zur Visualisierung von Hausautomationssystemen, die eigentlich KNX-Installationen bedient.&lt;br /&gt;
&lt;br /&gt;
Durch [[Fronthem]] ist es möglich SmartVisu an Fhem anzubinden.&lt;br /&gt;
Im nachfolgenden Link wird Fronthem ausführlich beschrieben: http://www.fhemwiki.de/wiki/Fronthem&lt;br /&gt;
&lt;br /&gt;
Eine Installationsanleitung für SmartVisu in Verbindung mit Fronthem findet sich unter folgendem Link: http://www.fhemwiki.de/wiki/Installation_Fronthem&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Codebeispiele:&lt;br /&gt;
&lt;br /&gt;
http://www.fhemwiki.de/wiki/SmartVisu/IconHighlights_in_Menus&lt;br /&gt;
&lt;br /&gt;
http://www.fhemwiki.de/wiki/SmartVisu/lichtSzene&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
==Widgets:==&lt;br /&gt;
&lt;br /&gt;
==zusätzliche Widgets werden im git-Repository /smartvisu-widgets breitgestellt==&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
*&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
==Widgets die die Config-Seite betreffen liegen bereits im git-Repository smartvisu-cleaninstall==&lt;br /&gt;
&lt;br /&gt;
*fritz!box_via_TR-064&lt;br /&gt;
Dieses Widget verwendet TR-064 zum Auslesen der Anruferliste. Es ist ein Protokoll das nahe am UPnP Standard ist (SOAP).&lt;br /&gt;
Getestet habe ich es mit den FritzOS Versionen 6.03 und 6.20.&lt;br /&gt;
Dieses Widget wird unter der Smartvisu-Config Seite ausgewählt und es muss gegebenenfalls Benutzer und Passwort der Fritzbox in SmartViu angegeben werden.&lt;br /&gt;
Wichtig dabei ist, dass in der Fritzbox unter -&amp;gt;Heimnetz-&amp;gt;Netzwerk-&amp;gt;Netzwerkeinstellungen-&amp;gt;Zugriff für Anwendungen zulassen altiviert ist.&lt;br /&gt;
&lt;br /&gt;
*fritz!box_v6.20&lt;br /&gt;
*&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SmartVISU&amp;diff=10478</id>
		<title>SmartVISU</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SmartVISU&amp;diff=10478"/>
		<updated>2015-03-10T22:21:47Z</updated>

		<summary type="html">&lt;p&gt;Fidel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SmartVisu ist ein Framework zur Visualisierung von Hausautomationssystemen, die eigentlich KNX-Installationen bedient.&lt;br /&gt;
&lt;br /&gt;
Durch [[Fronthem]] ist es möglich SmartVisu an Fhem anzubinden.&lt;br /&gt;
Im nachfolgenden Link wird Fronthem ausführlich beschrieben: http://www.fhemwiki.de/wiki/Fronthem&lt;br /&gt;
&lt;br /&gt;
Eine Installationsanleitung für SmartVisu in Verbindung mit Fronthem findet sich unter folgendem Link: http://www.fhemwiki.de/wiki/Installation_Fronthem&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Codebeispiele:&lt;br /&gt;
&lt;br /&gt;
http://www.fhemwiki.de/wiki/SmartVisu/IconHighlights_in_Menus&lt;br /&gt;
&lt;br /&gt;
http://www.fhemwiki.de/wiki/SmartVisu/lichtSzene&lt;br /&gt;
&lt;br /&gt;
==Widgets:==&lt;br /&gt;
&lt;br /&gt;
==Widgets werden im git-Repository von herrmannj bereitgestellt: https://github.com/herrmannj/smartvisu-widgets==&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
*&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
==Widgets die die Config-Seite betreffen leigen bereits in der SmartVisu cleaninstall bei.==&lt;br /&gt;
&lt;br /&gt;
*fritz!box_via_TR-064&lt;br /&gt;
Dieses Widget verwendet TR-064 zum Auslesen der Anruferliste. Es ist ein Protokoll das nahe am UPnP Standard ist (SOAP).&lt;br /&gt;
Getestet habe ich es mit den FritzOS Versionen 6.03 und 6.20.&lt;br /&gt;
Dieses Widget wird unter der Smartvisu-Config Seite ausgewählt und es muss gegebenenfalls Benutzer und Passwort der Fritzbox in SmartViu angegeben werden.&lt;br /&gt;
Wichtig dabei ist, dass in der Fritzbox unter -&amp;gt;Heimnetz-&amp;gt;Netzwerk-&amp;gt;Netzwerkeinstellungen-&amp;gt;Zugriff für Anwendungen zulassen altiviert ist.&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
*&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=10477</id>
		<title>Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=10477"/>
		<updated>2015-03-10T22:06:30Z</updated>

		<summary type="html">&lt;p&gt;Fidel: &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 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. (im Moment aber inaktiviert!)&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;
&lt;br /&gt;
==Universelle ZeitSchaltUhr UZSU==&lt;br /&gt;
Es existiert ein Widget für eine universelle ZeitSchaltUhr auf GitHub unter https://github.com/mworion/uzsu_widget .&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 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 (für ein Ergebnis 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 an das Reading uzsu des zu schaltenden Device read und write in fhem&lt;br /&gt;
&lt;br /&gt;
3. folgenden Code in der 99_FronthemUtils.pm:&lt;br /&gt;
&lt;br /&gt;
Im Package Main:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
use JSON;&lt;br /&gt;
&lt;br /&gt;
###############################################################################&lt;br /&gt;
#&lt;br /&gt;
# Umsetzen der UZSU-Settings für ein device&lt;br /&gt;
#&lt;br /&gt;
###############################################################################&lt;br /&gt;
sub UZSU_execute($$)&lt;br /&gt;
{&lt;br /&gt;
  my ($device, $uzsu) = @_;&lt;br /&gt;
  &lt;br /&gt;
  $uzsu = decode_json($uzsu);&lt;br /&gt;
  fhem(&#039;delete wdt_&#039;.$device.&#039;_uzsu&#039;);&lt;br /&gt;
  my $weekdays_part = &amp;quot; &amp;quot;;&lt;br /&gt;
  for(my $i=0; $i &amp;lt; @{$uzsu-&amp;gt;{list}}; $i++) {&lt;br /&gt;
      my $weekdays = $uzsu-&amp;gt;{list}[$i]-&amp;gt;{rrule};&lt;br /&gt;
      $weekdays = substr($weekdays,18,50);  &lt;br /&gt;
      if (($uzsu-&amp;gt;{list}[$i]-&amp;gt;{active})) {&lt;br /&gt;
          $weekdays_part = $weekdays_part.&#039; &#039;.$weekdays.&#039;|&#039;.$uzsu-&amp;gt;{list}[$i]-&amp;gt;{time}.&#039;|&#039;.$uzsu-&amp;gt;{list}[$i]-&amp;gt;{value};&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
  fhem(&#039;define wdt_&#039;.$device.&#039;_uzsu&#039;.&#039; WeekdayTimer &#039;.$device.&#039; en &#039;.$weekdays_part);&lt;br /&gt;
  if ($uzsu-&amp;gt;{active}){    &lt;br /&gt;
     fhem(&#039;attr wdt_&#039;.$device.&#039;_uzsu disable 0&#039;);&lt;br /&gt;
  } else {&lt;br /&gt;
     fhem(&#039;attr wdt_&#039;.$device.&#039;_uzsu disable 1&#039;);&lt;br /&gt;
  }    &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Package fronthem, selbe Datei:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
use JSON;&lt;br /&gt;
&lt;br /&gt;
###############################################################################&lt;br /&gt;
#&lt;br /&gt;
# Setreading a device reading using JSON conversion (gadval =&amp;gt; reading=decode_json() =&amp;gt; setval =&amp;gt; encode_json(reading) )&lt;br /&gt;
#&lt;br /&gt;
###############################################################################&lt;br /&gt;
&lt;br /&gt;
sub UZSU(@)&lt;br /&gt;
{&lt;br /&gt;
  my ($param) = @_;&lt;br /&gt;
  my $cmd = $param-&amp;gt;{cmd};&lt;br /&gt;
  my $gad = $param-&amp;gt;{gad};&lt;br /&gt;
  my $gadval = $param-&amp;gt;{gadval};&lt;br /&gt;
&lt;br /&gt;
  my $device = $param-&amp;gt;{device};&lt;br /&gt;
  my $reading = $param-&amp;gt;{reading};&lt;br /&gt;
  my $event = $param-&amp;gt;{event};&lt;br /&gt;
  &lt;br /&gt;
  my @args = @{$param-&amp;gt;{args}};&lt;br /&gt;
  my $cache = $param-&amp;gt;{cache};&lt;br /&gt;
&lt;br /&gt;
  if ($param-&amp;gt;{cmd} eq &#039;get&#039;)&lt;br /&gt;
  {&lt;br /&gt;
    $param-&amp;gt;{cmd} = &#039;send&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  if ($param-&amp;gt;{cmd} eq &#039;send&#039;)&lt;br /&gt;
  {&lt;br /&gt;
    $param-&amp;gt;{gad} = $gad;&lt;br /&gt;
	$param-&amp;gt;{gadval} = decode_json(main::ReadingsVal($device, $reading, &#039;&#039;));&lt;br /&gt;
	$param-&amp;gt;{gads} = [];&lt;br /&gt;
    return undef;&lt;br /&gt;
  }&lt;br /&gt;
  elsif ($param-&amp;gt;{cmd} eq &#039;rcv&#039;)&lt;br /&gt;
  {&lt;br /&gt;
	$gadval = encode_json($gadval);&lt;br /&gt;
	$gadval =~ s/;/;;/ig;&lt;br /&gt;
	$param-&amp;gt;{result} = main::fhem(&amp;quot;setreading $device $reading $gadval&amp;quot;);&lt;br /&gt;
	$param-&amp;gt;{results} = [];&lt;br /&gt;
    return &#039;done&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  elsif ($param-&amp;gt;{cmd} eq &#039;?&#039;)&lt;br /&gt;
  {&lt;br /&gt;
    return &#039;usage: UZSU&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&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;
Voila!&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SmartVISU&amp;diff=10476</id>
		<title>SmartVISU</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SmartVISU&amp;diff=10476"/>
		<updated>2015-03-10T22:04:01Z</updated>

		<summary type="html">&lt;p&gt;Fidel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SmartVisu ist ein Framework zur Visualisierung von Hausautomationssystemen, die eigentlich KNX-Installationen bedient.&lt;br /&gt;
&lt;br /&gt;
Durch [[Fronthem]] ist es möglich SmartVisu an Fhem anzubinden.&lt;br /&gt;
Im nachfolgenden Link wird Fronthem ausführlich beschrieben: http://www.fhemwiki.de/wiki/Fronthem&lt;br /&gt;
&lt;br /&gt;
Eine Installationsanleitung für SmartVisu in Verbindung mit Fronthem findet sich unter folgendem Link: http://www.fhemwiki.de/wiki/Installation_Fronthem&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Codebeispiele:&lt;br /&gt;
&lt;br /&gt;
http://www.fhemwiki.de/wiki/SmartVisu/IconHighlights_in_Menus&lt;br /&gt;
&lt;br /&gt;
http://www.fhemwiki.de/wiki/SmartVisu/lichtSzene&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--Widgets:--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SmartVISU&amp;diff=10475</id>
		<title>SmartVISU</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SmartVISU&amp;diff=10475"/>
		<updated>2015-03-10T21:59:45Z</updated>

		<summary type="html">&lt;p&gt;Fidel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SmartVisu ist ein Framework zur Visualisierung von Hausautomationssystemen, die eigentlich KNX-Installationen bedient.&lt;br /&gt;
&lt;br /&gt;
Durch Fronthem ist es möglich SmartVisu an Fhem anzubinden.&lt;br /&gt;
Im nachfolgenden Link wird Fronthem ausführlich beschrieben: http://www.fhemwiki.de/wiki/Fronthem&lt;br /&gt;
&lt;br /&gt;
Eine Installationsanleitung für SmartVisu in Verbindung mit Fronthem findet sich unter folgendem Link: http://www.fhemwiki.de/wiki/Installation_Fronthem&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Codebeispiele:&lt;br /&gt;
&lt;br /&gt;
http://www.fhemwiki.de/wiki/SmartVisu/IconHighlights_in_Menus&lt;br /&gt;
&lt;br /&gt;
http://www.fhemwiki.de/wiki/SmartVisu/lichtSzene&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--Widgets:--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SmartVISU&amp;diff=10474</id>
		<title>SmartVISU</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SmartVISU&amp;diff=10474"/>
		<updated>2015-03-10T21:59:20Z</updated>

		<summary type="html">&lt;p&gt;Fidel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SmartVisu ist ein Framework zur Visualisierung von Hausautomationssystemen, die eigentlich KNX-Installationen bedient.&lt;br /&gt;
&lt;br /&gt;
Durch Fronthem ist es möglich SmartVisu an Fhem anzubinden.&lt;br /&gt;
Im nachfolgenden Link wird Fronthem ausführlich beschrieben: http://www.fhemwiki.de/wiki/Fronthem&lt;br /&gt;
Eine Installationsanleitung für SmartVisu in Verbindung mit Fronthem findet sich unter folgendem Link: http://www.fhemwiki.de/wiki/Installation_Fronthem&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Codebeispiele:&lt;br /&gt;
&lt;br /&gt;
http://www.fhemwiki.de/wiki/SmartVisu/IconHighlights_in_Menus&lt;br /&gt;
&lt;br /&gt;
http://www.fhemwiki.de/wiki/SmartVisu/lichtSzene&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--Widgets:--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SmartVISU&amp;diff=10472</id>
		<title>SmartVISU</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SmartVISU&amp;diff=10472"/>
		<updated>2015-03-10T21:20:05Z</updated>

		<summary type="html">&lt;p&gt;Fidel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Codebeispiele:&lt;br /&gt;
&lt;br /&gt;
http://www.fhemwiki.de/wiki/SmartVisu/IconHighlights_in_Menus&lt;br /&gt;
&lt;br /&gt;
http://www.fhemwiki.de/wiki/SmartVisu/lichtSzene&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--Widgets:--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SmartVISU&amp;diff=10471</id>
		<title>SmartVISU</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SmartVISU&amp;diff=10471"/>
		<updated>2015-03-10T21:16:50Z</updated>

		<summary type="html">&lt;p&gt;Fidel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Codebeispiele:&lt;br /&gt;
&lt;br /&gt;
http://www.fhemwiki.de/wiki/SmartVisu/IconHighlights_in_Menus&lt;br /&gt;
&lt;br /&gt;
http://www.fhemwiki.de/wiki/Smartvisu/lichtSzene&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--Widgets:--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SmartVISU&amp;diff=10470</id>
		<title>SmartVISU</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SmartVISU&amp;diff=10470"/>
		<updated>2015-03-10T21:13:18Z</updated>

		<summary type="html">&lt;p&gt;Fidel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
http://www.fhemwiki.de/wiki/SmartVisu/IconHighlights_in_Menus&lt;br /&gt;
&lt;br /&gt;
http://www.fhemwiki.de/wiki/Smartvisu/lichtSzene&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SmartVISU/lichtSzene&amp;diff=10468</id>
		<title>SmartVISU/lichtSzene</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SmartVISU/lichtSzene&amp;diff=10468"/>
		<updated>2015-03-10T21:12:56Z</updated>

		<summary type="html">&lt;p&gt;Fidel: Fidel verschob die Seite Smartvisu/lichtSzene nach SmartVisu/lichtSzene: verschiedene Pfade Smartvisu und SmartVisu&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;mit dem folgenden Code lässt sich eine Auswahl für Lichtszenen in smartVisu / fhem erstellen.&lt;br /&gt;
&lt;br /&gt;
So soll es aussehen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Smartvisu_Lichtszene_radio_buttons.png|600px|thumb|left|Screenshot Frontend smartVISU]]&lt;br /&gt;
&lt;br /&gt;
Die Radio Buttons sollen dabei in einem Raum folgende Lichtszenen steuern:&lt;br /&gt;
&lt;br /&gt;
* automatische Beleuchtung &lt;br /&gt;
* Fernsehen&lt;br /&gt;
* Arbeitsbeleuchtung &lt;br /&gt;
* Essen&lt;br /&gt;
* Party&lt;br /&gt;
* volle Beleuchtung&lt;br /&gt;
* Weihnachtsbeleuchtung&lt;br /&gt;
* alles Aus&lt;br /&gt;
&lt;br /&gt;
Die gewünschte Funktionalität ist dabei das sich die Lichtszenen umschalten lassen. Wenn eine bereits aktivierte Funktion nochmal betätigt wird entspricht das &amp;quot;aus&amp;quot;. Die Weihnachtsbeleuchtung soll sich unabhängig von den anderen Beleuchtungs Szenen aktivieren oder deaktivieren lassen.&lt;br /&gt;
&lt;br /&gt;
Als Referenz ein Link auf die Online Hilfe von sv zu den hierfür eingesetzten button (typ dual)&lt;br /&gt;
[http://www.smartvisu.de/docu/2.7/index.php?page=basic/widget_basic.dual]&lt;br /&gt;
&lt;br /&gt;
Der Screenshot oben wird mit diesem code in sv erzeugt:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cells&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;cell4 ui-btn-up-a&amp;quot;&amp;gt;Lichtszene&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;cell6 ui-btn-up-a&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;span data-role=&amp;quot;controlgroup&amp;quot; data-type=&amp;quot;horizontal&amp;quot;&amp;gt;&lt;br /&gt;
			{{ basic.dual(&#039;light.a&#039;, &#039;wz.light.szene.auto&#039;, icon1~&#039;time_automatic.png&#039;, icon0~&#039;time_automatic.png&#039;, &#039;auto&#039;, &#039;off&#039;, &#039;midi&#039;) }}&lt;br /&gt;
			{{ basic.dual(&#039;light.b&#039;, &#039;wz.light.szene.tv&#039;, icon1~&#039;it_television.png&#039;, icon0~&#039;it_television.png&#039;, &#039;tv&#039;, &#039;off&#039;, &#039;midi&#039;) }}&lt;br /&gt;
			{{ basic.dual(&#039;light.c&#039;, &#039;wz.light.szene.work&#039;, icon1~&#039;light_ceiling_light.png&#039;, icon0~&#039;light_ceiling_light.png&#039;, &#039;work&#039;, &#039;off&#039;, &#039;midi&#039;) }}&lt;br /&gt;
			{{ basic.dual(&#039;light.d&#039;, &#039;wz.light.szene.eat&#039;, icon1~&#039;light_dinner_table.png&#039;, icon0~&#039;light_dinner_table.png&#039;, &#039;eat&#039;, &#039;off&#039;, &#039;midi&#039;) }}&lt;br /&gt;
			{{ basic.dual(&#039;light.e&#039;, &#039;wz.light.szene.party&#039;, icon1~&#039;light_party.png&#039;, icon0~&#039;light_party.png&#039;, &#039;party&#039;, &#039;off&#039;, &#039;midi&#039;) }}&lt;br /&gt;
			{{ basic.dual(&#039;light.f&#039;, &#039;wz.light.szene.full&#039;, icon1~&#039;light_light_dim_100.png&#039;, icon0~&#039;light_light_dim_100.png&#039;, &#039;full&#039;, &#039;off&#039;, &#039;midi&#039;) }}&lt;br /&gt;
			{{ basic.dual(&#039;light.g&#039;, &#039;wz.light.szene.xmas&#039;, icon1~&#039;scene_x-mas.png&#039;, icon0~&#039;scene_x-mas.png&#039;, &#039;on&#039;, &#039;off&#039;, &#039;midi&#039;) }}&lt;br /&gt;
			{{ basic.dual(&#039;light.h&#039;, &#039;wz.light.szene.off&#039;, icon1~&#039;control_on_off.png&#039;, icon0~&#039;control_on_off.png&#039;, &#039;off&#039;, &#039;off&#039;, &#039;midi&#039;) }}&lt;br /&gt;
		&amp;lt;/span&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel wird in fhem dazu ein dummy erzeugt über den die Lichtszenen gesteuert werden. Natürlich gäbe es auch alternative Umsetzungen, bspw mit lightscene)&lt;br /&gt;
&lt;br /&gt;
Der dummy (name wz.licht.scene) bekommt diese setlist&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
define wz.licht.scene dummy&lt;br /&gt;
attr wz.licht.scene setList off auto tv eat work party full&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:fronthem_gadeditor_lichtszene.png|600px|thumb|right|ronthem Editor]]&lt;br /&gt;
&lt;br /&gt;
Nach einem reload der sv Seite werden die oben definierten GADs vom fronthemDevice in fhem angezeigt (hier mit bereits definierten GAD). Jetzt müssen die buttons (über ihr GAD) mit der fhem Funktionalität verbunden werden. Hier soll jeder button mit seinem Value den dummy setzen. &lt;br /&gt;
&lt;br /&gt;
Mit den folgenden Einstellungen, die für jedes GAD der Button Group durchgefühert werden müssen, wird das erwünschte Verhalten erreicht. Jeder Button der Group setzt das dummy jetzt auf den den seinen &amp;quot;ON-VALUE&amp;quot; (dritt - vorletzter Wert in der definition oben). Ein weiterer Click (oder der rechte Button) setzt alles aus.&lt;br /&gt;
&lt;br /&gt;
Für die Weihanchtsbeleuchtung wird unabhängig ein Steckdose geschaltet, das ist hier nicht dargestellt.&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SmartVISU&amp;diff=10467</id>
		<title>SmartVISU</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SmartVISU&amp;diff=10467"/>
		<updated>2015-03-10T21:10:00Z</updated>

		<summary type="html">&lt;p&gt;Fidel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
http://www.fhemwiki.de/wiki/SmartVisu/IconHighlights_in_Menus&lt;br /&gt;
http://www.fhemwiki.de/wiki/Smartvisu/lichtSzene&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SmartVISU&amp;diff=10466</id>
		<title>SmartVISU</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SmartVISU&amp;diff=10466"/>
		<updated>2015-03-10T21:07:05Z</updated>

		<summary type="html">&lt;p&gt;Fidel: Die Seite wurde neu angelegt: „http://www.fhemwiki.de/wiki/SmartVisu/IconHighlights_in_Menus“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;http://www.fhemwiki.de/wiki/SmartVisu/IconHighlights_in_Menus&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem_Installation&amp;diff=9966</id>
		<title>Fronthem Installation</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem_Installation&amp;diff=9966"/>
		<updated>2015-02-08T12:31:09Z</updated>

		<summary type="html">&lt;p&gt;Fidel: /* I/O-Connection */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Einen Überblick über Fronthem findet man auf der Seite zu [[Fronthem|Fronthem]]&lt;br /&gt;
&lt;br /&gt;
== Allgemein ==&lt;br /&gt;
=== Fhem ===&lt;br /&gt;
Ein lauffähiges Fhem mit einem aktuellen Update sollte installiert sein.&lt;br /&gt;
&lt;br /&gt;
=== Webserver ===&lt;br /&gt;
Für smartVISU muss ein Webserver (z.B. Apache oder nginx) installiert sein.&lt;br /&gt;
&lt;br /&gt;
==== nginx ====&lt;br /&gt;
Folgende Pakete werden benötigt:&lt;br /&gt;
 $ apt-get install nginx php5-fpm&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration für nginx kann man unter&lt;br /&gt;
 sudo nano /etc/nginx/sites-enabled/default&lt;br /&gt;
vornehmen.&lt;br /&gt;
&lt;br /&gt;
Folgende Konfiguration sollte direkt funktionieren:&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;
&lt;br /&gt;
== Installation smartVISU ==&lt;br /&gt;
Die Installation stammt aus Jörg Herrmanns git-Repo: https://github.com/herrmannj/smartvisu-cleaninstall&lt;br /&gt;
&lt;br /&gt;
Folgende Pakete werden benötigt:&lt;br /&gt;
 $ apt-get install git&lt;br /&gt;
&lt;br /&gt;
Hierbei handelt es sich um das original smartVISU inkl. diverser Anpassungen (fhem-Treiber, ...).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Download:&#039;&#039;&#039;&lt;br /&gt;
 $ mkdir ~/install&lt;br /&gt;
 $ cd ~/install&lt;br /&gt;
 $ git clone https://github.com/herrmannj/smartvisu-cleaninstall.git&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Installation:&#039;&#039;&#039;&lt;br /&gt;
 $ sudo cp -rp smartVISU /var/www/smartvisu&lt;br /&gt;
 $ cd /var/www&lt;br /&gt;
 $ sudo chown -R www-data:www-data smartvisu&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installation überprüfen:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Beim Aufruf der Seite http://&amp;lt;IP-Adresse&amp;gt;/smartvisu sollte folgende Seite angezeigt werden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Installation_SmartVISU.png]]&lt;br /&gt;
&lt;br /&gt;
== Installation Fronthem ==&lt;br /&gt;
Folgende Pakete werden benötigt:&lt;br /&gt;
 curl -L https://cpanmin.us | perl - --sudo App::cpanminus&lt;br /&gt;
 sudo cpanm Net::WebSocket::Server&lt;br /&gt;
 sudo cpanm JSON&lt;br /&gt;
&lt;br /&gt;
Mit folgendem Befehl kann man Fronthem installieren / updaten:&lt;br /&gt;
 update force https://raw.githubusercontent.com/herrmannj/fronthem/master/controls_fronthem.txt&lt;br /&gt;
&lt;br /&gt;
Konfiguration von Fronthem in Fhem  (Eingabe in der Fhem Web Kommandozeile):&lt;br /&gt;
 define &amp;lt;Name Webservice&amp;gt; fronthem&lt;br /&gt;
 define &amp;lt;Name Endgerät&amp;gt; fronthemDevice &amp;lt;ip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
 define meinfronthem fronthem&lt;br /&gt;
 define meiniphone fronthemDevice 192.168.178.25&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Save&amp;quot; nicht vergessen!&lt;br /&gt;
Näheres dazu findet man auch unter http://www.fhemwiki.de/wiki/Fronthem#Basic_Syntax&lt;br /&gt;
&lt;br /&gt;
== Eigenes smartVISU Projekt ==&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== Verbindung smartVISU mit Fhem ==&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration smartVISU-Treiber ===&lt;br /&gt;
==== Interface ====&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
==== I/O-Connection ====&lt;br /&gt;
Unter smartVISU in die Konfigurationsoberfläche wechseln (http://&amp;lt;IP-Adresse&amp;gt;/smartvisu/index.php?page=config)&lt;br /&gt;
&lt;br /&gt;
Driver: &#039;&#039;Fhem&#039;&#039;  (wird in Github von hermmanj bereitgestellt, falls smartvisu nicht von dort bezogen wird)&lt;br /&gt;
&lt;br /&gt;
Adresse: &#039;&#039;&amp;lt;IP-Adresse Fhem-Server&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Port: &#039;&#039;2121&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
TODO&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Dashboard&amp;diff=7929</id>
		<title>Dashboard</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Dashboard&amp;diff=7929"/>
		<updated>2014-09-16T22:31:15Z</updated>

		<summary type="html">&lt;p&gt;Fidel: /* Letzte Änderungen / Dashboard-Historie */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Beliebiges anordnen von Gruppen&lt;br /&gt;
|ModType=h&lt;br /&gt;
&amp;lt;!-- |ModCategory=?? --&amp;gt;&lt;br /&gt;
&amp;lt;!-- |ModCmdRef=?? --&amp;gt;&lt;br /&gt;
|ModTechName=95_Dashboard.pm&lt;br /&gt;
|ModOwner=svenson08&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Dieser Artikel wird überarbeitet&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das &#039;&#039;&#039;Dashboard&#039;&#039;&#039; ist ein [[:Kategorie:Hilfsmodul|Hilfsmodul]], das umfangreiche Gestaltungsmöglichkeiten für das [[PGM2]] Web-Frontend bietet. So z.B. die Anordnung von Gerätegruppen in mehreren Tabs und jeweils in mehreren Spalten mittels Drag&#039;n Drop.&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
Keine speziellen Voraussetzungen erforderlich.&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
&lt;br /&gt;
=== Define ===&lt;br /&gt;
Die Syntax für die Definition eines Dashboards:&lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; Dashboard&amp;lt;/code&amp;gt;&lt;br /&gt;
Parameterbedeutung:&lt;br /&gt;
;name&lt;br /&gt;
:Eindeutiger Name des anzulegenden Dashboards.&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
Das Dashboard unterstützt die folgenden Attribute:&lt;br /&gt;
&lt;br /&gt;
;dashboard_activetab&lt;br /&gt;
:Bestimmt welches der Tabs beim Aufruf des Dashboards ausgewählt ist.&lt;br /&gt;
;dashboard_customcss&lt;br /&gt;
:Über dieses Attribut können CSS Definitionen eingegeben werden, um z.B. mit dem Wert &#039;&#039;body {background-image: none !important;}&#039;&#039; das Hintergrundbild im Dashboard zu deaktiviert werden.&lt;br /&gt;
;dashboard_tabcount&lt;br /&gt;
:Bestimmt die Anzahl der verfügbaren Tabs im Dashboard.&lt;br /&gt;
;dashboard_showtabs&lt;br /&gt;
:Bestimmt die Position der Tabs. Diese kann oben oder unten angezeigt oder komplett ausgeblendet werden. Letzteres führt dazu das dass Dashboard den Lockstate auf lock ändert.&lt;br /&gt;
;dashboard_showfullsize&lt;br /&gt;
:Zeigt das Dashboard ohne die Raumliste von FHEMWEB. Es wird dabei der gesamte linke Bereich (inkl. Raumliste und evtl. gesetzten Logo) und dem Header der Seite (inkl. Eingabezeile) ausgeblendet.&lt;br /&gt;
;dashboard_showtooglebuttons&lt;br /&gt;
:Wer die vergrößern/verkleinern nicht nutzen möchte kann dies mittels diesem Attribut deaktivieren.&lt;br /&gt;
;dashboard_width&lt;br /&gt;
:Bestimmt die Breite des Dashboards. Die Breite kann in Prozent (z.B. 80%) oder in Pixel (z.B. 1200) angegeben werden.&lt;br /&gt;
;dashboard_tab1groups (dashboard_tab2groups dashboard_tab3groups dashboard_tab4groups dashboard_tab5groups dashboard_tab6groups dashboard_tab7groups)&lt;br /&gt;
:Enthält die Auflistung der Gruppen, die im Dashboardtab angezeigt werden. Die Gruppen sind mit einem Komma zu trennen. Einer Gruppe kann ein Icons zugewiesen werden. Hierzu muss nach dem Gruppennamen &#039;&#039;:&amp;lt;icon&amp;gt;@&amp;lt;farbe&amp;gt;&#039;&#039; eingefügt werden. z.B. &amp;lt;code&amp;gt;Light:Icon_Fisch@blue,AVIcon_Fisch@red,Single Lights:Icon_Fisch@yellow&amp;lt;/code&amp;gt;&lt;br /&gt;
;dashboard_tab1name (dashboard_tab2name dashboard_tab3name dashboard_tab4name dashboard_tab5name dashboard_tab6name dashboard_tab7name)&lt;br /&gt;
:Bestimmt den Titel des Tabs.&lt;br /&gt;
;dashboard_tab1icon (dashboard_tab2icon dashboard_tab3icon dashboard_tab4icon dashboard_tab5icon dashboard_tab6icon dashboard_tab7icon)&lt;br /&gt;
:Anzuzeigendes Icon neben dem Titel des Tabs.&lt;br /&gt;
;dashboard_rowtopheight&lt;br /&gt;
:dashboard_webfrontendfilter&lt;br /&gt;
;Dem Attribut ist der Name einer FHEMWEB Instanz zu hinterlegen(z.B. WEB), möchte man das Dashboard darauf beschränken. Es können mehrere Instanzen, durch Komma getrennt, angegeben werden.&lt;br /&gt;
:Festlegen der Höhe der oberen Reihe des Dashboards.&lt;br /&gt;
;dashboard_rowbottomheight&lt;br /&gt;
:Festlegen der Höhe der unteren Reihe des Dashboards.&lt;br /&gt;
;dashboard_rowcenterheight&lt;br /&gt;
:Festlegen der Höhe der mittleren Reihe des Dashboards.&lt;br /&gt;
;dashboard_row&lt;br /&gt;
:Bestimmt welche Reihen im Dashboard angezeigt werden.&lt;br /&gt;
;dashboard_rowcentercolwidth&lt;br /&gt;
:Bestimmt die Breite der einzelnen Spalten der mittleren Dashboardreihe. Je Spalte kann ein separater Wert, durch Komma getrennt, hinterlegt werden. Jeder Wert bestimmt die Spaltenbreite in %.&lt;br /&gt;
;dashboard_colcount&lt;br /&gt;
:Legt die Anzahl der Spalten in der mittleren Reihe des Dashboards festgelegt.&lt;br /&gt;
;dashboard_tab1sorting (dashboard_tab2sorting dashboard_tab3sorting dashboard_tab4sorting dashboard_tab5sorting dashboard_tab6sorting dashboard_tab7sorting)&lt;br /&gt;
:Enthält die Positionierung der Gruppen im jeweiligen Tab. Es wird nicht empfohlen, dieses Attribut zu editieren.&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiel(e) ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Allgemeine Hinweise ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Unterstützte Styles&lt;br /&gt;
Es werden die Styles Default, Dark und IOS7 unterstützt.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Dashboard-Styles&lt;br /&gt;
|-&lt;br /&gt;
|[[Datei:dashboard_dark.png|thumb|500px|Dashboard im Style Dark]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Datei:dashboard_default.png|thumb|500px|Dashboard im Default Style]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Datei:dashboard_ios.png|thumb|500px|Dashboard im IOS7]] &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
;Benötigte Dateien&lt;br /&gt;
Wenn vom Dashboard benötigte Dateien fehlen zeigt der STATUS des Dashboards den Hinweis &#039;&#039;Missing File, see LogFile for Details&#039;&#039;. Weitere Einzelheiten zu diesem Fehler finden sich dann im Logfile. Es sollte klar sein, dass das Dashboard dann nicht (richtig) funktionieren kann.&lt;br /&gt;
&lt;br /&gt;
== Erklärung / Internes ==&lt;br /&gt;
[[Datei:Dashboard_Menulink.png|mini|120px|Darstellung des Dashboard Menüs]]&lt;br /&gt;
&lt;br /&gt;
Das Dashboard besteht in FHEM eigentlich aus zwei &amp;quot;Komponenten&amp;quot;. Dem eigentlichen definierten Dashboard und einem Weblink. Es muss sich aber nicht um den Weblink für das Dashboard kümmern werden, da dieser bei Bedarf vom Dashboard eigenständig erstellt wird.&lt;br /&gt;
&lt;br /&gt;
== Kleines Howto ==&lt;br /&gt;
;Schritt 1: Erstellen des Dashboards&lt;br /&gt;
:&amp;lt;code&amp;gt;define anyViews Dashboard&amp;lt;/code&amp;gt;&lt;br /&gt;
FHEM neu starten.&lt;br /&gt;
&lt;br /&gt;
;Schritt 2: Grundkonfiguration&lt;br /&gt;
&lt;br /&gt;
:attr anyViews dashboard_width 80%&lt;br /&gt;
:attr anyViews dashboard_tabcount 1&lt;br /&gt;
:attr anyViews dashboard_tab1groups &amp;lt;GRUPPE1&amp;gt;,&amp;lt;GRUPPE2&amp;gt;,&amp;lt;GRUPPE3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;GRUPPE1&amp;gt;, etc. sind durch richtige Gruppennamen zu ersetzen, z.B. Licht,Wetter oder ähnliches&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:Dashboard-KeinGruppe.png|mini|250px|&amp;quot;Objekt&amp;quot; ohne Gruppe]]&lt;br /&gt;
[[Datei:Dashboard-Gruppe.png|mini|250px|&amp;quot;Objekt&amp;quot; in einer Gruppe]]&lt;br /&gt;
&lt;br /&gt;
Danach sollen die beiden Gruppen im 1. Tab im Dashboard angezeigt werden. Zwar noch etwas chaotisch, aber das wird in den nächsten Schritten bearbeitet.&amp;lt;br&amp;gt;&lt;br /&gt;
[[#dashboard_tab1groups| Siehe dashboard_tab1groups]]&lt;br /&gt;
&lt;br /&gt;
Das Dashboard zeigt neben den beiden Gruppen bereits einiges andere mit an. Hier werden erst einmal diese &amp;quot;Nebensächlichkeiten&amp;quot; erklärt. Für die weiteren Schritte dieser Anleitung sollten die nun genannten Einstellungen unverändert bleiben. &lt;br /&gt;
&lt;br /&gt;
[[Datei:Dashboard_FirstGroup.png|mini|300px|Erste Gruppe im Dashboard]]&lt;br /&gt;
Am rechten Rand des Dashboards erscheinen einige Schalter (&amp;quot;Set&amp;quot;, &amp;quot;Detail&amp;quot;). Der Schalter &amp;quot;Detail&amp;quot; springt in die Detailansicht des Dashboards um dort z.B. weiter Attribute hinzuzufügen. &amp;lt;br&amp;gt;&lt;br /&gt;
Der Schalter &amp;quot;Set&amp;quot; speichert die per Drag&#039;n Drop vorgenommenen Änderungen &#039;&#039;&#039;temporär&#039;&#039;&#039; (diese sind dann noch nicht gespeichert!). &amp;quot;Set&amp;quot; wird in rot geschrieben wenn die Positionierung einer Gruppe geändert wurde, aber noch nicht mit dem &amp;quot;Set&amp;quot;-Schalter gesichert wurden! Ebenso wird mit dem Schalter &amp;quot;Set&amp;quot; das aktuell [[#dashboard_activetab|aktive Tab]] gesichert &amp;lt;br&amp;gt;&lt;br /&gt;
Die Schalterleiste kann über das Attribut &#039;&#039;dashboard_showtabs&#039;&#039; deaktiviert werden, oder wahlweise über oder unter dem Dashboard platziert werden.&amp;lt;br&amp;gt;&lt;br /&gt;
[[#dashboard_showtabs| Siehe dashboard_showtabs]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Im Gruppentitel erscheint an deren rechten Rand ein Symbol (+/-). Mit diesem kann man die Gruppe minimieren oder die voreingestellte Größe wieder herstellen.&amp;lt;br&amp;gt;&lt;br /&gt;
[[#dashboard_showtooglebuttons| Siehe dashboard_showtooglebuttons]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:Dashboard_Helper.png|mini|300px|Dashboard Helper]]&lt;br /&gt;
Zum besseren Ausrichten der einzelnen Gruppen werden zur Unterstützung einige Hilfen angezeigt. Die Erste ist die Anzeige eines Rahmens um das Dashboard. Genauer gesagt um die einzelnen Reihen/Spalten des Dashboards. Eine weitere Hilfe ist der Hintergrund der Gruppen. Dieser kann über die Mindestgröße der Gruppe hinaus gezogen werden. Damit können beliebig große Abstände zwischen den einzelnen Gruppen eingestellt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
[[#dashboard_showhelper| Siehe dashboard_showhelper]]&lt;br /&gt;
&lt;br /&gt;
Da nun die ersten Gruppen im Dashboard angezeigt werden, geht es nun darum, diese an die gewünschten Stellen zu platzieren. Dazu werden erst noch die verschiedenen Reihen und Spalten eingerichtet.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Dashboard verfügt über drei Reihen. Oben, Mitte und Unten. In der Standardeinstellung wird nur die mittlere Reihe angezeigt. Die mittlere Reihe sollte auch immer eingesetzt werden, da diese die Breite des Dashboard vorgibt. Für dieses kleine HowTo werden aber die obere und die mittlere Reihe eingeblendet, indem das Attribut &#039;&#039;&#039;dashboard_row&#039;&#039;&#039; auf &#039;&#039;&#039;top-center&#039;&#039;&#039; gestellt wird. Diese Einstellung gilt für das gesamte Dashboard und somit für alle verwendeten Tabs. Es ist nicht möglich, je Tab eine andere Einstellung zu wählen.&amp;lt;br&amp;gt; &lt;br /&gt;
[[#dashboard_row| Siehe dashboard_row]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Breite, die das Dashboard auf dem Bildschirm einnimmt, kann über das Attribut &#039;&#039;&#039;dashboard_width&#039;&#039;&#039; festgelegt werden. Standard ist die Breite von 100%. Es kann neben einem Prozentwert auch eine Breite in Pixel angegeben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
[[#dashboard_width| Siehe dashboard_width]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Höhe der einzelnen Reihen kann über die Attribute dashboard_rowtopheight für die obere Reihe, dashboard_rowbottomheight für die untere Reihe und dashboard_rowcenterheight für die mittlere Reihe festgelegt werden. Damit können die Reihen nach den eigenen Bedürfnissen angepasst werden. Für dieses HowTo wird &#039;&#039;&#039;dashboard_rowtopheight&#039;&#039;&#039; auf &#039;&#039;&#039;300&#039;&#039;&#039; und &#039;&#039;&#039;dashboard_rowcenterheight&#039;&#039;&#039; auf &#039;&#039;&#039;400&#039;&#039;&#039; eingestellt. Diese Einstellung gilt für das gesamte Dashboard und somit für alle verwendeten Tabs. Es ist nicht möglich je Tab eine andere Einstellung zu wählen.&amp;lt;br&amp;gt;&lt;br /&gt;
[[#dashboard_rowtopheight| Siehe dashboard_rowtopheight]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[#dashboard_rowbottomheight| Siehe dashboard_rowbottomheight]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[#dashboard_rowcenterheight| Siehe dashboard_rowheight]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die mittlere Reihe hat (historisch bedingt) eine Besonderheit. Diese kann in maximal 5 Spalten unterteilt werden. Für unser Beispiel setzten wird das Attribut &#039;&#039;&#039;dashboard_colcount&#039;&#039;&#039; auf &#039;&#039;&#039;2&#039;&#039;&#039;. Diese Einstellung gilt für das gesamte Dashboard und somit für alle verwendeten Tabs. Es ist nicht möglich je Tab eine andere Einstellung zu wählen.&amp;lt;br&amp;gt; Weiter legen wir mit dem Attribut [[#dashboard_rowcentercolwidth|dashboard_rowcentercolwidth]] die Breite der ersten Spalte mit 30% und die der zweiten Spalte mit 70% fest in dem wir dem Attribut &#039;&#039;&#039;dashboard_rowcentercolwidth&#039;&#039;&#039; den Wert &#039;&#039;&#039;30,70&#039;&#039;&#039; zuteilen.&amp;lt;br&amp;gt;&lt;br /&gt;
[[#dashboard_colcount | Siehe dashboard_colcount ]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sicherlich ist das positionieren einfach, und jeder wird das hin bekommen. Zwei, drei Worte möchte ich trotzdem darüber verlieren.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;ins&amp;gt;Verschieben&amp;lt;/ins&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
:Gruppen können in andere Reihen oder Spalten des Dashboards verschoben werden. Dazu muss in die Gruppe angeklickt werden und die Maustaste gedrückt gehalten werden. Los lässt man diese wenn man an der richtige Stelle ist. Das war wohl schon jedem klar.&amp;lt;br&amp;gt;&lt;br /&gt;
:Ein möglicher Zielort wird mit einem abgerundeten Platzhalter markiert. Dieser verschiebt auch, falls notwendig, andere Gruppen. Manchen wundert es warum dieser Zielort manchmal recht spät angezeigt wird. Dies hängt von der Position des Mauszeigers ab. Aha?! Je weiter oben man eine Gruppe anpackt, desto höher muss man die Maus schieben. Oder anders formuliert, wenn sich ca. 50% der Gruppenfläche im Zielbereich befinden wird dieser Zielort erst markiert. Das verschieben eine Gruppe von einem Tab in das andere ist nicht möglich. Letztendlich bleibt jedem nur &amp;lt;ins&amp;gt;ausprobieren&amp;lt;/ins&amp;gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Gruppen können über, unter, neben und vor anderen Gruppen verschoben werden. Auch das erfolgt wie bereits oben aufgeführt. Dies ist für viele nicht neues. Zu beachten ist aber das sich eine Gruppe nur dann vor oder neben eine anderen positionieren lässt wenn diese von der Breite in das Dashboard passen. Wenn Ihr also Gruppen nebeneinander positionieren wollt dürfen diese in Summe nicht breiter als das Dashboard sein.&amp;lt;br&amp;gt;&lt;br /&gt;
:Dies gilt nicht für die Höhen der Gruppen. Diese können in Summe höher als das Dashboard und höher als eine Reihe sein. Hier findet keine Begrenzung statt wie bei der Breite. Um jedoch das ein oder andere optisch nicht so schöne Ergebnis zu bekommen sollte darauf geachtet werden das keine Gruppe über eine Reihe hinaus ragt.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für unser Beispiel verschieben wir zum Testen die Gruppen in beliebige Reihen bzw. Spalten der mittleren Reihe. Danach bitte den &amp;quot;Set&amp;quot; Schalter drücken, dieser hat sich durch die verschiebe Aktionen bereits rot markiert.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Dashboard_Positionieren.png|mini|200px|Ausrichtung von einzelnen Gruppen]]&lt;br /&gt;
Das Ausrichten ist gleichermaßen einfach wie das Positionieren und sollte auch nichts Neues sein. Aber auch hier möchte ich darüber zwei, drei Worte verlieren.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Das Positionieren ist nur möglich, wenn das Dashboard nicht gesperrt ist (Lock/Unlock). Dann wird ein abgeschrägte Ecke an der Gruppe angezeigt, mit der die Größe gezogen werden kann.&lt;br /&gt;
:Jede Gruppe kann in Höhe und Breite beliebig gezogen werden, wobei genau das wieder einen Hacken hat: Das Größerziehen ist nur bedingt möglich. Die Breite/Höhe ist auf die Breite/Höhe der Dashboard Reihe (oder Spalte) begrenzt. Damit kann man eine Gruppe nicht über den Rand des Dashboards hinaus vergrößern.&amp;lt;br&amp;gt;&lt;br /&gt;
:Das Kleinerziehen ist auch nur bis zu einer Mindestgröße möglich. Die Mindestgröße ist abhängig vom Inhalt der Gruppe, kann also von Gruppe zu Gruppe unterschiedlich sein.&amp;lt;br&amp;gt;&lt;br /&gt;
:Ein Sonderverhalten beim Vergrößern/Verkleinern gibt es auch: Ist ein Gruppe höher als die Reihe, lässt sich die Gruppe zwar dort positionieren. Beim Ausrichten springt dann der untere Rand nicht auf die Mindesthöhe der Gruppe, sondern auf die maximale Höhe der Reihe. In diesem Fall sollte die Höhe der Reihe geändert werden. Ähnliches kann auch in der Breite auftreten.&amp;lt;br&amp;gt;&lt;br /&gt;
:Ändert sich der Inhalt einer Gruppe (wird z.B. ein Dummy dazugepackt), ändert sich die Positionierung der Gruppe &#039;&#039;&#039;nicht&#039;&#039;&#039; automatisch. In diesem Fall ist man immer gezwungen auch die Größe der Gruppe im Dashboard an die neue Gegebenheit anzupassen.&lt;br /&gt;
&lt;br /&gt;
Für unser Beispiel ziehen wir die Gruppen beliebig größer. Danach bitte den &amp;quot;Set&amp;quot;-Schalter drücken. Dieser hat sich durch die Verschiebeaktionen bereits rot markiert.&lt;br /&gt;
&lt;br /&gt;
Wie bereits etwas weiter oben erklärt wird die Positionierung der Gruppen im Dashboard durch die Betätigung des Schalters &amp;quot;Set&amp;quot; temporär zwischengespeichert. Dadurch wird die Positionierung bereits für einen Seitenrefresh gespeichert. Solange bis das Browserfenster geschlossen wird. Danach wären diese Einstellungen verloren.&amp;lt;br&amp;gt;&lt;br /&gt;
Darum ist es notwendig die Positionierung permanent zu speichern, damit auch nach einem Neustart von Fhem die getroffenen Einstellungen und Positionierungen vorhanden sind. Dies geht über den in Fhem bekannten weg über &#039;&#039;Save config&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
Wird der Schalter &amp;quot;Set&amp;quot; nicht betätigt, wird auch über &#039;&#039;Save config&#039;&#039; die Positionierung nicht gespeichert. Daher ist es wichtig, immer &#039;&#039;&#039;zuerst&#039;&#039;&#039; mit dem Schalter &#039;&#039;&#039;&amp;quot;Set&amp;quot;&#039;&#039;&#039; die Einstellung zwischenzuspeichern und &#039;&#039;&#039;danach mit &#039;&#039;Save config&#039;&#039;&#039;&#039;&#039; den Zwischenspeicher permanent zu sichern.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durch den Schalter &amp;quot;Set&amp;quot; wird für jedes Tab die Einstellung in das für das jeweilige Tab zuständige Attribut geschrieben. Für Tab 1 ist das Attribut &#039;&#039;dashboard_tab1sorting&#039;&#039; zuständig, für Tab 2 das Attribut &#039;&#039;dashboard_tab2sorting&#039;&#039;, usw. &#039;&#039;&#039;Diese Attribute sollten nicht editiert werden!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Es ist möglich jedem Tab einen eigenen individuellen Namen zu vergeben. Dazu ist für das jeweilige Tab das entsprechende Attribut zu befüllen. Z.B. für Tab 1 ist das Attribut &#039;&#039;dashboard_tab1name&#039;&#039; mit dem gewünschten Titel zu füllen.&amp;lt;br&amp;gt;&lt;br /&gt;
[[#dashboard_tab1name| Siehe dashboard_tab1name]]&lt;br /&gt;
&lt;br /&gt;
== Letzte Änderungen / Dashboard-Historie ==&lt;br /&gt;
&lt;br /&gt;
* (03.03.2014) Anzeigefehler bei readingGroups in einem Hiddenroom behoben&lt;br /&gt;
* (17.03.2014) Fehlerausgabe durch dashboard_webfrontendfilter behoben&lt;br /&gt;
* (26.03.2014) dashboard_showfullsize wird nicht im Raum &amp;quot;all&amp;quot; bzw. Everything angewendet&lt;br /&gt;
* (18.04.2014) Attribut dashboard_lock State entfernt. Kann nur noch in der Detailansicht verändert werden.&lt;br /&gt;
* (24.04.2014) Attribut dashboard_showhelper wird nicht mehr genutzt. Der Helper wird nur angezeigt wenn lockstate unlock ist.&lt;br /&gt;
* (24.04.2014) Schalter Detail und Set werden nun rechts angezeigt.&lt;br /&gt;
* (24.04.2014) Attribut dashboard_showtabs kann nicht mehr tabs-at-the-top-buttonbar-hidden oder tabs-on-the-bottom-buttonbar-hidden sein.&lt;br /&gt;
* (17.09.2014) Vertauschungen von attr dashboard_width anyViews 80% zu attr anyViews dashboard_width 80% berichtigt&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [http://forum.fhem.de/index.php/topic,16503.0.html Forenthread] über &#039;&#039;Dashboard&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Hilfsmodul]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Dashboard&amp;diff=7928</id>
		<title>Dashboard</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Dashboard&amp;diff=7928"/>
		<updated>2014-09-16T22:28:10Z</updated>

		<summary type="html">&lt;p&gt;Fidel: /* Kleines Howto */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Beliebiges anordnen von Gruppen&lt;br /&gt;
|ModType=h&lt;br /&gt;
&amp;lt;!-- |ModCategory=?? --&amp;gt;&lt;br /&gt;
&amp;lt;!-- |ModCmdRef=?? --&amp;gt;&lt;br /&gt;
|ModTechName=95_Dashboard.pm&lt;br /&gt;
|ModOwner=svenson08&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Dieser Artikel wird überarbeitet&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das &#039;&#039;&#039;Dashboard&#039;&#039;&#039; ist ein [[:Kategorie:Hilfsmodul|Hilfsmodul]], das umfangreiche Gestaltungsmöglichkeiten für das [[PGM2]] Web-Frontend bietet. So z.B. die Anordnung von Gerätegruppen in mehreren Tabs und jeweils in mehreren Spalten mittels Drag&#039;n Drop.&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
Keine speziellen Voraussetzungen erforderlich.&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
&lt;br /&gt;
=== Define ===&lt;br /&gt;
Die Syntax für die Definition eines Dashboards:&lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; Dashboard&amp;lt;/code&amp;gt;&lt;br /&gt;
Parameterbedeutung:&lt;br /&gt;
;name&lt;br /&gt;
:Eindeutiger Name des anzulegenden Dashboards.&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
Das Dashboard unterstützt die folgenden Attribute:&lt;br /&gt;
&lt;br /&gt;
;dashboard_activetab&lt;br /&gt;
:Bestimmt welches der Tabs beim Aufruf des Dashboards ausgewählt ist.&lt;br /&gt;
;dashboard_customcss&lt;br /&gt;
:Über dieses Attribut können CSS Definitionen eingegeben werden, um z.B. mit dem Wert &#039;&#039;body {background-image: none !important;}&#039;&#039; das Hintergrundbild im Dashboard zu deaktiviert werden.&lt;br /&gt;
;dashboard_tabcount&lt;br /&gt;
:Bestimmt die Anzahl der verfügbaren Tabs im Dashboard.&lt;br /&gt;
;dashboard_showtabs&lt;br /&gt;
:Bestimmt die Position der Tabs. Diese kann oben oder unten angezeigt oder komplett ausgeblendet werden. Letzteres führt dazu das dass Dashboard den Lockstate auf lock ändert.&lt;br /&gt;
;dashboard_showfullsize&lt;br /&gt;
:Zeigt das Dashboard ohne die Raumliste von FHEMWEB. Es wird dabei der gesamte linke Bereich (inkl. Raumliste und evtl. gesetzten Logo) und dem Header der Seite (inkl. Eingabezeile) ausgeblendet.&lt;br /&gt;
;dashboard_showtooglebuttons&lt;br /&gt;
:Wer die vergrößern/verkleinern nicht nutzen möchte kann dies mittels diesem Attribut deaktivieren.&lt;br /&gt;
;dashboard_width&lt;br /&gt;
:Bestimmt die Breite des Dashboards. Die Breite kann in Prozent (z.B. 80%) oder in Pixel (z.B. 1200) angegeben werden.&lt;br /&gt;
;dashboard_tab1groups (dashboard_tab2groups dashboard_tab3groups dashboard_tab4groups dashboard_tab5groups dashboard_tab6groups dashboard_tab7groups)&lt;br /&gt;
:Enthält die Auflistung der Gruppen, die im Dashboardtab angezeigt werden. Die Gruppen sind mit einem Komma zu trennen. Einer Gruppe kann ein Icons zugewiesen werden. Hierzu muss nach dem Gruppennamen &#039;&#039;:&amp;lt;icon&amp;gt;@&amp;lt;farbe&amp;gt;&#039;&#039; eingefügt werden. z.B. &amp;lt;code&amp;gt;Light:Icon_Fisch@blue,AVIcon_Fisch@red,Single Lights:Icon_Fisch@yellow&amp;lt;/code&amp;gt;&lt;br /&gt;
;dashboard_tab1name (dashboard_tab2name dashboard_tab3name dashboard_tab4name dashboard_tab5name dashboard_tab6name dashboard_tab7name)&lt;br /&gt;
:Bestimmt den Titel des Tabs.&lt;br /&gt;
;dashboard_tab1icon (dashboard_tab2icon dashboard_tab3icon dashboard_tab4icon dashboard_tab5icon dashboard_tab6icon dashboard_tab7icon)&lt;br /&gt;
:Anzuzeigendes Icon neben dem Titel des Tabs.&lt;br /&gt;
;dashboard_rowtopheight&lt;br /&gt;
:dashboard_webfrontendfilter&lt;br /&gt;
;Dem Attribut ist der Name einer FHEMWEB Instanz zu hinterlegen(z.B. WEB), möchte man das Dashboard darauf beschränken. Es können mehrere Instanzen, durch Komma getrennt, angegeben werden.&lt;br /&gt;
:Festlegen der Höhe der oberen Reihe des Dashboards.&lt;br /&gt;
;dashboard_rowbottomheight&lt;br /&gt;
:Festlegen der Höhe der unteren Reihe des Dashboards.&lt;br /&gt;
;dashboard_rowcenterheight&lt;br /&gt;
:Festlegen der Höhe der mittleren Reihe des Dashboards.&lt;br /&gt;
;dashboard_row&lt;br /&gt;
:Bestimmt welche Reihen im Dashboard angezeigt werden.&lt;br /&gt;
;dashboard_rowcentercolwidth&lt;br /&gt;
:Bestimmt die Breite der einzelnen Spalten der mittleren Dashboardreihe. Je Spalte kann ein separater Wert, durch Komma getrennt, hinterlegt werden. Jeder Wert bestimmt die Spaltenbreite in %.&lt;br /&gt;
;dashboard_colcount&lt;br /&gt;
:Legt die Anzahl der Spalten in der mittleren Reihe des Dashboards festgelegt.&lt;br /&gt;
;dashboard_tab1sorting (dashboard_tab2sorting dashboard_tab3sorting dashboard_tab4sorting dashboard_tab5sorting dashboard_tab6sorting dashboard_tab7sorting)&lt;br /&gt;
:Enthält die Positionierung der Gruppen im jeweiligen Tab. Es wird nicht empfohlen, dieses Attribut zu editieren.&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiel(e) ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Allgemeine Hinweise ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Unterstützte Styles&lt;br /&gt;
Es werden die Styles Default, Dark und IOS7 unterstützt.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Dashboard-Styles&lt;br /&gt;
|-&lt;br /&gt;
|[[Datei:dashboard_dark.png|thumb|500px|Dashboard im Style Dark]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Datei:dashboard_default.png|thumb|500px|Dashboard im Default Style]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Datei:dashboard_ios.png|thumb|500px|Dashboard im IOS7]] &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
;Benötigte Dateien&lt;br /&gt;
Wenn vom Dashboard benötigte Dateien fehlen zeigt der STATUS des Dashboards den Hinweis &#039;&#039;Missing File, see LogFile for Details&#039;&#039;. Weitere Einzelheiten zu diesem Fehler finden sich dann im Logfile. Es sollte klar sein, dass das Dashboard dann nicht (richtig) funktionieren kann.&lt;br /&gt;
&lt;br /&gt;
== Erklärung / Internes ==&lt;br /&gt;
[[Datei:Dashboard_Menulink.png|mini|120px|Darstellung des Dashboard Menüs]]&lt;br /&gt;
&lt;br /&gt;
Das Dashboard besteht in FHEM eigentlich aus zwei &amp;quot;Komponenten&amp;quot;. Dem eigentlichen definierten Dashboard und einem Weblink. Es muss sich aber nicht um den Weblink für das Dashboard kümmern werden, da dieser bei Bedarf vom Dashboard eigenständig erstellt wird.&lt;br /&gt;
&lt;br /&gt;
== Kleines Howto ==&lt;br /&gt;
;Schritt 1: Erstellen des Dashboards&lt;br /&gt;
:&amp;lt;code&amp;gt;define anyViews Dashboard&amp;lt;/code&amp;gt;&lt;br /&gt;
FHEM neu starten.&lt;br /&gt;
&lt;br /&gt;
;Schritt 2: Grundkonfiguration&lt;br /&gt;
&lt;br /&gt;
:attr anyViews dashboard_width 80%&lt;br /&gt;
:attr anyViews dashboard_tabcount 1&lt;br /&gt;
:attr anyViews dashboard_tab1groups &amp;lt;GRUPPE1&amp;gt;,&amp;lt;GRUPPE2&amp;gt;,&amp;lt;GRUPPE3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;GRUPPE1&amp;gt;, etc. sind durch richtige Gruppennamen zu ersetzen, z.B. Licht,Wetter oder ähnliches&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:Dashboard-KeinGruppe.png|mini|250px|&amp;quot;Objekt&amp;quot; ohne Gruppe]]&lt;br /&gt;
[[Datei:Dashboard-Gruppe.png|mini|250px|&amp;quot;Objekt&amp;quot; in einer Gruppe]]&lt;br /&gt;
&lt;br /&gt;
Danach sollen die beiden Gruppen im 1. Tab im Dashboard angezeigt werden. Zwar noch etwas chaotisch, aber das wird in den nächsten Schritten bearbeitet.&amp;lt;br&amp;gt;&lt;br /&gt;
[[#dashboard_tab1groups| Siehe dashboard_tab1groups]]&lt;br /&gt;
&lt;br /&gt;
Das Dashboard zeigt neben den beiden Gruppen bereits einiges andere mit an. Hier werden erst einmal diese &amp;quot;Nebensächlichkeiten&amp;quot; erklärt. Für die weiteren Schritte dieser Anleitung sollten die nun genannten Einstellungen unverändert bleiben. &lt;br /&gt;
&lt;br /&gt;
[[Datei:Dashboard_FirstGroup.png|mini|300px|Erste Gruppe im Dashboard]]&lt;br /&gt;
Am rechten Rand des Dashboards erscheinen einige Schalter (&amp;quot;Set&amp;quot;, &amp;quot;Detail&amp;quot;). Der Schalter &amp;quot;Detail&amp;quot; springt in die Detailansicht des Dashboards um dort z.B. weiter Attribute hinzuzufügen. &amp;lt;br&amp;gt;&lt;br /&gt;
Der Schalter &amp;quot;Set&amp;quot; speichert die per Drag&#039;n Drop vorgenommenen Änderungen &#039;&#039;&#039;temporär&#039;&#039;&#039; (diese sind dann noch nicht gespeichert!). &amp;quot;Set&amp;quot; wird in rot geschrieben wenn die Positionierung einer Gruppe geändert wurde, aber noch nicht mit dem &amp;quot;Set&amp;quot;-Schalter gesichert wurden! Ebenso wird mit dem Schalter &amp;quot;Set&amp;quot; das aktuell [[#dashboard_activetab|aktive Tab]] gesichert &amp;lt;br&amp;gt;&lt;br /&gt;
Die Schalterleiste kann über das Attribut &#039;&#039;dashboard_showtabs&#039;&#039; deaktiviert werden, oder wahlweise über oder unter dem Dashboard platziert werden.&amp;lt;br&amp;gt;&lt;br /&gt;
[[#dashboard_showtabs| Siehe dashboard_showtabs]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Im Gruppentitel erscheint an deren rechten Rand ein Symbol (+/-). Mit diesem kann man die Gruppe minimieren oder die voreingestellte Größe wieder herstellen.&amp;lt;br&amp;gt;&lt;br /&gt;
[[#dashboard_showtooglebuttons| Siehe dashboard_showtooglebuttons]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:Dashboard_Helper.png|mini|300px|Dashboard Helper]]&lt;br /&gt;
Zum besseren Ausrichten der einzelnen Gruppen werden zur Unterstützung einige Hilfen angezeigt. Die Erste ist die Anzeige eines Rahmens um das Dashboard. Genauer gesagt um die einzelnen Reihen/Spalten des Dashboards. Eine weitere Hilfe ist der Hintergrund der Gruppen. Dieser kann über die Mindestgröße der Gruppe hinaus gezogen werden. Damit können beliebig große Abstände zwischen den einzelnen Gruppen eingestellt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
[[#dashboard_showhelper| Siehe dashboard_showhelper]]&lt;br /&gt;
&lt;br /&gt;
Da nun die ersten Gruppen im Dashboard angezeigt werden, geht es nun darum, diese an die gewünschten Stellen zu platzieren. Dazu werden erst noch die verschiedenen Reihen und Spalten eingerichtet.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Dashboard verfügt über drei Reihen. Oben, Mitte und Unten. In der Standardeinstellung wird nur die mittlere Reihe angezeigt. Die mittlere Reihe sollte auch immer eingesetzt werden, da diese die Breite des Dashboard vorgibt. Für dieses kleine HowTo werden aber die obere und die mittlere Reihe eingeblendet, indem das Attribut &#039;&#039;&#039;dashboard_row&#039;&#039;&#039; auf &#039;&#039;&#039;top-center&#039;&#039;&#039; gestellt wird. Diese Einstellung gilt für das gesamte Dashboard und somit für alle verwendeten Tabs. Es ist nicht möglich, je Tab eine andere Einstellung zu wählen.&amp;lt;br&amp;gt; &lt;br /&gt;
[[#dashboard_row| Siehe dashboard_row]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Breite, die das Dashboard auf dem Bildschirm einnimmt, kann über das Attribut &#039;&#039;&#039;dashboard_width&#039;&#039;&#039; festgelegt werden. Standard ist die Breite von 100%. Es kann neben einem Prozentwert auch eine Breite in Pixel angegeben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
[[#dashboard_width| Siehe dashboard_width]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Höhe der einzelnen Reihen kann über die Attribute dashboard_rowtopheight für die obere Reihe, dashboard_rowbottomheight für die untere Reihe und dashboard_rowcenterheight für die mittlere Reihe festgelegt werden. Damit können die Reihen nach den eigenen Bedürfnissen angepasst werden. Für dieses HowTo wird &#039;&#039;&#039;dashboard_rowtopheight&#039;&#039;&#039; auf &#039;&#039;&#039;300&#039;&#039;&#039; und &#039;&#039;&#039;dashboard_rowcenterheight&#039;&#039;&#039; auf &#039;&#039;&#039;400&#039;&#039;&#039; eingestellt. Diese Einstellung gilt für das gesamte Dashboard und somit für alle verwendeten Tabs. Es ist nicht möglich je Tab eine andere Einstellung zu wählen.&amp;lt;br&amp;gt;&lt;br /&gt;
[[#dashboard_rowtopheight| Siehe dashboard_rowtopheight]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[#dashboard_rowbottomheight| Siehe dashboard_rowbottomheight]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[#dashboard_rowcenterheight| Siehe dashboard_rowheight]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die mittlere Reihe hat (historisch bedingt) eine Besonderheit. Diese kann in maximal 5 Spalten unterteilt werden. Für unser Beispiel setzten wird das Attribut &#039;&#039;&#039;dashboard_colcount&#039;&#039;&#039; auf &#039;&#039;&#039;2&#039;&#039;&#039;. Diese Einstellung gilt für das gesamte Dashboard und somit für alle verwendeten Tabs. Es ist nicht möglich je Tab eine andere Einstellung zu wählen.&amp;lt;br&amp;gt; Weiter legen wir mit dem Attribut [[#dashboard_rowcentercolwidth|dashboard_rowcentercolwidth]] die Breite der ersten Spalte mit 30% und die der zweiten Spalte mit 70% fest in dem wir dem Attribut &#039;&#039;&#039;dashboard_rowcentercolwidth&#039;&#039;&#039; den Wert &#039;&#039;&#039;30,70&#039;&#039;&#039; zuteilen.&amp;lt;br&amp;gt;&lt;br /&gt;
[[#dashboard_colcount | Siehe dashboard_colcount ]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sicherlich ist das positionieren einfach, und jeder wird das hin bekommen. Zwei, drei Worte möchte ich trotzdem darüber verlieren.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;ins&amp;gt;Verschieben&amp;lt;/ins&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
:Gruppen können in andere Reihen oder Spalten des Dashboards verschoben werden. Dazu muss in die Gruppe angeklickt werden und die Maustaste gedrückt gehalten werden. Los lässt man diese wenn man an der richtige Stelle ist. Das war wohl schon jedem klar.&amp;lt;br&amp;gt;&lt;br /&gt;
:Ein möglicher Zielort wird mit einem abgerundeten Platzhalter markiert. Dieser verschiebt auch, falls notwendig, andere Gruppen. Manchen wundert es warum dieser Zielort manchmal recht spät angezeigt wird. Dies hängt von der Position des Mauszeigers ab. Aha?! Je weiter oben man eine Gruppe anpackt, desto höher muss man die Maus schieben. Oder anders formuliert, wenn sich ca. 50% der Gruppenfläche im Zielbereich befinden wird dieser Zielort erst markiert. Das verschieben eine Gruppe von einem Tab in das andere ist nicht möglich. Letztendlich bleibt jedem nur &amp;lt;ins&amp;gt;ausprobieren&amp;lt;/ins&amp;gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Gruppen können über, unter, neben und vor anderen Gruppen verschoben werden. Auch das erfolgt wie bereits oben aufgeführt. Dies ist für viele nicht neues. Zu beachten ist aber das sich eine Gruppe nur dann vor oder neben eine anderen positionieren lässt wenn diese von der Breite in das Dashboard passen. Wenn Ihr also Gruppen nebeneinander positionieren wollt dürfen diese in Summe nicht breiter als das Dashboard sein.&amp;lt;br&amp;gt;&lt;br /&gt;
:Dies gilt nicht für die Höhen der Gruppen. Diese können in Summe höher als das Dashboard und höher als eine Reihe sein. Hier findet keine Begrenzung statt wie bei der Breite. Um jedoch das ein oder andere optisch nicht so schöne Ergebnis zu bekommen sollte darauf geachtet werden das keine Gruppe über eine Reihe hinaus ragt.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für unser Beispiel verschieben wir zum Testen die Gruppen in beliebige Reihen bzw. Spalten der mittleren Reihe. Danach bitte den &amp;quot;Set&amp;quot; Schalter drücken, dieser hat sich durch die verschiebe Aktionen bereits rot markiert.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Dashboard_Positionieren.png|mini|200px|Ausrichtung von einzelnen Gruppen]]&lt;br /&gt;
Das Ausrichten ist gleichermaßen einfach wie das Positionieren und sollte auch nichts Neues sein. Aber auch hier möchte ich darüber zwei, drei Worte verlieren.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Das Positionieren ist nur möglich, wenn das Dashboard nicht gesperrt ist (Lock/Unlock). Dann wird ein abgeschrägte Ecke an der Gruppe angezeigt, mit der die Größe gezogen werden kann.&lt;br /&gt;
:Jede Gruppe kann in Höhe und Breite beliebig gezogen werden, wobei genau das wieder einen Hacken hat: Das Größerziehen ist nur bedingt möglich. Die Breite/Höhe ist auf die Breite/Höhe der Dashboard Reihe (oder Spalte) begrenzt. Damit kann man eine Gruppe nicht über den Rand des Dashboards hinaus vergrößern.&amp;lt;br&amp;gt;&lt;br /&gt;
:Das Kleinerziehen ist auch nur bis zu einer Mindestgröße möglich. Die Mindestgröße ist abhängig vom Inhalt der Gruppe, kann also von Gruppe zu Gruppe unterschiedlich sein.&amp;lt;br&amp;gt;&lt;br /&gt;
:Ein Sonderverhalten beim Vergrößern/Verkleinern gibt es auch: Ist ein Gruppe höher als die Reihe, lässt sich die Gruppe zwar dort positionieren. Beim Ausrichten springt dann der untere Rand nicht auf die Mindesthöhe der Gruppe, sondern auf die maximale Höhe der Reihe. In diesem Fall sollte die Höhe der Reihe geändert werden. Ähnliches kann auch in der Breite auftreten.&amp;lt;br&amp;gt;&lt;br /&gt;
:Ändert sich der Inhalt einer Gruppe (wird z.B. ein Dummy dazugepackt), ändert sich die Positionierung der Gruppe &#039;&#039;&#039;nicht&#039;&#039;&#039; automatisch. In diesem Fall ist man immer gezwungen auch die Größe der Gruppe im Dashboard an die neue Gegebenheit anzupassen.&lt;br /&gt;
&lt;br /&gt;
Für unser Beispiel ziehen wir die Gruppen beliebig größer. Danach bitte den &amp;quot;Set&amp;quot;-Schalter drücken. Dieser hat sich durch die Verschiebeaktionen bereits rot markiert.&lt;br /&gt;
&lt;br /&gt;
Wie bereits etwas weiter oben erklärt wird die Positionierung der Gruppen im Dashboard durch die Betätigung des Schalters &amp;quot;Set&amp;quot; temporär zwischengespeichert. Dadurch wird die Positionierung bereits für einen Seitenrefresh gespeichert. Solange bis das Browserfenster geschlossen wird. Danach wären diese Einstellungen verloren.&amp;lt;br&amp;gt;&lt;br /&gt;
Darum ist es notwendig die Positionierung permanent zu speichern, damit auch nach einem Neustart von Fhem die getroffenen Einstellungen und Positionierungen vorhanden sind. Dies geht über den in Fhem bekannten weg über &#039;&#039;Save config&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
Wird der Schalter &amp;quot;Set&amp;quot; nicht betätigt, wird auch über &#039;&#039;Save config&#039;&#039; die Positionierung nicht gespeichert. Daher ist es wichtig, immer &#039;&#039;&#039;zuerst&#039;&#039;&#039; mit dem Schalter &#039;&#039;&#039;&amp;quot;Set&amp;quot;&#039;&#039;&#039; die Einstellung zwischenzuspeichern und &#039;&#039;&#039;danach mit &#039;&#039;Save config&#039;&#039;&#039;&#039;&#039; den Zwischenspeicher permanent zu sichern.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durch den Schalter &amp;quot;Set&amp;quot; wird für jedes Tab die Einstellung in das für das jeweilige Tab zuständige Attribut geschrieben. Für Tab 1 ist das Attribut &#039;&#039;dashboard_tab1sorting&#039;&#039; zuständig, für Tab 2 das Attribut &#039;&#039;dashboard_tab2sorting&#039;&#039;, usw. &#039;&#039;&#039;Diese Attribute sollten nicht editiert werden!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Es ist möglich jedem Tab einen eigenen individuellen Namen zu vergeben. Dazu ist für das jeweilige Tab das entsprechende Attribut zu befüllen. Z.B. für Tab 1 ist das Attribut &#039;&#039;dashboard_tab1name&#039;&#039; mit dem gewünschten Titel zu füllen.&amp;lt;br&amp;gt;&lt;br /&gt;
[[#dashboard_tab1name| Siehe dashboard_tab1name]]&lt;br /&gt;
&lt;br /&gt;
== Letzte Änderungen / Dashboard-Historie ==&lt;br /&gt;
&lt;br /&gt;
* (03.03.2014) Anzeigefehler bei readingGroups in einem Hiddenroom behoben&lt;br /&gt;
* (17.03.2014) Fehlerausgabe durch dashboard_webfrontendfilter behoben&lt;br /&gt;
* (26.03.2014) dashboard_showfullsize wird nicht im Raum &amp;quot;all&amp;quot; bzw. Everything angewendet&lt;br /&gt;
* (18.04.2014) Attribut dashboard_lock State entfernt. Kann nur noch in der Detailansicht verändert werden.&lt;br /&gt;
* (24.04.2014) Attribut dashboard_showhelper wird nicht mehr genutzt. Der Helper wird nur angezeigt wenn lockstate unlock ist.&lt;br /&gt;
* (24.04.2014) Schalter Detail und Set werden nun rechts angezeigt.&lt;br /&gt;
* (24.04.2014) Attribut dashboard_showtabs kann nicht mehr tabs-at-the-top-buttonbar-hidden oder tabs-on-the-bottom-buttonbar-hidden sein.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [http://forum.fhem.de/index.php/topic,16503.0.html Forenthread] über &#039;&#039;Dashboard&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Hilfsmodul]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=PanStamp&amp;diff=6811</id>
		<title>PanStamp</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=PanStamp&amp;diff=6811"/>
		<updated>2014-07-09T19:21:15Z</updated>

		<summary type="html">&lt;p&gt;Fidel: /* Arduino Sketches */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle}}&lt;br /&gt;
{{SEITENTITEL:panStamp}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Hardware&lt;br /&gt;
|Bild=panStamp.jpg&lt;br /&gt;
|Bildbeschreibung=panStamp&lt;br /&gt;
|HWProtocol=SWAP&lt;br /&gt;
|HWType=Sender, Empfänger, Sensor, [[Interface]]&lt;br /&gt;
|HWCategory=&lt;br /&gt;
|HWComm=868MHz (433/915MHz)&lt;br /&gt;
|HWChannels=&lt;br /&gt;
|HWVoltage=3.3V (panStick: 5V USB)&lt;br /&gt;
|HWPowerConsumption=&lt;br /&gt;
|HWPoweredBy=Battery (panStick: USB)&lt;br /&gt;
|HWSize=17.7 x 30.5 mm&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#panStamp 35_panStamp.pm] [http://fhem.de/commandref.html#SWAP 35_SWAP.pm]&lt;br /&gt;
|ModOwner=[http://forum.fhem.de/index.php?action=profile;u=430 Andre / justme1968]&lt;br /&gt;
|HWManufacturer=panStamp&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.panstamp.com/home PanStamps] sind [[Arduino]] Clones, die ein CC1101 Funkmodul beinhalten. Mit ihnen lassen sich Sensoren und Aktoren drahtlos an FHEM anbinden. Sie lassen sich genau wie Arduinos über die Ardunio IDE oder mit dem ino Kommandozeilen Binary programmieren.&lt;br /&gt;
&lt;br /&gt;
Der panStamp Software Stack unterstützt einen stromsparenden Power-Down- oder Sleep-Modus für batteriebetriebene Sensoren, aus dem diese dann nur zur eigentlichen Messung und Übertragung &amp;quot;aufwachen&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Zur Kommunikation in einem panStamp Netzwerk dient das &#039;&#039;Simple Wireless Abstract Protocol&#039;&#039; ([http://code.google.com/p/panstamp/wiki/SWAP SWAP]).&lt;br /&gt;
&lt;br /&gt;
Um einen panStamp in Betrieb zu nehmen muss er unbedingt mit einer Antenne oder einem stück Draht in der [https://code.google.com/p/panstamp/wiki/antennalengths richtigen Länge] bestückt sein. Ohne Antenne funktioniert die Übertragung nicht. Auch nicht auf kurze Distanzen.&lt;br /&gt;
&lt;br /&gt;
== Simple Wireless Abstract Protocol (SWAP) ==&lt;br /&gt;
Die komplette SWAP- Kommunikation ist registerbasiert und erfolgt mit Nachrichten um diese Register abzufragen, zu setzen und deren Inhalt zu senden. Alle Register lassen sich lesen, manche auch beschreiben.&lt;br /&gt;
&lt;br /&gt;
Jeder panStamp stellt elf Systemregister (00-0A) [http://code.google.com/p/panstamp/wiki/SWAPregisters] und beliebig viele sketchabängige Userregister (0B-)bereit. Die Beschreibung der jeweils von einem Sketch bereitgestellten Userregister erfolgt in &#039;&#039;Device Description Files&#039;&#039;, die in .../FHEM/lib/SWAP zu finden sind. Die Identifikation der Art eines panStamp und die Zuordnung zu einem bestimmten Device Description File erfolgt über den productCode der aus &#039;&#039;Hersteller&#039;&#039;- und &#039;&#039;Produkt&#039;&#039;-Id gebildet wird.&lt;br /&gt;
&lt;br /&gt;
In den Systemregistern steht z.&amp;amp;nbsp;B. der productCode, die Deviceadresse und das Übertragungsintervall. Konfigurierbare Register werden im EEPROM gesichert, so dass die Werte auch bei einem Neustart nicht verlorengehen. Beim ersten Starten eines panStamp ist das EEPROM mit FF initialisiert und alle konfigurierbaren Register haben diesen Wert, also z.&amp;amp;nbsp;B. die Adresse FF und das Intervall FFFF (zwischen 18 und 19 Stunden).&lt;br /&gt;
&lt;br /&gt;
Die Systemregister werden in der Device Detailansicht bei den InternalValues im oberen Bereich angezeigt und die User-Register als reading im unteren Bereich.&lt;br /&gt;
&lt;br /&gt;
Jeder panStamp durchläuft beim Start eine definierte Einschaltsequenz und überträgt als erstes seinen productCode. Batteriebetriebene panStamps warten anschließend drei Sekunden auf Konfigurationskommandos. Danach werden bestimmte Systemregister und aktuelle Messwerte gesendet.&lt;br /&gt;
&lt;br /&gt;
== FHEM Integration ==&lt;br /&gt;
Die Integration in FHEM erfolgt über eine reihe von Modulen die im folgenden genauer beschrieben werden.&lt;br /&gt;
=== panStamp ===&lt;br /&gt;
Als Schnittstelle zwischen FHEM und einem panStamp Netzwerk dient entweder ein panStick (USB Stick mit aufgestecktem panStamp) oder ein panStamp Shield mit integriertem panStamp an einem Raspberry PI. Der so angebundene panStamp wird mit einem Modem-Sketch als RF Modem verwenden und über das FHEM Modul panStamp angesprochen. Hierzu ist in FHEM ein entsprechendes Device anzulegen: &amp;lt;pre&amp;gt;define panStick panStamp /dev/ttyUSBx@38400&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dieses panStamp Device versucht dann als erstes alle panStamps im Netz zu finden und per autocreate anzulegen.&lt;br /&gt;
&lt;br /&gt;
=== SWAP ===&lt;br /&gt;
[[Datei:SWAP_ 0000000100000005-detail.png|mini|hochkant=2.5|Readings]]&lt;br /&gt;
Das SWAP Modul ermöglicht die generische Integration beliebiger panStamp Sensoren und Aktoren in FHEM. Mit Hilfe der im jeweiligen Device Description File hinterlegten Beschreibung werden hierzu automatisch userReadings angelegt die neben den reinen Registerwerten in hex auch &#039;menschenlesbare&#039; readings der Sensorwerte erzeugen. Damit dies funktioniert, muss das Attribut ProductCode korrekt gesetzt sein. Das geschieht normalerweise automatisch beim Anlegen des Device.&lt;br /&gt;
&lt;br /&gt;
Hier Beispielhaft anhand eines BMP085 Temperatur- und Luftdrucksensors dargestellt:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;attr temppress userReadings voltage:0B-Voltage {hex(ReadingsVal($name,&amp;quot;0B-Voltage&amp;quot;,&amp;quot;0&amp;quot;))*0.001}, temperature:0C.0-Temperature {hex(ReadingsVal($name,&amp;quot;0C.0-Temperature&amp;quot;,&amp;quot;0&amp;quot;))*0.1-50}, pressure:0C.1-Pressure {hex(ReadingsVal($name,&amp;quot;0C.1-Pressure&amp;quot;,&amp;quot;0&amp;quot;))*0.01}, pressureNN:0C.1-Pressure {sprintf(&amp;quot;%.2f&amp;quot;,hex(ReadingsVal($name,&amp;quot;0C.1-Pressure&amp;quot;,&amp;quot;0&amp;quot;))*0.01 + AttrVal(&amp;quot;global&amp;quot;, &amp;quot;altitude&amp;quot;, 0)/8.5)}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:SWAP_ 0000000100000005.png|mini|hochkant=2.5|Resultat eines stateFormat]]&lt;br /&gt;
Aus diesen readings kann dann mit stateFormat die gewünschte Darstellung für die Raumübersicht erzeugt werden:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;attr temppress stateFormat {sprintf(&amp;quot;%.1f&amp;quot;,ReadingsVal($name,&amp;quot;temperature&amp;quot;,0)).&amp;quot;°C &amp;quot;.sprintf(&amp;quot;%.1f&amp;quot;,ReadingsVal($name,&amp;quot;pressureNN&amp;quot;,0)).&amp;quot;mbar&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sobald ein SWAP Device mit dem productCode korrekt angelegt wurde, können die Userregister bzw. alle Register aufgelistet werden: &lt;br /&gt;
 get &amp;lt;device&amp;gt; regList&lt;br /&gt;
 get &amp;lt;device&amp;gt; regListALL&lt;br /&gt;
&lt;br /&gt;
und einzelne Register abgefragt und gesetzt werden:&lt;br /&gt;
 set &amp;lt;device&amp;gt; regGet &amp;lt;ID&amp;gt;&lt;br /&gt;
 set &amp;lt;device&amp;gt; regSet &amp;lt;ID&amp;gt; &amp;lt;value&amp;gt;&lt;br /&gt;
Für die Systemregister kann hierzu statt der RegisterID auch der Registername (siehe regListAll) verwendet werden.&lt;br /&gt;
&lt;br /&gt;
==== Neue panStamps in Betrieb nehmen ====&lt;br /&gt;
&#039;&#039;&#039;Info: Das SWAP Modul unterstützt autocreate. Bei der Inbetriebnahme ist autocreate zu aktivieren!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Neue panStamps sollten nur Einer nach dem Anderen in Betrieb genommen werden, da sie zuerst mit einer eindeutigen Device-Adresse (ungleich FF und grösser 01) versehen werden müssen. Bei batteriebetriebenen Sensoren sollte auch das Sendeintervall auf einen sinnvollen Wert gesetzt werden:&lt;br /&gt;
 set &amp;lt;device&amp;gt; regSet 09 &amp;lt;device adresse als 2 stellige hex zahl&amp;gt;&lt;br /&gt;
 set &amp;lt;device&amp;gt; regSet 0A &amp;lt;intervall in sekunden als 4 stellige hex zahl&amp;gt;&lt;br /&gt;
Für Devices im Power-Down-Modus werden diese Kommandos in eine Warteschlange gestellt und übertragen, sobald das Device seine Initialisierungssequenz durchläuft. Hierzu ist nach Absetzen der Kommandos Reset zu drücken oder die Stromquelle erneut zu verbinden.&lt;br /&gt;
&lt;br /&gt;
Das SWAP modul versucht, ein Device mit der default Adresse &amp;lt;code&amp;gt;FF&amp;lt;/code&amp;gt; automatisch auf die erste freie Adresse im Bereich &amp;lt;code&amp;gt;F0&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;FE&amp;lt;/code&amp;gt; zu ändern.&lt;br /&gt;
&lt;br /&gt;
Für batteriebetriebene Devices (genauer: Devices die den Power-Down-Modus unterstützen) wird das Default Sendeintervall von &amp;lt;code&amp;gt;FFFF&amp;lt;/code&amp;gt; zu &amp;lt;code&amp;gt;0384&amp;lt;/code&amp;gt; (900 Sekunden) geändert.&lt;br /&gt;
Es gibt mit bestimmten panstamp lib Versionen das Problem das ein wert von FFFF in 0A zum Überlauf führt und dann ununterbrochen gesendet wird. Im fhem Modul wird versucht das abzufangen. Das funktioniert auf manchen langsamen host systemen (z.B. FritzBox) nicht, weil der panstamp so schnell sendet das fhem so mit dem abarbeiten beschäftigt ist das es selber nicht zum senden kommt.&lt;br /&gt;
Zur Abhilfe kann im sketch in setup() ganz am Anfang  ein&lt;br /&gt;
  EEPROM.write(EEPROM_TX_INTERVAL, 0x55);&lt;br /&gt;
  EEPROM.write(EEPROM_TX_INTERVAL+1, 0x55);&lt;br /&gt;
eingefügt werden und noch mal flashen. Wenn der Sketch damit ein mal durchgelaufen ist können diese beiden Zeilen wieder entfernen und der panstamp noch mal geflasht.&lt;br /&gt;
&lt;br /&gt;
Automatisch gesetzte Werte sollten danach manuell auf die jeweilige Installation angepasst werden.&lt;br /&gt;
&lt;br /&gt;
==== Beispiele ====&lt;br /&gt;
===== Bodenfeuchte =====&lt;br /&gt;
Der panStamp soilmoisture Sketch aus dem examples Verzeichnis ist mit dem Standard SWAP Modul kompatibel. &lt;br /&gt;
&lt;br /&gt;
Eine für einen Vegetronix sensor angepasste Version kann von [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ sourceforge] heruntergeladen werden. Das Übertragungsintervall ist wie üblich über das regsiter 0A konfigurierbar. Der Sensor wird and GND, D7 für die Versorgungsspannung und A4 für den Messwert angeschlossen. Erfahrungen haben gezeigt, dass bei einem fünfminütigen Übertragungsintervall nach 12 Monaten Laufzeit die Batteriespannung von 1.55V auf 1.4V abfällt. Das würde bedeuten, dass eine Batterie im Batterieboard mindestens eine Laufzeit von drei Jahren haben sollte.&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;MyBodenfeuchte&amp;gt; stateFormat VWC_A%&lt;br /&gt;
 set &amp;lt;MyBodenfeuchte&amp;gt; userReadings Level0_Voltage {hex(ReadingsVal($name,&amp;quot;0C.0-Moisture_level_0&amp;quot;,&amp;quot;0&amp;quot;))*(3.3/1024)}, &lt;br /&gt;
     VWC_A:0C.0-Moisture_level_0 {sprintf(&amp;quot;%.0f&amp;quot;,(11.6552 * (ReadingsVal($name,&amp;quot;Level0_Voltage&amp;quot;,&amp;quot;0&amp;quot;))**4 + 7.10835 * &lt;br /&gt;
        (ReadingsVal($name,&amp;quot;Level0_Voltage&amp;quot;,&amp;quot;0&amp;quot;))**2 - 0.569557) / ((ReadingsVal($name,&amp;quot;Level0_Voltage&amp;quot;,&amp;quot;0&amp;quot;))**2 + 1))}, &lt;br /&gt;
     voltage:0B-Voltage {hex(ReadingsVal($name,&amp;quot;0B-Voltage&amp;quot;,&amp;quot;0&amp;quot;))*0.001}, &lt;br /&gt;
     battery:0B-Voltage {(ReadingsVal($name,&amp;quot;voltage&amp;quot;,&amp;quot;0&amp;quot;)&amp;lt;1?&amp;quot;low&amp;quot;:&amp;quot;ok&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
[[Datei:SWAP_ soilmositure-plot.jpg|mini|x100px|Bodenfeuchte]]&lt;br /&gt;
&amp;lt;div class=&amp;quot;tright&amp;quot; style=&amp;quot;clear:none&amp;quot;&amp;gt;[[Datei:panstamp_vegetronix1.jpg|mini|ohne|x130px|Vegetronix Bodenfeuchtesensor an Panstamp]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;tright&amp;quot; style=&amp;quot;clear:none&amp;quot;&amp;gt;[[Datei:panstamp_vegetronix2.jpg|mini|ohne|x130px|Vegetronix Bodenfeuchtesensor an Panstamp]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit einem entsprechend erweiterten Sketch lassen sich auch mehrere Sensoren an einem panStamp auslesen.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Bilder zeigen eine Panstamp/Vegetronix Außeneinheit im IP65-Gehäuse. Dieser Aufbau wird ganzjährig den Witterungseinflüssen ausgesetzt. Die auf den Stab aufgesetzte Antenne muss nicht verwendet werden, bei kürzeren Funkstrecken ist eine innenliegende Drahtantenne ausreichend. Bitte in FHEM den RSSI- und LQI-Wert sowie die Gleichmäßigkeit des Empfangens der 5 Minuten Sendeintervalle dementsprechend beobachten.&lt;br /&gt;
&lt;br /&gt;
=== SWAP_XXXXXXXXXXXXXXXX ===&lt;br /&gt;
Besonders bei Aktoren ist oft eine engere FHEM-Integration sinnvoll, um FHEM Konzepte wie on/off/on-for-timer direkt abzubilden und nicht mehr nur auf die Registerebene und regSet und regGet Kommandos beschränkt zu sein.&lt;br /&gt;
&lt;br /&gt;
Um per autocreate automatisch das passende Modul laden zu können, müssen diese Module nach dem Schema SWAP_XXXXXXXXXXXXXXXX.pm benannt sein wobei XXXXXXXXXXXXXXXX für den jeweiligen productCode steht.&lt;br /&gt;
&lt;br /&gt;
==== SWAP_0000002200000003 ====&lt;br /&gt;
[[Datei:SWAP_0000002200000003.png|mini|rechts|hochkant=2.5|RGB LED Driver Board]]&lt;br /&gt;
Ein FHEM Modul für das modifizierte panStamp RGB LED Driver Board. &lt;br /&gt;
&lt;br /&gt;
Das Board unterstützt RGBW LEDs und lässt sich per Infrarot Fernbedienung, DMX Controller (z.&amp;amp;nbsp;B. als Unterputz Touchpanel) und FHEM bedienen.&lt;br /&gt;
&lt;br /&gt;
Der Funktionsumfang wird in diesem [http://forum.fhem.de/index.php/topic,12487.msg81923.html#msg81923 Forenthread] vorgestellt. Die Hardware für das Board wird [http://forum.fhem.de/index.php/topic,13890.0.html  hier] im FHEM Forum vorgestellt und ein Prototyp ist [http://forum.fhem.de/index.php/topic,12487.msg85777.html#msg85777 hier] zu sehen.&lt;br /&gt;
=====Upate 2014-01-11===== &lt;br /&gt;
Zur Zeit ist Version 2 des Boards in Vorbereiteung. Die Projektseite zur Hardware findet sich [http://itse.homeip.net/projekte/12/6/ hier]. &lt;br /&gt;
&lt;br /&gt;
Demnächst wird eine aktualisiert Version des Fhem Moduls und panStamp Sketches eingecheckt. Eine Übersicht über die dann vorhandene Funktionalität:&lt;br /&gt;
&lt;br /&gt;
was geht:&lt;br /&gt;
* bis zu vier led kanäle (je nach kombination von ir und soft pwm)&lt;br /&gt;
* ir senden&lt;br /&gt;
* ir empfangen&lt;br /&gt;
* messen ob die led versorgung an ist&lt;br /&gt;
* helligkeit eines an A2 angeschlossenen helligkeits sensors&lt;br /&gt;
* konfiguration der dmx basis adresse über das swap register 0x12&lt;br /&gt;
* optional soft on auf letzten wert&lt;br /&gt;
* alles was auch vorher schon ging: dimmen, faden, ir fernbedienungen anlernen, ...&lt;br /&gt;
&lt;br /&gt;
wichtig zu wissen:&lt;br /&gt;
* wenn ir aktiv ist und kein soft pwm lässt sich der 4. kanal nur ein und aus schalten&lt;br /&gt;
* wenn ir aktiv ist muss soft pwm aktiv sein um den 4. kanäle auch zu dimmen&lt;br /&gt;
* es wird nur ein zusätzlicher kanal tatsächlich schon unterstützt. der fünfte kommt noch&lt;br /&gt;
* bei ir senden sind nur die aufrufe für sony und nec tatsächlich eingebaut. die anderen sind aber einfach zu ergänzen&lt;br /&gt;
* beim ir senden sind noch keine Wiederholungen eingebaut. die müssen laut protokoll aber eigentlich sein&lt;br /&gt;
&lt;br /&gt;
was noch kommt:&lt;br /&gt;
* besseres soft pwm&lt;br /&gt;
* mehr konfiguration bezüglich default verhalten. ramp zeiten, delays, ...&lt;br /&gt;
* hsv farb modell um besser zu faden und vor allem um den weiss anteil automatisch auf die weiss leds zu legen&lt;br /&gt;
* die virtuellen channel &lt;br /&gt;
* fhem kompatibles ir senden&lt;br /&gt;
* sofortiges senden von helligkeit und led spannung bei änderung&lt;br /&gt;
* andere ir lib mit sehr viel besserer geräte unterstützung&lt;br /&gt;
&lt;br /&gt;
wie gehabt muss alles über config.h konfiguriert werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== weitrere Screenshots =====&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:SWAP_0000002200000003-internal.png|InternalValues&lt;br /&gt;
File:SWAP_0000002200000003-readings.png|Readings&lt;br /&gt;
File:SWAP_0000002200000003-attributes.png|Attributes&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Arduino Sketches ==&lt;br /&gt;
Zum Flashen der Panstamps wird die Arduino IDE benötigt. Eine Installationsanleitung ist unter folgendem Link zu finden:&lt;br /&gt;
:https://code.google.com/p/panstamp/wiki/firststeps&lt;br /&gt;
&lt;br /&gt;
Für den RGB-Driver sketch sind je nach gewünschtem Funktionsumfang noch folgende libs zu installieren:&lt;br /&gt;
&lt;br /&gt;
* IR lib - https://github.com/shirriff/Arduino-IRremote&lt;br /&gt;
* DMX lib- http://www.mathertel.de/Arduino/DMXSerial.aspx&lt;br /&gt;
&lt;br /&gt;
Die Librarys sollten entweder mit dem entsprechenden Menüpunkt in die IDE integriert werden oder jeweils nach auspacken des zip files als als kompletten Ordner im Arduino libraries verzeichnis abgelegt werden (siehe [http://www.arduino.cc/en/Hacking/Libraries)]).&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version des RGB-Driver Sketches findet sich auf [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ sourceforge].&lt;br /&gt;
&lt;br /&gt;
Dieser muss in Arduino\libraries\panstamp\examples\sketches entpackt und die rbgdriver.ino gestartet werden. In der Arduino IDE sollte unter Tools-&amp;gt;Board &amp;quot;Arduino Pro or Pro Mini (3.3V, 8MHz) w/ Atmega328&amp;quot; eingestellt sein. Wenn man das boards.txt file von [http://code.google.com/p/panstamp/downloads/detail?name=boards.txt&amp;amp;can=2&amp;amp;q= hier] installiert kann man in der IDE auch direkt PanStamp als Plattform auswählen.&lt;br /&gt;
&lt;br /&gt;
Welche Features der sketch bietet lässt sich im config.h file durch ein- oder auskommentieren der #define ENABLE_... Zeilen festlegen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Besonderheiten bei der Nutzung einiger Funktionen&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
* #define ENABLE_DMX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hierbei ist darauf zu achten, dass in der DMX-Lib in der Datei DMXSerial.h die Zeile&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#define DmxModePin 2     // Arduino pin 2 for controlling the data direction&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#define DmxModePin 7     // Arduino pin 7 for controlling the data direction&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
abgeändert werden muss.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* #define HAS_SENSOR (ermöglicht die Nutzung eines DHT22 Sensors zur Auswerung von Temperatur und Luftfeuchtigkeit)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
USE_SOFT_PWM;&lt;br /&gt;
ENABLE_IR_SEND;&lt;br /&gt;
ENABLE_REPEATER;&lt;br /&gt;
&lt;br /&gt;
sollte hierfür auskommentiert sein.&lt;br /&gt;
&lt;br /&gt;
In der IRremote.cpp Datei in der Irremote Library muss die Zeile&lt;br /&gt;
&lt;br /&gt;
void IRrecv::disableIRIn() &lt;br /&gt;
{&lt;br /&gt;
TIMER_DISABLE_INTR;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sowie die Irremote.h Datei unter Public: um die Zeile &lt;br /&gt;
&lt;br /&gt;
void disableIRIn();&lt;br /&gt;
&lt;br /&gt;
erweitert werden.&lt;br /&gt;
&lt;br /&gt;
Der Daten-Pin des DHT22 Sensors muss hierfür an A2 des Panstamps angeschlossen werden.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.panstamp.com/home panStamp] panStamp Hersteller&lt;br /&gt;
* [http://itse.homeip.net/projekte/12/6/ Projektseite] für das RGB-Multi-Board.&lt;br /&gt;
* [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ rgbdriver sketch] auf sourceforge&lt;br /&gt;
* [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ soilmoisture sketch]  auf sourceforge&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Interfaces]]&lt;br /&gt;
[[Kategorie:Other Components]]&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=PanStamp&amp;diff=6810</id>
		<title>PanStamp</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=PanStamp&amp;diff=6810"/>
		<updated>2014-07-09T19:20:36Z</updated>

		<summary type="html">&lt;p&gt;Fidel: /* Arduino Sketches */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle}}&lt;br /&gt;
{{SEITENTITEL:panStamp}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Hardware&lt;br /&gt;
|Bild=panStamp.jpg&lt;br /&gt;
|Bildbeschreibung=panStamp&lt;br /&gt;
|HWProtocol=SWAP&lt;br /&gt;
|HWType=Sender, Empfänger, Sensor, [[Interface]]&lt;br /&gt;
|HWCategory=&lt;br /&gt;
|HWComm=868MHz (433/915MHz)&lt;br /&gt;
|HWChannels=&lt;br /&gt;
|HWVoltage=3.3V (panStick: 5V USB)&lt;br /&gt;
|HWPowerConsumption=&lt;br /&gt;
|HWPoweredBy=Battery (panStick: USB)&lt;br /&gt;
|HWSize=17.7 x 30.5 mm&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#panStamp 35_panStamp.pm] [http://fhem.de/commandref.html#SWAP 35_SWAP.pm]&lt;br /&gt;
|ModOwner=[http://forum.fhem.de/index.php?action=profile;u=430 Andre / justme1968]&lt;br /&gt;
|HWManufacturer=panStamp&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.panstamp.com/home PanStamps] sind [[Arduino]] Clones, die ein CC1101 Funkmodul beinhalten. Mit ihnen lassen sich Sensoren und Aktoren drahtlos an FHEM anbinden. Sie lassen sich genau wie Arduinos über die Ardunio IDE oder mit dem ino Kommandozeilen Binary programmieren.&lt;br /&gt;
&lt;br /&gt;
Der panStamp Software Stack unterstützt einen stromsparenden Power-Down- oder Sleep-Modus für batteriebetriebene Sensoren, aus dem diese dann nur zur eigentlichen Messung und Übertragung &amp;quot;aufwachen&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Zur Kommunikation in einem panStamp Netzwerk dient das &#039;&#039;Simple Wireless Abstract Protocol&#039;&#039; ([http://code.google.com/p/panstamp/wiki/SWAP SWAP]).&lt;br /&gt;
&lt;br /&gt;
Um einen panStamp in Betrieb zu nehmen muss er unbedingt mit einer Antenne oder einem stück Draht in der [https://code.google.com/p/panstamp/wiki/antennalengths richtigen Länge] bestückt sein. Ohne Antenne funktioniert die Übertragung nicht. Auch nicht auf kurze Distanzen.&lt;br /&gt;
&lt;br /&gt;
== Simple Wireless Abstract Protocol (SWAP) ==&lt;br /&gt;
Die komplette SWAP- Kommunikation ist registerbasiert und erfolgt mit Nachrichten um diese Register abzufragen, zu setzen und deren Inhalt zu senden. Alle Register lassen sich lesen, manche auch beschreiben.&lt;br /&gt;
&lt;br /&gt;
Jeder panStamp stellt elf Systemregister (00-0A) [http://code.google.com/p/panstamp/wiki/SWAPregisters] und beliebig viele sketchabängige Userregister (0B-)bereit. Die Beschreibung der jeweils von einem Sketch bereitgestellten Userregister erfolgt in &#039;&#039;Device Description Files&#039;&#039;, die in .../FHEM/lib/SWAP zu finden sind. Die Identifikation der Art eines panStamp und die Zuordnung zu einem bestimmten Device Description File erfolgt über den productCode der aus &#039;&#039;Hersteller&#039;&#039;- und &#039;&#039;Produkt&#039;&#039;-Id gebildet wird.&lt;br /&gt;
&lt;br /&gt;
In den Systemregistern steht z.&amp;amp;nbsp;B. der productCode, die Deviceadresse und das Übertragungsintervall. Konfigurierbare Register werden im EEPROM gesichert, so dass die Werte auch bei einem Neustart nicht verlorengehen. Beim ersten Starten eines panStamp ist das EEPROM mit FF initialisiert und alle konfigurierbaren Register haben diesen Wert, also z.&amp;amp;nbsp;B. die Adresse FF und das Intervall FFFF (zwischen 18 und 19 Stunden).&lt;br /&gt;
&lt;br /&gt;
Die Systemregister werden in der Device Detailansicht bei den InternalValues im oberen Bereich angezeigt und die User-Register als reading im unteren Bereich.&lt;br /&gt;
&lt;br /&gt;
Jeder panStamp durchläuft beim Start eine definierte Einschaltsequenz und überträgt als erstes seinen productCode. Batteriebetriebene panStamps warten anschließend drei Sekunden auf Konfigurationskommandos. Danach werden bestimmte Systemregister und aktuelle Messwerte gesendet.&lt;br /&gt;
&lt;br /&gt;
== FHEM Integration ==&lt;br /&gt;
Die Integration in FHEM erfolgt über eine reihe von Modulen die im folgenden genauer beschrieben werden.&lt;br /&gt;
=== panStamp ===&lt;br /&gt;
Als Schnittstelle zwischen FHEM und einem panStamp Netzwerk dient entweder ein panStick (USB Stick mit aufgestecktem panStamp) oder ein panStamp Shield mit integriertem panStamp an einem Raspberry PI. Der so angebundene panStamp wird mit einem Modem-Sketch als RF Modem verwenden und über das FHEM Modul panStamp angesprochen. Hierzu ist in FHEM ein entsprechendes Device anzulegen: &amp;lt;pre&amp;gt;define panStick panStamp /dev/ttyUSBx@38400&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dieses panStamp Device versucht dann als erstes alle panStamps im Netz zu finden und per autocreate anzulegen.&lt;br /&gt;
&lt;br /&gt;
=== SWAP ===&lt;br /&gt;
[[Datei:SWAP_ 0000000100000005-detail.png|mini|hochkant=2.5|Readings]]&lt;br /&gt;
Das SWAP Modul ermöglicht die generische Integration beliebiger panStamp Sensoren und Aktoren in FHEM. Mit Hilfe der im jeweiligen Device Description File hinterlegten Beschreibung werden hierzu automatisch userReadings angelegt die neben den reinen Registerwerten in hex auch &#039;menschenlesbare&#039; readings der Sensorwerte erzeugen. Damit dies funktioniert, muss das Attribut ProductCode korrekt gesetzt sein. Das geschieht normalerweise automatisch beim Anlegen des Device.&lt;br /&gt;
&lt;br /&gt;
Hier Beispielhaft anhand eines BMP085 Temperatur- und Luftdrucksensors dargestellt:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;attr temppress userReadings voltage:0B-Voltage {hex(ReadingsVal($name,&amp;quot;0B-Voltage&amp;quot;,&amp;quot;0&amp;quot;))*0.001}, temperature:0C.0-Temperature {hex(ReadingsVal($name,&amp;quot;0C.0-Temperature&amp;quot;,&amp;quot;0&amp;quot;))*0.1-50}, pressure:0C.1-Pressure {hex(ReadingsVal($name,&amp;quot;0C.1-Pressure&amp;quot;,&amp;quot;0&amp;quot;))*0.01}, pressureNN:0C.1-Pressure {sprintf(&amp;quot;%.2f&amp;quot;,hex(ReadingsVal($name,&amp;quot;0C.1-Pressure&amp;quot;,&amp;quot;0&amp;quot;))*0.01 + AttrVal(&amp;quot;global&amp;quot;, &amp;quot;altitude&amp;quot;, 0)/8.5)}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:SWAP_ 0000000100000005.png|mini|hochkant=2.5|Resultat eines stateFormat]]&lt;br /&gt;
Aus diesen readings kann dann mit stateFormat die gewünschte Darstellung für die Raumübersicht erzeugt werden:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;attr temppress stateFormat {sprintf(&amp;quot;%.1f&amp;quot;,ReadingsVal($name,&amp;quot;temperature&amp;quot;,0)).&amp;quot;°C &amp;quot;.sprintf(&amp;quot;%.1f&amp;quot;,ReadingsVal($name,&amp;quot;pressureNN&amp;quot;,0)).&amp;quot;mbar&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sobald ein SWAP Device mit dem productCode korrekt angelegt wurde, können die Userregister bzw. alle Register aufgelistet werden: &lt;br /&gt;
 get &amp;lt;device&amp;gt; regList&lt;br /&gt;
 get &amp;lt;device&amp;gt; regListALL&lt;br /&gt;
&lt;br /&gt;
und einzelne Register abgefragt und gesetzt werden:&lt;br /&gt;
 set &amp;lt;device&amp;gt; regGet &amp;lt;ID&amp;gt;&lt;br /&gt;
 set &amp;lt;device&amp;gt; regSet &amp;lt;ID&amp;gt; &amp;lt;value&amp;gt;&lt;br /&gt;
Für die Systemregister kann hierzu statt der RegisterID auch der Registername (siehe regListAll) verwendet werden.&lt;br /&gt;
&lt;br /&gt;
==== Neue panStamps in Betrieb nehmen ====&lt;br /&gt;
&#039;&#039;&#039;Info: Das SWAP Modul unterstützt autocreate. Bei der Inbetriebnahme ist autocreate zu aktivieren!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Neue panStamps sollten nur Einer nach dem Anderen in Betrieb genommen werden, da sie zuerst mit einer eindeutigen Device-Adresse (ungleich FF und grösser 01) versehen werden müssen. Bei batteriebetriebenen Sensoren sollte auch das Sendeintervall auf einen sinnvollen Wert gesetzt werden:&lt;br /&gt;
 set &amp;lt;device&amp;gt; regSet 09 &amp;lt;device adresse als 2 stellige hex zahl&amp;gt;&lt;br /&gt;
 set &amp;lt;device&amp;gt; regSet 0A &amp;lt;intervall in sekunden als 4 stellige hex zahl&amp;gt;&lt;br /&gt;
Für Devices im Power-Down-Modus werden diese Kommandos in eine Warteschlange gestellt und übertragen, sobald das Device seine Initialisierungssequenz durchläuft. Hierzu ist nach Absetzen der Kommandos Reset zu drücken oder die Stromquelle erneut zu verbinden.&lt;br /&gt;
&lt;br /&gt;
Das SWAP modul versucht, ein Device mit der default Adresse &amp;lt;code&amp;gt;FF&amp;lt;/code&amp;gt; automatisch auf die erste freie Adresse im Bereich &amp;lt;code&amp;gt;F0&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;FE&amp;lt;/code&amp;gt; zu ändern.&lt;br /&gt;
&lt;br /&gt;
Für batteriebetriebene Devices (genauer: Devices die den Power-Down-Modus unterstützen) wird das Default Sendeintervall von &amp;lt;code&amp;gt;FFFF&amp;lt;/code&amp;gt; zu &amp;lt;code&amp;gt;0384&amp;lt;/code&amp;gt; (900 Sekunden) geändert.&lt;br /&gt;
Es gibt mit bestimmten panstamp lib Versionen das Problem das ein wert von FFFF in 0A zum Überlauf führt und dann ununterbrochen gesendet wird. Im fhem Modul wird versucht das abzufangen. Das funktioniert auf manchen langsamen host systemen (z.B. FritzBox) nicht, weil der panstamp so schnell sendet das fhem so mit dem abarbeiten beschäftigt ist das es selber nicht zum senden kommt.&lt;br /&gt;
Zur Abhilfe kann im sketch in setup() ganz am Anfang  ein&lt;br /&gt;
  EEPROM.write(EEPROM_TX_INTERVAL, 0x55);&lt;br /&gt;
  EEPROM.write(EEPROM_TX_INTERVAL+1, 0x55);&lt;br /&gt;
eingefügt werden und noch mal flashen. Wenn der Sketch damit ein mal durchgelaufen ist können diese beiden Zeilen wieder entfernen und der panstamp noch mal geflasht.&lt;br /&gt;
&lt;br /&gt;
Automatisch gesetzte Werte sollten danach manuell auf die jeweilige Installation angepasst werden.&lt;br /&gt;
&lt;br /&gt;
==== Beispiele ====&lt;br /&gt;
===== Bodenfeuchte =====&lt;br /&gt;
Der panStamp soilmoisture Sketch aus dem examples Verzeichnis ist mit dem Standard SWAP Modul kompatibel. &lt;br /&gt;
&lt;br /&gt;
Eine für einen Vegetronix sensor angepasste Version kann von [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ sourceforge] heruntergeladen werden. Das Übertragungsintervall ist wie üblich über das regsiter 0A konfigurierbar. Der Sensor wird and GND, D7 für die Versorgungsspannung und A4 für den Messwert angeschlossen. Erfahrungen haben gezeigt, dass bei einem fünfminütigen Übertragungsintervall nach 12 Monaten Laufzeit die Batteriespannung von 1.55V auf 1.4V abfällt. Das würde bedeuten, dass eine Batterie im Batterieboard mindestens eine Laufzeit von drei Jahren haben sollte.&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;MyBodenfeuchte&amp;gt; stateFormat VWC_A%&lt;br /&gt;
 set &amp;lt;MyBodenfeuchte&amp;gt; userReadings Level0_Voltage {hex(ReadingsVal($name,&amp;quot;0C.0-Moisture_level_0&amp;quot;,&amp;quot;0&amp;quot;))*(3.3/1024)}, &lt;br /&gt;
     VWC_A:0C.0-Moisture_level_0 {sprintf(&amp;quot;%.0f&amp;quot;,(11.6552 * (ReadingsVal($name,&amp;quot;Level0_Voltage&amp;quot;,&amp;quot;0&amp;quot;))**4 + 7.10835 * &lt;br /&gt;
        (ReadingsVal($name,&amp;quot;Level0_Voltage&amp;quot;,&amp;quot;0&amp;quot;))**2 - 0.569557) / ((ReadingsVal($name,&amp;quot;Level0_Voltage&amp;quot;,&amp;quot;0&amp;quot;))**2 + 1))}, &lt;br /&gt;
     voltage:0B-Voltage {hex(ReadingsVal($name,&amp;quot;0B-Voltage&amp;quot;,&amp;quot;0&amp;quot;))*0.001}, &lt;br /&gt;
     battery:0B-Voltage {(ReadingsVal($name,&amp;quot;voltage&amp;quot;,&amp;quot;0&amp;quot;)&amp;lt;1?&amp;quot;low&amp;quot;:&amp;quot;ok&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
[[Datei:SWAP_ soilmositure-plot.jpg|mini|x100px|Bodenfeuchte]]&lt;br /&gt;
&amp;lt;div class=&amp;quot;tright&amp;quot; style=&amp;quot;clear:none&amp;quot;&amp;gt;[[Datei:panstamp_vegetronix1.jpg|mini|ohne|x130px|Vegetronix Bodenfeuchtesensor an Panstamp]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;tright&amp;quot; style=&amp;quot;clear:none&amp;quot;&amp;gt;[[Datei:panstamp_vegetronix2.jpg|mini|ohne|x130px|Vegetronix Bodenfeuchtesensor an Panstamp]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit einem entsprechend erweiterten Sketch lassen sich auch mehrere Sensoren an einem panStamp auslesen.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Bilder zeigen eine Panstamp/Vegetronix Außeneinheit im IP65-Gehäuse. Dieser Aufbau wird ganzjährig den Witterungseinflüssen ausgesetzt. Die auf den Stab aufgesetzte Antenne muss nicht verwendet werden, bei kürzeren Funkstrecken ist eine innenliegende Drahtantenne ausreichend. Bitte in FHEM den RSSI- und LQI-Wert sowie die Gleichmäßigkeit des Empfangens der 5 Minuten Sendeintervalle dementsprechend beobachten.&lt;br /&gt;
&lt;br /&gt;
=== SWAP_XXXXXXXXXXXXXXXX ===&lt;br /&gt;
Besonders bei Aktoren ist oft eine engere FHEM-Integration sinnvoll, um FHEM Konzepte wie on/off/on-for-timer direkt abzubilden und nicht mehr nur auf die Registerebene und regSet und regGet Kommandos beschränkt zu sein.&lt;br /&gt;
&lt;br /&gt;
Um per autocreate automatisch das passende Modul laden zu können, müssen diese Module nach dem Schema SWAP_XXXXXXXXXXXXXXXX.pm benannt sein wobei XXXXXXXXXXXXXXXX für den jeweiligen productCode steht.&lt;br /&gt;
&lt;br /&gt;
==== SWAP_0000002200000003 ====&lt;br /&gt;
[[Datei:SWAP_0000002200000003.png|mini|rechts|hochkant=2.5|RGB LED Driver Board]]&lt;br /&gt;
Ein FHEM Modul für das modifizierte panStamp RGB LED Driver Board. &lt;br /&gt;
&lt;br /&gt;
Das Board unterstützt RGBW LEDs und lässt sich per Infrarot Fernbedienung, DMX Controller (z.&amp;amp;nbsp;B. als Unterputz Touchpanel) und FHEM bedienen.&lt;br /&gt;
&lt;br /&gt;
Der Funktionsumfang wird in diesem [http://forum.fhem.de/index.php/topic,12487.msg81923.html#msg81923 Forenthread] vorgestellt. Die Hardware für das Board wird [http://forum.fhem.de/index.php/topic,13890.0.html  hier] im FHEM Forum vorgestellt und ein Prototyp ist [http://forum.fhem.de/index.php/topic,12487.msg85777.html#msg85777 hier] zu sehen.&lt;br /&gt;
=====Upate 2014-01-11===== &lt;br /&gt;
Zur Zeit ist Version 2 des Boards in Vorbereiteung. Die Projektseite zur Hardware findet sich [http://itse.homeip.net/projekte/12/6/ hier]. &lt;br /&gt;
&lt;br /&gt;
Demnächst wird eine aktualisiert Version des Fhem Moduls und panStamp Sketches eingecheckt. Eine Übersicht über die dann vorhandene Funktionalität:&lt;br /&gt;
&lt;br /&gt;
was geht:&lt;br /&gt;
* bis zu vier led kanäle (je nach kombination von ir und soft pwm)&lt;br /&gt;
* ir senden&lt;br /&gt;
* ir empfangen&lt;br /&gt;
* messen ob die led versorgung an ist&lt;br /&gt;
* helligkeit eines an A2 angeschlossenen helligkeits sensors&lt;br /&gt;
* konfiguration der dmx basis adresse über das swap register 0x12&lt;br /&gt;
* optional soft on auf letzten wert&lt;br /&gt;
* alles was auch vorher schon ging: dimmen, faden, ir fernbedienungen anlernen, ...&lt;br /&gt;
&lt;br /&gt;
wichtig zu wissen:&lt;br /&gt;
* wenn ir aktiv ist und kein soft pwm lässt sich der 4. kanal nur ein und aus schalten&lt;br /&gt;
* wenn ir aktiv ist muss soft pwm aktiv sein um den 4. kanäle auch zu dimmen&lt;br /&gt;
* es wird nur ein zusätzlicher kanal tatsächlich schon unterstützt. der fünfte kommt noch&lt;br /&gt;
* bei ir senden sind nur die aufrufe für sony und nec tatsächlich eingebaut. die anderen sind aber einfach zu ergänzen&lt;br /&gt;
* beim ir senden sind noch keine Wiederholungen eingebaut. die müssen laut protokoll aber eigentlich sein&lt;br /&gt;
&lt;br /&gt;
was noch kommt:&lt;br /&gt;
* besseres soft pwm&lt;br /&gt;
* mehr konfiguration bezüglich default verhalten. ramp zeiten, delays, ...&lt;br /&gt;
* hsv farb modell um besser zu faden und vor allem um den weiss anteil automatisch auf die weiss leds zu legen&lt;br /&gt;
* die virtuellen channel &lt;br /&gt;
* fhem kompatibles ir senden&lt;br /&gt;
* sofortiges senden von helligkeit und led spannung bei änderung&lt;br /&gt;
* andere ir lib mit sehr viel besserer geräte unterstützung&lt;br /&gt;
&lt;br /&gt;
wie gehabt muss alles über config.h konfiguriert werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== weitrere Screenshots =====&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:SWAP_0000002200000003-internal.png|InternalValues&lt;br /&gt;
File:SWAP_0000002200000003-readings.png|Readings&lt;br /&gt;
File:SWAP_0000002200000003-attributes.png|Attributes&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Arduino Sketches ==&lt;br /&gt;
Zum Flashen der Panstamps wird die Arduino IDE benötigt. Eine Installationsanleitung ist unter folgendem Link zu finden:&lt;br /&gt;
:https://code.google.com/p/panstamp/wiki/firststeps&lt;br /&gt;
&lt;br /&gt;
Für den RGB-Driver sketch sind je nach gewünschtem Funktionsumfang noch folgende libs zu installieren:&lt;br /&gt;
&lt;br /&gt;
* IR lib - https://github.com/shirriff/Arduino-IRremote&lt;br /&gt;
* DMX lib- http://www.mathertel.de/Arduino/DMXSerial.aspx&lt;br /&gt;
&lt;br /&gt;
Die Librarys sollten entweder mit dem entsprechenden Menüpunkt in die IDE integriert werden oder jeweils nach auspacken des zip files als als kompletten Ordner im Arduino libraries verzeichnis abgelegt werden (siehe [http://www.arduino.cc/en/Hacking/Libraries)]).&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version des RGB-Driver Sketches findet sich auf [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ sourceforge].&lt;br /&gt;
&lt;br /&gt;
Dieser muss in Arduino\libraries\panstamp\examples\sketches entpackt und die rbgdriver.ino gestartet werden. In der Arduino IDE sollte unter Tools-&amp;gt;Board &amp;quot;Arduino Pro or Pro Mini (3.3V, 8MHz) w/ Atmega328&amp;quot; eingestellt sein. Wenn man das boards.txt file von [http://code.google.com/p/panstamp/downloads/detail?name=boards.txt&amp;amp;can=2&amp;amp;q= hier] installiert kann man in der IDE auch direkt PanStamp als Plattform auswählen.&lt;br /&gt;
&lt;br /&gt;
Welche Features der sketch bietet lässt sich im config.h file durch ein- oder auskommentieren der #define ENABLE_... Zeilen festlegen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Besonderheiten bei der Nutzung einiger Funktionen&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
* #define ENABLE_DMX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hierbei ist darauf zu achten, dass in der DMX-Lib in der Datei DMXSerial.h die Zeile&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#define DmxModePin 2     // Arduino pin 2 for controlling the data direction&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#define DmxModePin 7     // Arduino pin 7 for controlling the data direction&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
abgeändert werden muss.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* #define HAS_SENSOR (ermöglicht die Nutzung eines DHT22 Sensors zur Auswerung von Temperatur und Luftfeuchtigkeit)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
USE_SOFT_PWM;&lt;br /&gt;
ENABLE_IR_SEND;&lt;br /&gt;
ENABLE_REPEATER;&lt;br /&gt;
&lt;br /&gt;
sollte hierfür auskommentiert sein.&lt;br /&gt;
&lt;br /&gt;
In der IRremote.cpp Datei in der Irremote Library muss die Zeile&lt;br /&gt;
&lt;br /&gt;
void IRrecv::disableIRIn() &lt;br /&gt;
{&lt;br /&gt;
TIMER_DISABLE_INTR;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sowie die Irremote.h Datei unter Public: um die Zeile &lt;br /&gt;
&lt;br /&gt;
void disableIRIn();&lt;br /&gt;
&lt;br /&gt;
erweitert werden.&lt;br /&gt;
&lt;br /&gt;
Der Daten-Pin des DHT22 Sensors muss hierfür an A2 des Panstamps angeschlossen werden.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.panstamp.com/home panStamp] panStamp Hersteller&lt;br /&gt;
* [http://itse.homeip.net/projekte/12/6/ Projektseite] für das RGB-Multi-Board.&lt;br /&gt;
* [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ rgbdriver sketch] auf sourceforge&lt;br /&gt;
* [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ soilmoisture sketch]  auf sourceforge&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Interfaces]]&lt;br /&gt;
[[Kategorie:Other Components]]&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=PanStamp&amp;diff=6809</id>
		<title>PanStamp</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=PanStamp&amp;diff=6809"/>
		<updated>2014-07-09T19:20:09Z</updated>

		<summary type="html">&lt;p&gt;Fidel: /* Arduino Sketches */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle}}&lt;br /&gt;
{{SEITENTITEL:panStamp}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Hardware&lt;br /&gt;
|Bild=panStamp.jpg&lt;br /&gt;
|Bildbeschreibung=panStamp&lt;br /&gt;
|HWProtocol=SWAP&lt;br /&gt;
|HWType=Sender, Empfänger, Sensor, [[Interface]]&lt;br /&gt;
|HWCategory=&lt;br /&gt;
|HWComm=868MHz (433/915MHz)&lt;br /&gt;
|HWChannels=&lt;br /&gt;
|HWVoltage=3.3V (panStick: 5V USB)&lt;br /&gt;
|HWPowerConsumption=&lt;br /&gt;
|HWPoweredBy=Battery (panStick: USB)&lt;br /&gt;
|HWSize=17.7 x 30.5 mm&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#panStamp 35_panStamp.pm] [http://fhem.de/commandref.html#SWAP 35_SWAP.pm]&lt;br /&gt;
|ModOwner=[http://forum.fhem.de/index.php?action=profile;u=430 Andre / justme1968]&lt;br /&gt;
|HWManufacturer=panStamp&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.panstamp.com/home PanStamps] sind [[Arduino]] Clones, die ein CC1101 Funkmodul beinhalten. Mit ihnen lassen sich Sensoren und Aktoren drahtlos an FHEM anbinden. Sie lassen sich genau wie Arduinos über die Ardunio IDE oder mit dem ino Kommandozeilen Binary programmieren.&lt;br /&gt;
&lt;br /&gt;
Der panStamp Software Stack unterstützt einen stromsparenden Power-Down- oder Sleep-Modus für batteriebetriebene Sensoren, aus dem diese dann nur zur eigentlichen Messung und Übertragung &amp;quot;aufwachen&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Zur Kommunikation in einem panStamp Netzwerk dient das &#039;&#039;Simple Wireless Abstract Protocol&#039;&#039; ([http://code.google.com/p/panstamp/wiki/SWAP SWAP]).&lt;br /&gt;
&lt;br /&gt;
Um einen panStamp in Betrieb zu nehmen muss er unbedingt mit einer Antenne oder einem stück Draht in der [https://code.google.com/p/panstamp/wiki/antennalengths richtigen Länge] bestückt sein. Ohne Antenne funktioniert die Übertragung nicht. Auch nicht auf kurze Distanzen.&lt;br /&gt;
&lt;br /&gt;
== Simple Wireless Abstract Protocol (SWAP) ==&lt;br /&gt;
Die komplette SWAP- Kommunikation ist registerbasiert und erfolgt mit Nachrichten um diese Register abzufragen, zu setzen und deren Inhalt zu senden. Alle Register lassen sich lesen, manche auch beschreiben.&lt;br /&gt;
&lt;br /&gt;
Jeder panStamp stellt elf Systemregister (00-0A) [http://code.google.com/p/panstamp/wiki/SWAPregisters] und beliebig viele sketchabängige Userregister (0B-)bereit. Die Beschreibung der jeweils von einem Sketch bereitgestellten Userregister erfolgt in &#039;&#039;Device Description Files&#039;&#039;, die in .../FHEM/lib/SWAP zu finden sind. Die Identifikation der Art eines panStamp und die Zuordnung zu einem bestimmten Device Description File erfolgt über den productCode der aus &#039;&#039;Hersteller&#039;&#039;- und &#039;&#039;Produkt&#039;&#039;-Id gebildet wird.&lt;br /&gt;
&lt;br /&gt;
In den Systemregistern steht z.&amp;amp;nbsp;B. der productCode, die Deviceadresse und das Übertragungsintervall. Konfigurierbare Register werden im EEPROM gesichert, so dass die Werte auch bei einem Neustart nicht verlorengehen. Beim ersten Starten eines panStamp ist das EEPROM mit FF initialisiert und alle konfigurierbaren Register haben diesen Wert, also z.&amp;amp;nbsp;B. die Adresse FF und das Intervall FFFF (zwischen 18 und 19 Stunden).&lt;br /&gt;
&lt;br /&gt;
Die Systemregister werden in der Device Detailansicht bei den InternalValues im oberen Bereich angezeigt und die User-Register als reading im unteren Bereich.&lt;br /&gt;
&lt;br /&gt;
Jeder panStamp durchläuft beim Start eine definierte Einschaltsequenz und überträgt als erstes seinen productCode. Batteriebetriebene panStamps warten anschließend drei Sekunden auf Konfigurationskommandos. Danach werden bestimmte Systemregister und aktuelle Messwerte gesendet.&lt;br /&gt;
&lt;br /&gt;
== FHEM Integration ==&lt;br /&gt;
Die Integration in FHEM erfolgt über eine reihe von Modulen die im folgenden genauer beschrieben werden.&lt;br /&gt;
=== panStamp ===&lt;br /&gt;
Als Schnittstelle zwischen FHEM und einem panStamp Netzwerk dient entweder ein panStick (USB Stick mit aufgestecktem panStamp) oder ein panStamp Shield mit integriertem panStamp an einem Raspberry PI. Der so angebundene panStamp wird mit einem Modem-Sketch als RF Modem verwenden und über das FHEM Modul panStamp angesprochen. Hierzu ist in FHEM ein entsprechendes Device anzulegen: &amp;lt;pre&amp;gt;define panStick panStamp /dev/ttyUSBx@38400&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dieses panStamp Device versucht dann als erstes alle panStamps im Netz zu finden und per autocreate anzulegen.&lt;br /&gt;
&lt;br /&gt;
=== SWAP ===&lt;br /&gt;
[[Datei:SWAP_ 0000000100000005-detail.png|mini|hochkant=2.5|Readings]]&lt;br /&gt;
Das SWAP Modul ermöglicht die generische Integration beliebiger panStamp Sensoren und Aktoren in FHEM. Mit Hilfe der im jeweiligen Device Description File hinterlegten Beschreibung werden hierzu automatisch userReadings angelegt die neben den reinen Registerwerten in hex auch &#039;menschenlesbare&#039; readings der Sensorwerte erzeugen. Damit dies funktioniert, muss das Attribut ProductCode korrekt gesetzt sein. Das geschieht normalerweise automatisch beim Anlegen des Device.&lt;br /&gt;
&lt;br /&gt;
Hier Beispielhaft anhand eines BMP085 Temperatur- und Luftdrucksensors dargestellt:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;attr temppress userReadings voltage:0B-Voltage {hex(ReadingsVal($name,&amp;quot;0B-Voltage&amp;quot;,&amp;quot;0&amp;quot;))*0.001}, temperature:0C.0-Temperature {hex(ReadingsVal($name,&amp;quot;0C.0-Temperature&amp;quot;,&amp;quot;0&amp;quot;))*0.1-50}, pressure:0C.1-Pressure {hex(ReadingsVal($name,&amp;quot;0C.1-Pressure&amp;quot;,&amp;quot;0&amp;quot;))*0.01}, pressureNN:0C.1-Pressure {sprintf(&amp;quot;%.2f&amp;quot;,hex(ReadingsVal($name,&amp;quot;0C.1-Pressure&amp;quot;,&amp;quot;0&amp;quot;))*0.01 + AttrVal(&amp;quot;global&amp;quot;, &amp;quot;altitude&amp;quot;, 0)/8.5)}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:SWAP_ 0000000100000005.png|mini|hochkant=2.5|Resultat eines stateFormat]]&lt;br /&gt;
Aus diesen readings kann dann mit stateFormat die gewünschte Darstellung für die Raumübersicht erzeugt werden:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;attr temppress stateFormat {sprintf(&amp;quot;%.1f&amp;quot;,ReadingsVal($name,&amp;quot;temperature&amp;quot;,0)).&amp;quot;°C &amp;quot;.sprintf(&amp;quot;%.1f&amp;quot;,ReadingsVal($name,&amp;quot;pressureNN&amp;quot;,0)).&amp;quot;mbar&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sobald ein SWAP Device mit dem productCode korrekt angelegt wurde, können die Userregister bzw. alle Register aufgelistet werden: &lt;br /&gt;
 get &amp;lt;device&amp;gt; regList&lt;br /&gt;
 get &amp;lt;device&amp;gt; regListALL&lt;br /&gt;
&lt;br /&gt;
und einzelne Register abgefragt und gesetzt werden:&lt;br /&gt;
 set &amp;lt;device&amp;gt; regGet &amp;lt;ID&amp;gt;&lt;br /&gt;
 set &amp;lt;device&amp;gt; regSet &amp;lt;ID&amp;gt; &amp;lt;value&amp;gt;&lt;br /&gt;
Für die Systemregister kann hierzu statt der RegisterID auch der Registername (siehe regListAll) verwendet werden.&lt;br /&gt;
&lt;br /&gt;
==== Neue panStamps in Betrieb nehmen ====&lt;br /&gt;
&#039;&#039;&#039;Info: Das SWAP Modul unterstützt autocreate. Bei der Inbetriebnahme ist autocreate zu aktivieren!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Neue panStamps sollten nur Einer nach dem Anderen in Betrieb genommen werden, da sie zuerst mit einer eindeutigen Device-Adresse (ungleich FF und grösser 01) versehen werden müssen. Bei batteriebetriebenen Sensoren sollte auch das Sendeintervall auf einen sinnvollen Wert gesetzt werden:&lt;br /&gt;
 set &amp;lt;device&amp;gt; regSet 09 &amp;lt;device adresse als 2 stellige hex zahl&amp;gt;&lt;br /&gt;
 set &amp;lt;device&amp;gt; regSet 0A &amp;lt;intervall in sekunden als 4 stellige hex zahl&amp;gt;&lt;br /&gt;
Für Devices im Power-Down-Modus werden diese Kommandos in eine Warteschlange gestellt und übertragen, sobald das Device seine Initialisierungssequenz durchläuft. Hierzu ist nach Absetzen der Kommandos Reset zu drücken oder die Stromquelle erneut zu verbinden.&lt;br /&gt;
&lt;br /&gt;
Das SWAP modul versucht, ein Device mit der default Adresse &amp;lt;code&amp;gt;FF&amp;lt;/code&amp;gt; automatisch auf die erste freie Adresse im Bereich &amp;lt;code&amp;gt;F0&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;FE&amp;lt;/code&amp;gt; zu ändern.&lt;br /&gt;
&lt;br /&gt;
Für batteriebetriebene Devices (genauer: Devices die den Power-Down-Modus unterstützen) wird das Default Sendeintervall von &amp;lt;code&amp;gt;FFFF&amp;lt;/code&amp;gt; zu &amp;lt;code&amp;gt;0384&amp;lt;/code&amp;gt; (900 Sekunden) geändert.&lt;br /&gt;
Es gibt mit bestimmten panstamp lib Versionen das Problem das ein wert von FFFF in 0A zum Überlauf führt und dann ununterbrochen gesendet wird. Im fhem Modul wird versucht das abzufangen. Das funktioniert auf manchen langsamen host systemen (z.B. FritzBox) nicht, weil der panstamp so schnell sendet das fhem so mit dem abarbeiten beschäftigt ist das es selber nicht zum senden kommt.&lt;br /&gt;
Zur Abhilfe kann im sketch in setup() ganz am Anfang  ein&lt;br /&gt;
  EEPROM.write(EEPROM_TX_INTERVAL, 0x55);&lt;br /&gt;
  EEPROM.write(EEPROM_TX_INTERVAL+1, 0x55);&lt;br /&gt;
eingefügt werden und noch mal flashen. Wenn der Sketch damit ein mal durchgelaufen ist können diese beiden Zeilen wieder entfernen und der panstamp noch mal geflasht.&lt;br /&gt;
&lt;br /&gt;
Automatisch gesetzte Werte sollten danach manuell auf die jeweilige Installation angepasst werden.&lt;br /&gt;
&lt;br /&gt;
==== Beispiele ====&lt;br /&gt;
===== Bodenfeuchte =====&lt;br /&gt;
Der panStamp soilmoisture Sketch aus dem examples Verzeichnis ist mit dem Standard SWAP Modul kompatibel. &lt;br /&gt;
&lt;br /&gt;
Eine für einen Vegetronix sensor angepasste Version kann von [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ sourceforge] heruntergeladen werden. Das Übertragungsintervall ist wie üblich über das regsiter 0A konfigurierbar. Der Sensor wird and GND, D7 für die Versorgungsspannung und A4 für den Messwert angeschlossen. Erfahrungen haben gezeigt, dass bei einem fünfminütigen Übertragungsintervall nach 12 Monaten Laufzeit die Batteriespannung von 1.55V auf 1.4V abfällt. Das würde bedeuten, dass eine Batterie im Batterieboard mindestens eine Laufzeit von drei Jahren haben sollte.&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;MyBodenfeuchte&amp;gt; stateFormat VWC_A%&lt;br /&gt;
 set &amp;lt;MyBodenfeuchte&amp;gt; userReadings Level0_Voltage {hex(ReadingsVal($name,&amp;quot;0C.0-Moisture_level_0&amp;quot;,&amp;quot;0&amp;quot;))*(3.3/1024)}, &lt;br /&gt;
     VWC_A:0C.0-Moisture_level_0 {sprintf(&amp;quot;%.0f&amp;quot;,(11.6552 * (ReadingsVal($name,&amp;quot;Level0_Voltage&amp;quot;,&amp;quot;0&amp;quot;))**4 + 7.10835 * &lt;br /&gt;
        (ReadingsVal($name,&amp;quot;Level0_Voltage&amp;quot;,&amp;quot;0&amp;quot;))**2 - 0.569557) / ((ReadingsVal($name,&amp;quot;Level0_Voltage&amp;quot;,&amp;quot;0&amp;quot;))**2 + 1))}, &lt;br /&gt;
     voltage:0B-Voltage {hex(ReadingsVal($name,&amp;quot;0B-Voltage&amp;quot;,&amp;quot;0&amp;quot;))*0.001}, &lt;br /&gt;
     battery:0B-Voltage {(ReadingsVal($name,&amp;quot;voltage&amp;quot;,&amp;quot;0&amp;quot;)&amp;lt;1?&amp;quot;low&amp;quot;:&amp;quot;ok&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
[[Datei:SWAP_ soilmositure-plot.jpg|mini|x100px|Bodenfeuchte]]&lt;br /&gt;
&amp;lt;div class=&amp;quot;tright&amp;quot; style=&amp;quot;clear:none&amp;quot;&amp;gt;[[Datei:panstamp_vegetronix1.jpg|mini|ohne|x130px|Vegetronix Bodenfeuchtesensor an Panstamp]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;tright&amp;quot; style=&amp;quot;clear:none&amp;quot;&amp;gt;[[Datei:panstamp_vegetronix2.jpg|mini|ohne|x130px|Vegetronix Bodenfeuchtesensor an Panstamp]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit einem entsprechend erweiterten Sketch lassen sich auch mehrere Sensoren an einem panStamp auslesen.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Bilder zeigen eine Panstamp/Vegetronix Außeneinheit im IP65-Gehäuse. Dieser Aufbau wird ganzjährig den Witterungseinflüssen ausgesetzt. Die auf den Stab aufgesetzte Antenne muss nicht verwendet werden, bei kürzeren Funkstrecken ist eine innenliegende Drahtantenne ausreichend. Bitte in FHEM den RSSI- und LQI-Wert sowie die Gleichmäßigkeit des Empfangens der 5 Minuten Sendeintervalle dementsprechend beobachten.&lt;br /&gt;
&lt;br /&gt;
=== SWAP_XXXXXXXXXXXXXXXX ===&lt;br /&gt;
Besonders bei Aktoren ist oft eine engere FHEM-Integration sinnvoll, um FHEM Konzepte wie on/off/on-for-timer direkt abzubilden und nicht mehr nur auf die Registerebene und regSet und regGet Kommandos beschränkt zu sein.&lt;br /&gt;
&lt;br /&gt;
Um per autocreate automatisch das passende Modul laden zu können, müssen diese Module nach dem Schema SWAP_XXXXXXXXXXXXXXXX.pm benannt sein wobei XXXXXXXXXXXXXXXX für den jeweiligen productCode steht.&lt;br /&gt;
&lt;br /&gt;
==== SWAP_0000002200000003 ====&lt;br /&gt;
[[Datei:SWAP_0000002200000003.png|mini|rechts|hochkant=2.5|RGB LED Driver Board]]&lt;br /&gt;
Ein FHEM Modul für das modifizierte panStamp RGB LED Driver Board. &lt;br /&gt;
&lt;br /&gt;
Das Board unterstützt RGBW LEDs und lässt sich per Infrarot Fernbedienung, DMX Controller (z.&amp;amp;nbsp;B. als Unterputz Touchpanel) und FHEM bedienen.&lt;br /&gt;
&lt;br /&gt;
Der Funktionsumfang wird in diesem [http://forum.fhem.de/index.php/topic,12487.msg81923.html#msg81923 Forenthread] vorgestellt. Die Hardware für das Board wird [http://forum.fhem.de/index.php/topic,13890.0.html  hier] im FHEM Forum vorgestellt und ein Prototyp ist [http://forum.fhem.de/index.php/topic,12487.msg85777.html#msg85777 hier] zu sehen.&lt;br /&gt;
=====Upate 2014-01-11===== &lt;br /&gt;
Zur Zeit ist Version 2 des Boards in Vorbereiteung. Die Projektseite zur Hardware findet sich [http://itse.homeip.net/projekte/12/6/ hier]. &lt;br /&gt;
&lt;br /&gt;
Demnächst wird eine aktualisiert Version des Fhem Moduls und panStamp Sketches eingecheckt. Eine Übersicht über die dann vorhandene Funktionalität:&lt;br /&gt;
&lt;br /&gt;
was geht:&lt;br /&gt;
* bis zu vier led kanäle (je nach kombination von ir und soft pwm)&lt;br /&gt;
* ir senden&lt;br /&gt;
* ir empfangen&lt;br /&gt;
* messen ob die led versorgung an ist&lt;br /&gt;
* helligkeit eines an A2 angeschlossenen helligkeits sensors&lt;br /&gt;
* konfiguration der dmx basis adresse über das swap register 0x12&lt;br /&gt;
* optional soft on auf letzten wert&lt;br /&gt;
* alles was auch vorher schon ging: dimmen, faden, ir fernbedienungen anlernen, ...&lt;br /&gt;
&lt;br /&gt;
wichtig zu wissen:&lt;br /&gt;
* wenn ir aktiv ist und kein soft pwm lässt sich der 4. kanal nur ein und aus schalten&lt;br /&gt;
* wenn ir aktiv ist muss soft pwm aktiv sein um den 4. kanäle auch zu dimmen&lt;br /&gt;
* es wird nur ein zusätzlicher kanal tatsächlich schon unterstützt. der fünfte kommt noch&lt;br /&gt;
* bei ir senden sind nur die aufrufe für sony und nec tatsächlich eingebaut. die anderen sind aber einfach zu ergänzen&lt;br /&gt;
* beim ir senden sind noch keine Wiederholungen eingebaut. die müssen laut protokoll aber eigentlich sein&lt;br /&gt;
&lt;br /&gt;
was noch kommt:&lt;br /&gt;
* besseres soft pwm&lt;br /&gt;
* mehr konfiguration bezüglich default verhalten. ramp zeiten, delays, ...&lt;br /&gt;
* hsv farb modell um besser zu faden und vor allem um den weiss anteil automatisch auf die weiss leds zu legen&lt;br /&gt;
* die virtuellen channel &lt;br /&gt;
* fhem kompatibles ir senden&lt;br /&gt;
* sofortiges senden von helligkeit und led spannung bei änderung&lt;br /&gt;
* andere ir lib mit sehr viel besserer geräte unterstützung&lt;br /&gt;
&lt;br /&gt;
wie gehabt muss alles über config.h konfiguriert werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== weitrere Screenshots =====&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:SWAP_0000002200000003-internal.png|InternalValues&lt;br /&gt;
File:SWAP_0000002200000003-readings.png|Readings&lt;br /&gt;
File:SWAP_0000002200000003-attributes.png|Attributes&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Arduino Sketches ==&lt;br /&gt;
Zum Flashen der Panstamps wird die Arduino IDE benötigt. Eine Installationsanleitung ist unter folgendem Link zu finden:&lt;br /&gt;
:https://code.google.com/p/panstamp/wiki/firststeps&lt;br /&gt;
&lt;br /&gt;
Für den RGB-Driver sketch sind je nach gewünschtem Funktionsumfang noch folgende libs zu installieren:&lt;br /&gt;
&lt;br /&gt;
* IR lib - https://github.com/shirriff/Arduino-IRremote&lt;br /&gt;
* DMX lib- http://www.mathertel.de/Arduino/DMXSerial.aspx&lt;br /&gt;
&lt;br /&gt;
Die Librarys sollten entweder mit dem entsprechenden Menüpunkt in die IDE integriert werden oder jeweils nach auspacken des zip files als als kompletten Ordner im Arduino libraries verzeichnis abgelegt werden (siehe [http://www.arduino.cc/en/Hacking/Libraries)]).&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version des RGB-Driver Sketches findet sich auf [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ sourceforge].&lt;br /&gt;
&lt;br /&gt;
Dieser muss in Arduino\libraries\panstamp\examples\sketches entpackt und die rbgdriver.ino gestartet werden. In der Arduino IDE sollte unter Tools-&amp;gt;Board &amp;quot;Arduino Pro or Pro Mini (3.3V, 8MHz) w/ Atmega328&amp;quot; eingestellt sein. Wenn man das boards.txt file von [http://code.google.com/p/panstamp/downloads/detail?name=boards.txt&amp;amp;can=2&amp;amp;q= hier] installiert kann man in der IDE auch direkt PanStamp als Plattform auswählen.&lt;br /&gt;
&lt;br /&gt;
Welche Features der sketch bietet lässt sich im config.h file durch ein- oder auskommentieren der #define ENABLE_... Zeilen festlegen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Besonderheiten bei der Nutzung einiger Funktionen&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
* #define ENABLE_DMX&lt;br /&gt;
&lt;br /&gt;
Hierbei ist darauf zu achten, dass in der DMX-Lib in der Datei DMXSerial.h die Zeile&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#define DmxModePin 2     // Arduino pin 2 for controlling the data direction&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#define DmxModePin 7     // Arduino pin 7 for controlling the data direction&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
abgeändert werden muss.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* #define HAS_SENSOR (ermöglicht die Nutzung eines DHT22 Sensors zur Auswerung von Temperatur und Luftfeuchtigkeit)&lt;br /&gt;
&lt;br /&gt;
USE_SOFT_PWM;&lt;br /&gt;
ENABLE_IR_SEND;&lt;br /&gt;
ENABLE_REPEATER;&lt;br /&gt;
&lt;br /&gt;
sollte hierfür auskommentiert sein.&lt;br /&gt;
&lt;br /&gt;
In der IRremote.cpp Datei in der Irremote Library muss die Zeile&lt;br /&gt;
&lt;br /&gt;
void IRrecv::disableIRIn() &lt;br /&gt;
{&lt;br /&gt;
TIMER_DISABLE_INTR;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sowie die Irremote.h Datei unter Public: um die Zeile &lt;br /&gt;
&lt;br /&gt;
void disableIRIn();&lt;br /&gt;
&lt;br /&gt;
erweitert werden.&lt;br /&gt;
&lt;br /&gt;
Der Daten-Pin des DHT22 Sensors muss hierfür an A2 des Panstamps angeschlossen werden.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.panstamp.com/home panStamp] panStamp Hersteller&lt;br /&gt;
* [http://itse.homeip.net/projekte/12/6/ Projektseite] für das RGB-Multi-Board.&lt;br /&gt;
* [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ rgbdriver sketch] auf sourceforge&lt;br /&gt;
* [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ soilmoisture sketch]  auf sourceforge&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Interfaces]]&lt;br /&gt;
[[Kategorie:Other Components]]&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=PanStamp&amp;diff=6808</id>
		<title>PanStamp</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=PanStamp&amp;diff=6808"/>
		<updated>2014-07-09T19:19:27Z</updated>

		<summary type="html">&lt;p&gt;Fidel: /* Arduino Sketches */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle}}&lt;br /&gt;
{{SEITENTITEL:panStamp}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Hardware&lt;br /&gt;
|Bild=panStamp.jpg&lt;br /&gt;
|Bildbeschreibung=panStamp&lt;br /&gt;
|HWProtocol=SWAP&lt;br /&gt;
|HWType=Sender, Empfänger, Sensor, [[Interface]]&lt;br /&gt;
|HWCategory=&lt;br /&gt;
|HWComm=868MHz (433/915MHz)&lt;br /&gt;
|HWChannels=&lt;br /&gt;
|HWVoltage=3.3V (panStick: 5V USB)&lt;br /&gt;
|HWPowerConsumption=&lt;br /&gt;
|HWPoweredBy=Battery (panStick: USB)&lt;br /&gt;
|HWSize=17.7 x 30.5 mm&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#panStamp 35_panStamp.pm] [http://fhem.de/commandref.html#SWAP 35_SWAP.pm]&lt;br /&gt;
|ModOwner=[http://forum.fhem.de/index.php?action=profile;u=430 Andre / justme1968]&lt;br /&gt;
|HWManufacturer=panStamp&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.panstamp.com/home PanStamps] sind [[Arduino]] Clones, die ein CC1101 Funkmodul beinhalten. Mit ihnen lassen sich Sensoren und Aktoren drahtlos an FHEM anbinden. Sie lassen sich genau wie Arduinos über die Ardunio IDE oder mit dem ino Kommandozeilen Binary programmieren.&lt;br /&gt;
&lt;br /&gt;
Der panStamp Software Stack unterstützt einen stromsparenden Power-Down- oder Sleep-Modus für batteriebetriebene Sensoren, aus dem diese dann nur zur eigentlichen Messung und Übertragung &amp;quot;aufwachen&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Zur Kommunikation in einem panStamp Netzwerk dient das &#039;&#039;Simple Wireless Abstract Protocol&#039;&#039; ([http://code.google.com/p/panstamp/wiki/SWAP SWAP]).&lt;br /&gt;
&lt;br /&gt;
Um einen panStamp in Betrieb zu nehmen muss er unbedingt mit einer Antenne oder einem stück Draht in der [https://code.google.com/p/panstamp/wiki/antennalengths richtigen Länge] bestückt sein. Ohne Antenne funktioniert die Übertragung nicht. Auch nicht auf kurze Distanzen.&lt;br /&gt;
&lt;br /&gt;
== Simple Wireless Abstract Protocol (SWAP) ==&lt;br /&gt;
Die komplette SWAP- Kommunikation ist registerbasiert und erfolgt mit Nachrichten um diese Register abzufragen, zu setzen und deren Inhalt zu senden. Alle Register lassen sich lesen, manche auch beschreiben.&lt;br /&gt;
&lt;br /&gt;
Jeder panStamp stellt elf Systemregister (00-0A) [http://code.google.com/p/panstamp/wiki/SWAPregisters] und beliebig viele sketchabängige Userregister (0B-)bereit. Die Beschreibung der jeweils von einem Sketch bereitgestellten Userregister erfolgt in &#039;&#039;Device Description Files&#039;&#039;, die in .../FHEM/lib/SWAP zu finden sind. Die Identifikation der Art eines panStamp und die Zuordnung zu einem bestimmten Device Description File erfolgt über den productCode der aus &#039;&#039;Hersteller&#039;&#039;- und &#039;&#039;Produkt&#039;&#039;-Id gebildet wird.&lt;br /&gt;
&lt;br /&gt;
In den Systemregistern steht z.&amp;amp;nbsp;B. der productCode, die Deviceadresse und das Übertragungsintervall. Konfigurierbare Register werden im EEPROM gesichert, so dass die Werte auch bei einem Neustart nicht verlorengehen. Beim ersten Starten eines panStamp ist das EEPROM mit FF initialisiert und alle konfigurierbaren Register haben diesen Wert, also z.&amp;amp;nbsp;B. die Adresse FF und das Intervall FFFF (zwischen 18 und 19 Stunden).&lt;br /&gt;
&lt;br /&gt;
Die Systemregister werden in der Device Detailansicht bei den InternalValues im oberen Bereich angezeigt und die User-Register als reading im unteren Bereich.&lt;br /&gt;
&lt;br /&gt;
Jeder panStamp durchläuft beim Start eine definierte Einschaltsequenz und überträgt als erstes seinen productCode. Batteriebetriebene panStamps warten anschließend drei Sekunden auf Konfigurationskommandos. Danach werden bestimmte Systemregister und aktuelle Messwerte gesendet.&lt;br /&gt;
&lt;br /&gt;
== FHEM Integration ==&lt;br /&gt;
Die Integration in FHEM erfolgt über eine reihe von Modulen die im folgenden genauer beschrieben werden.&lt;br /&gt;
=== panStamp ===&lt;br /&gt;
Als Schnittstelle zwischen FHEM und einem panStamp Netzwerk dient entweder ein panStick (USB Stick mit aufgestecktem panStamp) oder ein panStamp Shield mit integriertem panStamp an einem Raspberry PI. Der so angebundene panStamp wird mit einem Modem-Sketch als RF Modem verwenden und über das FHEM Modul panStamp angesprochen. Hierzu ist in FHEM ein entsprechendes Device anzulegen: &amp;lt;pre&amp;gt;define panStick panStamp /dev/ttyUSBx@38400&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dieses panStamp Device versucht dann als erstes alle panStamps im Netz zu finden und per autocreate anzulegen.&lt;br /&gt;
&lt;br /&gt;
=== SWAP ===&lt;br /&gt;
[[Datei:SWAP_ 0000000100000005-detail.png|mini|hochkant=2.5|Readings]]&lt;br /&gt;
Das SWAP Modul ermöglicht die generische Integration beliebiger panStamp Sensoren und Aktoren in FHEM. Mit Hilfe der im jeweiligen Device Description File hinterlegten Beschreibung werden hierzu automatisch userReadings angelegt die neben den reinen Registerwerten in hex auch &#039;menschenlesbare&#039; readings der Sensorwerte erzeugen. Damit dies funktioniert, muss das Attribut ProductCode korrekt gesetzt sein. Das geschieht normalerweise automatisch beim Anlegen des Device.&lt;br /&gt;
&lt;br /&gt;
Hier Beispielhaft anhand eines BMP085 Temperatur- und Luftdrucksensors dargestellt:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;attr temppress userReadings voltage:0B-Voltage {hex(ReadingsVal($name,&amp;quot;0B-Voltage&amp;quot;,&amp;quot;0&amp;quot;))*0.001}, temperature:0C.0-Temperature {hex(ReadingsVal($name,&amp;quot;0C.0-Temperature&amp;quot;,&amp;quot;0&amp;quot;))*0.1-50}, pressure:0C.1-Pressure {hex(ReadingsVal($name,&amp;quot;0C.1-Pressure&amp;quot;,&amp;quot;0&amp;quot;))*0.01}, pressureNN:0C.1-Pressure {sprintf(&amp;quot;%.2f&amp;quot;,hex(ReadingsVal($name,&amp;quot;0C.1-Pressure&amp;quot;,&amp;quot;0&amp;quot;))*0.01 + AttrVal(&amp;quot;global&amp;quot;, &amp;quot;altitude&amp;quot;, 0)/8.5)}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:SWAP_ 0000000100000005.png|mini|hochkant=2.5|Resultat eines stateFormat]]&lt;br /&gt;
Aus diesen readings kann dann mit stateFormat die gewünschte Darstellung für die Raumübersicht erzeugt werden:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;attr temppress stateFormat {sprintf(&amp;quot;%.1f&amp;quot;,ReadingsVal($name,&amp;quot;temperature&amp;quot;,0)).&amp;quot;°C &amp;quot;.sprintf(&amp;quot;%.1f&amp;quot;,ReadingsVal($name,&amp;quot;pressureNN&amp;quot;,0)).&amp;quot;mbar&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sobald ein SWAP Device mit dem productCode korrekt angelegt wurde, können die Userregister bzw. alle Register aufgelistet werden: &lt;br /&gt;
 get &amp;lt;device&amp;gt; regList&lt;br /&gt;
 get &amp;lt;device&amp;gt; regListALL&lt;br /&gt;
&lt;br /&gt;
und einzelne Register abgefragt und gesetzt werden:&lt;br /&gt;
 set &amp;lt;device&amp;gt; regGet &amp;lt;ID&amp;gt;&lt;br /&gt;
 set &amp;lt;device&amp;gt; regSet &amp;lt;ID&amp;gt; &amp;lt;value&amp;gt;&lt;br /&gt;
Für die Systemregister kann hierzu statt der RegisterID auch der Registername (siehe regListAll) verwendet werden.&lt;br /&gt;
&lt;br /&gt;
==== Neue panStamps in Betrieb nehmen ====&lt;br /&gt;
&#039;&#039;&#039;Info: Das SWAP Modul unterstützt autocreate. Bei der Inbetriebnahme ist autocreate zu aktivieren!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Neue panStamps sollten nur Einer nach dem Anderen in Betrieb genommen werden, da sie zuerst mit einer eindeutigen Device-Adresse (ungleich FF und grösser 01) versehen werden müssen. Bei batteriebetriebenen Sensoren sollte auch das Sendeintervall auf einen sinnvollen Wert gesetzt werden:&lt;br /&gt;
 set &amp;lt;device&amp;gt; regSet 09 &amp;lt;device adresse als 2 stellige hex zahl&amp;gt;&lt;br /&gt;
 set &amp;lt;device&amp;gt; regSet 0A &amp;lt;intervall in sekunden als 4 stellige hex zahl&amp;gt;&lt;br /&gt;
Für Devices im Power-Down-Modus werden diese Kommandos in eine Warteschlange gestellt und übertragen, sobald das Device seine Initialisierungssequenz durchläuft. Hierzu ist nach Absetzen der Kommandos Reset zu drücken oder die Stromquelle erneut zu verbinden.&lt;br /&gt;
&lt;br /&gt;
Das SWAP modul versucht, ein Device mit der default Adresse &amp;lt;code&amp;gt;FF&amp;lt;/code&amp;gt; automatisch auf die erste freie Adresse im Bereich &amp;lt;code&amp;gt;F0&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;FE&amp;lt;/code&amp;gt; zu ändern.&lt;br /&gt;
&lt;br /&gt;
Für batteriebetriebene Devices (genauer: Devices die den Power-Down-Modus unterstützen) wird das Default Sendeintervall von &amp;lt;code&amp;gt;FFFF&amp;lt;/code&amp;gt; zu &amp;lt;code&amp;gt;0384&amp;lt;/code&amp;gt; (900 Sekunden) geändert.&lt;br /&gt;
Es gibt mit bestimmten panstamp lib Versionen das Problem das ein wert von FFFF in 0A zum Überlauf führt und dann ununterbrochen gesendet wird. Im fhem Modul wird versucht das abzufangen. Das funktioniert auf manchen langsamen host systemen (z.B. FritzBox) nicht, weil der panstamp so schnell sendet das fhem so mit dem abarbeiten beschäftigt ist das es selber nicht zum senden kommt.&lt;br /&gt;
Zur Abhilfe kann im sketch in setup() ganz am Anfang  ein&lt;br /&gt;
  EEPROM.write(EEPROM_TX_INTERVAL, 0x55);&lt;br /&gt;
  EEPROM.write(EEPROM_TX_INTERVAL+1, 0x55);&lt;br /&gt;
eingefügt werden und noch mal flashen. Wenn der Sketch damit ein mal durchgelaufen ist können diese beiden Zeilen wieder entfernen und der panstamp noch mal geflasht.&lt;br /&gt;
&lt;br /&gt;
Automatisch gesetzte Werte sollten danach manuell auf die jeweilige Installation angepasst werden.&lt;br /&gt;
&lt;br /&gt;
==== Beispiele ====&lt;br /&gt;
===== Bodenfeuchte =====&lt;br /&gt;
Der panStamp soilmoisture Sketch aus dem examples Verzeichnis ist mit dem Standard SWAP Modul kompatibel. &lt;br /&gt;
&lt;br /&gt;
Eine für einen Vegetronix sensor angepasste Version kann von [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ sourceforge] heruntergeladen werden. Das Übertragungsintervall ist wie üblich über das regsiter 0A konfigurierbar. Der Sensor wird and GND, D7 für die Versorgungsspannung und A4 für den Messwert angeschlossen. Erfahrungen haben gezeigt, dass bei einem fünfminütigen Übertragungsintervall nach 12 Monaten Laufzeit die Batteriespannung von 1.55V auf 1.4V abfällt. Das würde bedeuten, dass eine Batterie im Batterieboard mindestens eine Laufzeit von drei Jahren haben sollte.&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;MyBodenfeuchte&amp;gt; stateFormat VWC_A%&lt;br /&gt;
 set &amp;lt;MyBodenfeuchte&amp;gt; userReadings Level0_Voltage {hex(ReadingsVal($name,&amp;quot;0C.0-Moisture_level_0&amp;quot;,&amp;quot;0&amp;quot;))*(3.3/1024)}, &lt;br /&gt;
     VWC_A:0C.0-Moisture_level_0 {sprintf(&amp;quot;%.0f&amp;quot;,(11.6552 * (ReadingsVal($name,&amp;quot;Level0_Voltage&amp;quot;,&amp;quot;0&amp;quot;))**4 + 7.10835 * &lt;br /&gt;
        (ReadingsVal($name,&amp;quot;Level0_Voltage&amp;quot;,&amp;quot;0&amp;quot;))**2 - 0.569557) / ((ReadingsVal($name,&amp;quot;Level0_Voltage&amp;quot;,&amp;quot;0&amp;quot;))**2 + 1))}, &lt;br /&gt;
     voltage:0B-Voltage {hex(ReadingsVal($name,&amp;quot;0B-Voltage&amp;quot;,&amp;quot;0&amp;quot;))*0.001}, &lt;br /&gt;
     battery:0B-Voltage {(ReadingsVal($name,&amp;quot;voltage&amp;quot;,&amp;quot;0&amp;quot;)&amp;lt;1?&amp;quot;low&amp;quot;:&amp;quot;ok&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
[[Datei:SWAP_ soilmositure-plot.jpg|mini|x100px|Bodenfeuchte]]&lt;br /&gt;
&amp;lt;div class=&amp;quot;tright&amp;quot; style=&amp;quot;clear:none&amp;quot;&amp;gt;[[Datei:panstamp_vegetronix1.jpg|mini|ohne|x130px|Vegetronix Bodenfeuchtesensor an Panstamp]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;tright&amp;quot; style=&amp;quot;clear:none&amp;quot;&amp;gt;[[Datei:panstamp_vegetronix2.jpg|mini|ohne|x130px|Vegetronix Bodenfeuchtesensor an Panstamp]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit einem entsprechend erweiterten Sketch lassen sich auch mehrere Sensoren an einem panStamp auslesen.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Bilder zeigen eine Panstamp/Vegetronix Außeneinheit im IP65-Gehäuse. Dieser Aufbau wird ganzjährig den Witterungseinflüssen ausgesetzt. Die auf den Stab aufgesetzte Antenne muss nicht verwendet werden, bei kürzeren Funkstrecken ist eine innenliegende Drahtantenne ausreichend. Bitte in FHEM den RSSI- und LQI-Wert sowie die Gleichmäßigkeit des Empfangens der 5 Minuten Sendeintervalle dementsprechend beobachten.&lt;br /&gt;
&lt;br /&gt;
=== SWAP_XXXXXXXXXXXXXXXX ===&lt;br /&gt;
Besonders bei Aktoren ist oft eine engere FHEM-Integration sinnvoll, um FHEM Konzepte wie on/off/on-for-timer direkt abzubilden und nicht mehr nur auf die Registerebene und regSet und regGet Kommandos beschränkt zu sein.&lt;br /&gt;
&lt;br /&gt;
Um per autocreate automatisch das passende Modul laden zu können, müssen diese Module nach dem Schema SWAP_XXXXXXXXXXXXXXXX.pm benannt sein wobei XXXXXXXXXXXXXXXX für den jeweiligen productCode steht.&lt;br /&gt;
&lt;br /&gt;
==== SWAP_0000002200000003 ====&lt;br /&gt;
[[Datei:SWAP_0000002200000003.png|mini|rechts|hochkant=2.5|RGB LED Driver Board]]&lt;br /&gt;
Ein FHEM Modul für das modifizierte panStamp RGB LED Driver Board. &lt;br /&gt;
&lt;br /&gt;
Das Board unterstützt RGBW LEDs und lässt sich per Infrarot Fernbedienung, DMX Controller (z.&amp;amp;nbsp;B. als Unterputz Touchpanel) und FHEM bedienen.&lt;br /&gt;
&lt;br /&gt;
Der Funktionsumfang wird in diesem [http://forum.fhem.de/index.php/topic,12487.msg81923.html#msg81923 Forenthread] vorgestellt. Die Hardware für das Board wird [http://forum.fhem.de/index.php/topic,13890.0.html  hier] im FHEM Forum vorgestellt und ein Prototyp ist [http://forum.fhem.de/index.php/topic,12487.msg85777.html#msg85777 hier] zu sehen.&lt;br /&gt;
=====Upate 2014-01-11===== &lt;br /&gt;
Zur Zeit ist Version 2 des Boards in Vorbereiteung. Die Projektseite zur Hardware findet sich [http://itse.homeip.net/projekte/12/6/ hier]. &lt;br /&gt;
&lt;br /&gt;
Demnächst wird eine aktualisiert Version des Fhem Moduls und panStamp Sketches eingecheckt. Eine Übersicht über die dann vorhandene Funktionalität:&lt;br /&gt;
&lt;br /&gt;
was geht:&lt;br /&gt;
* bis zu vier led kanäle (je nach kombination von ir und soft pwm)&lt;br /&gt;
* ir senden&lt;br /&gt;
* ir empfangen&lt;br /&gt;
* messen ob die led versorgung an ist&lt;br /&gt;
* helligkeit eines an A2 angeschlossenen helligkeits sensors&lt;br /&gt;
* konfiguration der dmx basis adresse über das swap register 0x12&lt;br /&gt;
* optional soft on auf letzten wert&lt;br /&gt;
* alles was auch vorher schon ging: dimmen, faden, ir fernbedienungen anlernen, ...&lt;br /&gt;
&lt;br /&gt;
wichtig zu wissen:&lt;br /&gt;
* wenn ir aktiv ist und kein soft pwm lässt sich der 4. kanal nur ein und aus schalten&lt;br /&gt;
* wenn ir aktiv ist muss soft pwm aktiv sein um den 4. kanäle auch zu dimmen&lt;br /&gt;
* es wird nur ein zusätzlicher kanal tatsächlich schon unterstützt. der fünfte kommt noch&lt;br /&gt;
* bei ir senden sind nur die aufrufe für sony und nec tatsächlich eingebaut. die anderen sind aber einfach zu ergänzen&lt;br /&gt;
* beim ir senden sind noch keine Wiederholungen eingebaut. die müssen laut protokoll aber eigentlich sein&lt;br /&gt;
&lt;br /&gt;
was noch kommt:&lt;br /&gt;
* besseres soft pwm&lt;br /&gt;
* mehr konfiguration bezüglich default verhalten. ramp zeiten, delays, ...&lt;br /&gt;
* hsv farb modell um besser zu faden und vor allem um den weiss anteil automatisch auf die weiss leds zu legen&lt;br /&gt;
* die virtuellen channel &lt;br /&gt;
* fhem kompatibles ir senden&lt;br /&gt;
* sofortiges senden von helligkeit und led spannung bei änderung&lt;br /&gt;
* andere ir lib mit sehr viel besserer geräte unterstützung&lt;br /&gt;
&lt;br /&gt;
wie gehabt muss alles über config.h konfiguriert werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== weitrere Screenshots =====&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:SWAP_0000002200000003-internal.png|InternalValues&lt;br /&gt;
File:SWAP_0000002200000003-readings.png|Readings&lt;br /&gt;
File:SWAP_0000002200000003-attributes.png|Attributes&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Arduino Sketches ==&lt;br /&gt;
Zum Flashen der Panstamps wird die Arduino IDE benötigt. Eine Installationsanleitung ist unter folgendem Link zu finden:&lt;br /&gt;
:https://code.google.com/p/panstamp/wiki/firststeps&lt;br /&gt;
&lt;br /&gt;
Für den RGB-Driver sketch sind je nach gewünschtem Funktionsumfang noch folgende libs zu installieren:&lt;br /&gt;
&lt;br /&gt;
* IR lib - https://github.com/shirriff/Arduino-IRremote&lt;br /&gt;
* DMX lib- http://www.mathertel.de/Arduino/DMXSerial.aspx&lt;br /&gt;
&lt;br /&gt;
Die Librarys sollten entweder mit dem entsprechenden Menüpunkt in die IDE integriert werden oder jeweils nach auspacken des zip files als als kompletten Ordner im Arduino libraries verzeichnis abgelegt werden (siehe [http://www.arduino.cc/en/Hacking/Libraries)]).&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version des RGB-Driver Sketches findet sich auf [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ sourceforge].&lt;br /&gt;
&lt;br /&gt;
Dieser muss in Arduino\libraries\panstamp\examples\sketches entpackt und die rbgdriver.ino gestartet werden. In der Arduino IDE sollte unter Tools-&amp;gt;Board &amp;quot;Arduino Pro or Pro Mini (3.3V, 8MHz) w/ Atmega328&amp;quot; eingestellt sein. Wenn man das boards.txt file von [http://code.google.com/p/panstamp/downloads/detail?name=boards.txt&amp;amp;can=2&amp;amp;q= hier] installiert kann man in der IDE auch direkt PanStamp als Plattform auswählen.&lt;br /&gt;
&lt;br /&gt;
Welche Features der sketch bietet lässt sich im config.h file durch ein- oder auskommentieren der #define ENABLE_... Zeilen festlegen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Besonderheiten bei der Nutzung einiger Funktionen&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
* #define ENABLE_DMX&lt;br /&gt;
&lt;br /&gt;
Hierbei ist darauf zu achten, dass in der DMX-Lib in der Datei DMXSerial.h die Zeile&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#define DmxModePin 2     // Arduino pin 2 for controlling the data direction&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
in &lt;br /&gt;
&amp;lt;nowiki&amp;gt;#define DmxModePin 7     // Arduino pin 7 for controlling the data direction&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
abgeändert werden muss.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* #define HAS_SENSOR (ermöglicht die Nutzung eines DHT22 Sensors zur Auswerung von Temperatur und Luftfeuchtigkeit)&lt;br /&gt;
&lt;br /&gt;
USE_SOFT_PWM;&lt;br /&gt;
ENABLE_IR_SEND;&lt;br /&gt;
ENABLE_REPEATER;&lt;br /&gt;
&lt;br /&gt;
sollte hierfür auskommentiert sein.&lt;br /&gt;
&lt;br /&gt;
In der IRremote.cpp Datei in der Irremote Library muss die Zeile&lt;br /&gt;
&lt;br /&gt;
void IRrecv::disableIRIn() &lt;br /&gt;
{&lt;br /&gt;
TIMER_DISABLE_INTR;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sowie die Irremote.h Datei unter Public: um die Zeile &lt;br /&gt;
&lt;br /&gt;
void disableIRIn();&lt;br /&gt;
&lt;br /&gt;
erweitert werden.&lt;br /&gt;
&lt;br /&gt;
Der Daten-Pin des DHT22 Sensors muss hierfür an A2 des Panstamps angeschlossen werden.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.panstamp.com/home panStamp] panStamp Hersteller&lt;br /&gt;
* [http://itse.homeip.net/projekte/12/6/ Projektseite] für das RGB-Multi-Board.&lt;br /&gt;
* [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ rgbdriver sketch] auf sourceforge&lt;br /&gt;
* [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ soilmoisture sketch]  auf sourceforge&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Interfaces]]&lt;br /&gt;
[[Kategorie:Other Components]]&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=PanStamp&amp;diff=6807</id>
		<title>PanStamp</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=PanStamp&amp;diff=6807"/>
		<updated>2014-07-09T19:18:31Z</updated>

		<summary type="html">&lt;p&gt;Fidel: /* Arduino Sketches */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle}}&lt;br /&gt;
{{SEITENTITEL:panStamp}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Hardware&lt;br /&gt;
|Bild=panStamp.jpg&lt;br /&gt;
|Bildbeschreibung=panStamp&lt;br /&gt;
|HWProtocol=SWAP&lt;br /&gt;
|HWType=Sender, Empfänger, Sensor, [[Interface]]&lt;br /&gt;
|HWCategory=&lt;br /&gt;
|HWComm=868MHz (433/915MHz)&lt;br /&gt;
|HWChannels=&lt;br /&gt;
|HWVoltage=3.3V (panStick: 5V USB)&lt;br /&gt;
|HWPowerConsumption=&lt;br /&gt;
|HWPoweredBy=Battery (panStick: USB)&lt;br /&gt;
|HWSize=17.7 x 30.5 mm&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#panStamp 35_panStamp.pm] [http://fhem.de/commandref.html#SWAP 35_SWAP.pm]&lt;br /&gt;
|ModOwner=[http://forum.fhem.de/index.php?action=profile;u=430 Andre / justme1968]&lt;br /&gt;
|HWManufacturer=panStamp&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.panstamp.com/home PanStamps] sind [[Arduino]] Clones, die ein CC1101 Funkmodul beinhalten. Mit ihnen lassen sich Sensoren und Aktoren drahtlos an FHEM anbinden. Sie lassen sich genau wie Arduinos über die Ardunio IDE oder mit dem ino Kommandozeilen Binary programmieren.&lt;br /&gt;
&lt;br /&gt;
Der panStamp Software Stack unterstützt einen stromsparenden Power-Down- oder Sleep-Modus für batteriebetriebene Sensoren, aus dem diese dann nur zur eigentlichen Messung und Übertragung &amp;quot;aufwachen&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Zur Kommunikation in einem panStamp Netzwerk dient das &#039;&#039;Simple Wireless Abstract Protocol&#039;&#039; ([http://code.google.com/p/panstamp/wiki/SWAP SWAP]).&lt;br /&gt;
&lt;br /&gt;
Um einen panStamp in Betrieb zu nehmen muss er unbedingt mit einer Antenne oder einem stück Draht in der [https://code.google.com/p/panstamp/wiki/antennalengths richtigen Länge] bestückt sein. Ohne Antenne funktioniert die Übertragung nicht. Auch nicht auf kurze Distanzen.&lt;br /&gt;
&lt;br /&gt;
== Simple Wireless Abstract Protocol (SWAP) ==&lt;br /&gt;
Die komplette SWAP- Kommunikation ist registerbasiert und erfolgt mit Nachrichten um diese Register abzufragen, zu setzen und deren Inhalt zu senden. Alle Register lassen sich lesen, manche auch beschreiben.&lt;br /&gt;
&lt;br /&gt;
Jeder panStamp stellt elf Systemregister (00-0A) [http://code.google.com/p/panstamp/wiki/SWAPregisters] und beliebig viele sketchabängige Userregister (0B-)bereit. Die Beschreibung der jeweils von einem Sketch bereitgestellten Userregister erfolgt in &#039;&#039;Device Description Files&#039;&#039;, die in .../FHEM/lib/SWAP zu finden sind. Die Identifikation der Art eines panStamp und die Zuordnung zu einem bestimmten Device Description File erfolgt über den productCode der aus &#039;&#039;Hersteller&#039;&#039;- und &#039;&#039;Produkt&#039;&#039;-Id gebildet wird.&lt;br /&gt;
&lt;br /&gt;
In den Systemregistern steht z.&amp;amp;nbsp;B. der productCode, die Deviceadresse und das Übertragungsintervall. Konfigurierbare Register werden im EEPROM gesichert, so dass die Werte auch bei einem Neustart nicht verlorengehen. Beim ersten Starten eines panStamp ist das EEPROM mit FF initialisiert und alle konfigurierbaren Register haben diesen Wert, also z.&amp;amp;nbsp;B. die Adresse FF und das Intervall FFFF (zwischen 18 und 19 Stunden).&lt;br /&gt;
&lt;br /&gt;
Die Systemregister werden in der Device Detailansicht bei den InternalValues im oberen Bereich angezeigt und die User-Register als reading im unteren Bereich.&lt;br /&gt;
&lt;br /&gt;
Jeder panStamp durchläuft beim Start eine definierte Einschaltsequenz und überträgt als erstes seinen productCode. Batteriebetriebene panStamps warten anschließend drei Sekunden auf Konfigurationskommandos. Danach werden bestimmte Systemregister und aktuelle Messwerte gesendet.&lt;br /&gt;
&lt;br /&gt;
== FHEM Integration ==&lt;br /&gt;
Die Integration in FHEM erfolgt über eine reihe von Modulen die im folgenden genauer beschrieben werden.&lt;br /&gt;
=== panStamp ===&lt;br /&gt;
Als Schnittstelle zwischen FHEM und einem panStamp Netzwerk dient entweder ein panStick (USB Stick mit aufgestecktem panStamp) oder ein panStamp Shield mit integriertem panStamp an einem Raspberry PI. Der so angebundene panStamp wird mit einem Modem-Sketch als RF Modem verwenden und über das FHEM Modul panStamp angesprochen. Hierzu ist in FHEM ein entsprechendes Device anzulegen: &amp;lt;pre&amp;gt;define panStick panStamp /dev/ttyUSBx@38400&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dieses panStamp Device versucht dann als erstes alle panStamps im Netz zu finden und per autocreate anzulegen.&lt;br /&gt;
&lt;br /&gt;
=== SWAP ===&lt;br /&gt;
[[Datei:SWAP_ 0000000100000005-detail.png|mini|hochkant=2.5|Readings]]&lt;br /&gt;
Das SWAP Modul ermöglicht die generische Integration beliebiger panStamp Sensoren und Aktoren in FHEM. Mit Hilfe der im jeweiligen Device Description File hinterlegten Beschreibung werden hierzu automatisch userReadings angelegt die neben den reinen Registerwerten in hex auch &#039;menschenlesbare&#039; readings der Sensorwerte erzeugen. Damit dies funktioniert, muss das Attribut ProductCode korrekt gesetzt sein. Das geschieht normalerweise automatisch beim Anlegen des Device.&lt;br /&gt;
&lt;br /&gt;
Hier Beispielhaft anhand eines BMP085 Temperatur- und Luftdrucksensors dargestellt:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;attr temppress userReadings voltage:0B-Voltage {hex(ReadingsVal($name,&amp;quot;0B-Voltage&amp;quot;,&amp;quot;0&amp;quot;))*0.001}, temperature:0C.0-Temperature {hex(ReadingsVal($name,&amp;quot;0C.0-Temperature&amp;quot;,&amp;quot;0&amp;quot;))*0.1-50}, pressure:0C.1-Pressure {hex(ReadingsVal($name,&amp;quot;0C.1-Pressure&amp;quot;,&amp;quot;0&amp;quot;))*0.01}, pressureNN:0C.1-Pressure {sprintf(&amp;quot;%.2f&amp;quot;,hex(ReadingsVal($name,&amp;quot;0C.1-Pressure&amp;quot;,&amp;quot;0&amp;quot;))*0.01 + AttrVal(&amp;quot;global&amp;quot;, &amp;quot;altitude&amp;quot;, 0)/8.5)}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:SWAP_ 0000000100000005.png|mini|hochkant=2.5|Resultat eines stateFormat]]&lt;br /&gt;
Aus diesen readings kann dann mit stateFormat die gewünschte Darstellung für die Raumübersicht erzeugt werden:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;attr temppress stateFormat {sprintf(&amp;quot;%.1f&amp;quot;,ReadingsVal($name,&amp;quot;temperature&amp;quot;,0)).&amp;quot;°C &amp;quot;.sprintf(&amp;quot;%.1f&amp;quot;,ReadingsVal($name,&amp;quot;pressureNN&amp;quot;,0)).&amp;quot;mbar&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sobald ein SWAP Device mit dem productCode korrekt angelegt wurde, können die Userregister bzw. alle Register aufgelistet werden: &lt;br /&gt;
 get &amp;lt;device&amp;gt; regList&lt;br /&gt;
 get &amp;lt;device&amp;gt; regListALL&lt;br /&gt;
&lt;br /&gt;
und einzelne Register abgefragt und gesetzt werden:&lt;br /&gt;
 set &amp;lt;device&amp;gt; regGet &amp;lt;ID&amp;gt;&lt;br /&gt;
 set &amp;lt;device&amp;gt; regSet &amp;lt;ID&amp;gt; &amp;lt;value&amp;gt;&lt;br /&gt;
Für die Systemregister kann hierzu statt der RegisterID auch der Registername (siehe regListAll) verwendet werden.&lt;br /&gt;
&lt;br /&gt;
==== Neue panStamps in Betrieb nehmen ====&lt;br /&gt;
&#039;&#039;&#039;Info: Das SWAP Modul unterstützt autocreate. Bei der Inbetriebnahme ist autocreate zu aktivieren!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Neue panStamps sollten nur Einer nach dem Anderen in Betrieb genommen werden, da sie zuerst mit einer eindeutigen Device-Adresse (ungleich FF und grösser 01) versehen werden müssen. Bei batteriebetriebenen Sensoren sollte auch das Sendeintervall auf einen sinnvollen Wert gesetzt werden:&lt;br /&gt;
 set &amp;lt;device&amp;gt; regSet 09 &amp;lt;device adresse als 2 stellige hex zahl&amp;gt;&lt;br /&gt;
 set &amp;lt;device&amp;gt; regSet 0A &amp;lt;intervall in sekunden als 4 stellige hex zahl&amp;gt;&lt;br /&gt;
Für Devices im Power-Down-Modus werden diese Kommandos in eine Warteschlange gestellt und übertragen, sobald das Device seine Initialisierungssequenz durchläuft. Hierzu ist nach Absetzen der Kommandos Reset zu drücken oder die Stromquelle erneut zu verbinden.&lt;br /&gt;
&lt;br /&gt;
Das SWAP modul versucht, ein Device mit der default Adresse &amp;lt;code&amp;gt;FF&amp;lt;/code&amp;gt; automatisch auf die erste freie Adresse im Bereich &amp;lt;code&amp;gt;F0&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;FE&amp;lt;/code&amp;gt; zu ändern.&lt;br /&gt;
&lt;br /&gt;
Für batteriebetriebene Devices (genauer: Devices die den Power-Down-Modus unterstützen) wird das Default Sendeintervall von &amp;lt;code&amp;gt;FFFF&amp;lt;/code&amp;gt; zu &amp;lt;code&amp;gt;0384&amp;lt;/code&amp;gt; (900 Sekunden) geändert.&lt;br /&gt;
Es gibt mit bestimmten panstamp lib Versionen das Problem das ein wert von FFFF in 0A zum Überlauf führt und dann ununterbrochen gesendet wird. Im fhem Modul wird versucht das abzufangen. Das funktioniert auf manchen langsamen host systemen (z.B. FritzBox) nicht, weil der panstamp so schnell sendet das fhem so mit dem abarbeiten beschäftigt ist das es selber nicht zum senden kommt.&lt;br /&gt;
Zur Abhilfe kann im sketch in setup() ganz am Anfang  ein&lt;br /&gt;
  EEPROM.write(EEPROM_TX_INTERVAL, 0x55);&lt;br /&gt;
  EEPROM.write(EEPROM_TX_INTERVAL+1, 0x55);&lt;br /&gt;
eingefügt werden und noch mal flashen. Wenn der Sketch damit ein mal durchgelaufen ist können diese beiden Zeilen wieder entfernen und der panstamp noch mal geflasht.&lt;br /&gt;
&lt;br /&gt;
Automatisch gesetzte Werte sollten danach manuell auf die jeweilige Installation angepasst werden.&lt;br /&gt;
&lt;br /&gt;
==== Beispiele ====&lt;br /&gt;
===== Bodenfeuchte =====&lt;br /&gt;
Der panStamp soilmoisture Sketch aus dem examples Verzeichnis ist mit dem Standard SWAP Modul kompatibel. &lt;br /&gt;
&lt;br /&gt;
Eine für einen Vegetronix sensor angepasste Version kann von [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ sourceforge] heruntergeladen werden. Das Übertragungsintervall ist wie üblich über das regsiter 0A konfigurierbar. Der Sensor wird and GND, D7 für die Versorgungsspannung und A4 für den Messwert angeschlossen. Erfahrungen haben gezeigt, dass bei einem fünfminütigen Übertragungsintervall nach 12 Monaten Laufzeit die Batteriespannung von 1.55V auf 1.4V abfällt. Das würde bedeuten, dass eine Batterie im Batterieboard mindestens eine Laufzeit von drei Jahren haben sollte.&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;MyBodenfeuchte&amp;gt; stateFormat VWC_A%&lt;br /&gt;
 set &amp;lt;MyBodenfeuchte&amp;gt; userReadings Level0_Voltage {hex(ReadingsVal($name,&amp;quot;0C.0-Moisture_level_0&amp;quot;,&amp;quot;0&amp;quot;))*(3.3/1024)}, &lt;br /&gt;
     VWC_A:0C.0-Moisture_level_0 {sprintf(&amp;quot;%.0f&amp;quot;,(11.6552 * (ReadingsVal($name,&amp;quot;Level0_Voltage&amp;quot;,&amp;quot;0&amp;quot;))**4 + 7.10835 * &lt;br /&gt;
        (ReadingsVal($name,&amp;quot;Level0_Voltage&amp;quot;,&amp;quot;0&amp;quot;))**2 - 0.569557) / ((ReadingsVal($name,&amp;quot;Level0_Voltage&amp;quot;,&amp;quot;0&amp;quot;))**2 + 1))}, &lt;br /&gt;
     voltage:0B-Voltage {hex(ReadingsVal($name,&amp;quot;0B-Voltage&amp;quot;,&amp;quot;0&amp;quot;))*0.001}, &lt;br /&gt;
     battery:0B-Voltage {(ReadingsVal($name,&amp;quot;voltage&amp;quot;,&amp;quot;0&amp;quot;)&amp;lt;1?&amp;quot;low&amp;quot;:&amp;quot;ok&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
[[Datei:SWAP_ soilmositure-plot.jpg|mini|x100px|Bodenfeuchte]]&lt;br /&gt;
&amp;lt;div class=&amp;quot;tright&amp;quot; style=&amp;quot;clear:none&amp;quot;&amp;gt;[[Datei:panstamp_vegetronix1.jpg|mini|ohne|x130px|Vegetronix Bodenfeuchtesensor an Panstamp]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;tright&amp;quot; style=&amp;quot;clear:none&amp;quot;&amp;gt;[[Datei:panstamp_vegetronix2.jpg|mini|ohne|x130px|Vegetronix Bodenfeuchtesensor an Panstamp]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit einem entsprechend erweiterten Sketch lassen sich auch mehrere Sensoren an einem panStamp auslesen.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Bilder zeigen eine Panstamp/Vegetronix Außeneinheit im IP65-Gehäuse. Dieser Aufbau wird ganzjährig den Witterungseinflüssen ausgesetzt. Die auf den Stab aufgesetzte Antenne muss nicht verwendet werden, bei kürzeren Funkstrecken ist eine innenliegende Drahtantenne ausreichend. Bitte in FHEM den RSSI- und LQI-Wert sowie die Gleichmäßigkeit des Empfangens der 5 Minuten Sendeintervalle dementsprechend beobachten.&lt;br /&gt;
&lt;br /&gt;
=== SWAP_XXXXXXXXXXXXXXXX ===&lt;br /&gt;
Besonders bei Aktoren ist oft eine engere FHEM-Integration sinnvoll, um FHEM Konzepte wie on/off/on-for-timer direkt abzubilden und nicht mehr nur auf die Registerebene und regSet und regGet Kommandos beschränkt zu sein.&lt;br /&gt;
&lt;br /&gt;
Um per autocreate automatisch das passende Modul laden zu können, müssen diese Module nach dem Schema SWAP_XXXXXXXXXXXXXXXX.pm benannt sein wobei XXXXXXXXXXXXXXXX für den jeweiligen productCode steht.&lt;br /&gt;
&lt;br /&gt;
==== SWAP_0000002200000003 ====&lt;br /&gt;
[[Datei:SWAP_0000002200000003.png|mini|rechts|hochkant=2.5|RGB LED Driver Board]]&lt;br /&gt;
Ein FHEM Modul für das modifizierte panStamp RGB LED Driver Board. &lt;br /&gt;
&lt;br /&gt;
Das Board unterstützt RGBW LEDs und lässt sich per Infrarot Fernbedienung, DMX Controller (z.&amp;amp;nbsp;B. als Unterputz Touchpanel) und FHEM bedienen.&lt;br /&gt;
&lt;br /&gt;
Der Funktionsumfang wird in diesem [http://forum.fhem.de/index.php/topic,12487.msg81923.html#msg81923 Forenthread] vorgestellt. Die Hardware für das Board wird [http://forum.fhem.de/index.php/topic,13890.0.html  hier] im FHEM Forum vorgestellt und ein Prototyp ist [http://forum.fhem.de/index.php/topic,12487.msg85777.html#msg85777 hier] zu sehen.&lt;br /&gt;
=====Upate 2014-01-11===== &lt;br /&gt;
Zur Zeit ist Version 2 des Boards in Vorbereiteung. Die Projektseite zur Hardware findet sich [http://itse.homeip.net/projekte/12/6/ hier]. &lt;br /&gt;
&lt;br /&gt;
Demnächst wird eine aktualisiert Version des Fhem Moduls und panStamp Sketches eingecheckt. Eine Übersicht über die dann vorhandene Funktionalität:&lt;br /&gt;
&lt;br /&gt;
was geht:&lt;br /&gt;
* bis zu vier led kanäle (je nach kombination von ir und soft pwm)&lt;br /&gt;
* ir senden&lt;br /&gt;
* ir empfangen&lt;br /&gt;
* messen ob die led versorgung an ist&lt;br /&gt;
* helligkeit eines an A2 angeschlossenen helligkeits sensors&lt;br /&gt;
* konfiguration der dmx basis adresse über das swap register 0x12&lt;br /&gt;
* optional soft on auf letzten wert&lt;br /&gt;
* alles was auch vorher schon ging: dimmen, faden, ir fernbedienungen anlernen, ...&lt;br /&gt;
&lt;br /&gt;
wichtig zu wissen:&lt;br /&gt;
* wenn ir aktiv ist und kein soft pwm lässt sich der 4. kanal nur ein und aus schalten&lt;br /&gt;
* wenn ir aktiv ist muss soft pwm aktiv sein um den 4. kanäle auch zu dimmen&lt;br /&gt;
* es wird nur ein zusätzlicher kanal tatsächlich schon unterstützt. der fünfte kommt noch&lt;br /&gt;
* bei ir senden sind nur die aufrufe für sony und nec tatsächlich eingebaut. die anderen sind aber einfach zu ergänzen&lt;br /&gt;
* beim ir senden sind noch keine Wiederholungen eingebaut. die müssen laut protokoll aber eigentlich sein&lt;br /&gt;
&lt;br /&gt;
was noch kommt:&lt;br /&gt;
* besseres soft pwm&lt;br /&gt;
* mehr konfiguration bezüglich default verhalten. ramp zeiten, delays, ...&lt;br /&gt;
* hsv farb modell um besser zu faden und vor allem um den weiss anteil automatisch auf die weiss leds zu legen&lt;br /&gt;
* die virtuellen channel &lt;br /&gt;
* fhem kompatibles ir senden&lt;br /&gt;
* sofortiges senden von helligkeit und led spannung bei änderung&lt;br /&gt;
* andere ir lib mit sehr viel besserer geräte unterstützung&lt;br /&gt;
&lt;br /&gt;
wie gehabt muss alles über config.h konfiguriert werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== weitrere Screenshots =====&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:SWAP_0000002200000003-internal.png|InternalValues&lt;br /&gt;
File:SWAP_0000002200000003-readings.png|Readings&lt;br /&gt;
File:SWAP_0000002200000003-attributes.png|Attributes&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Arduino Sketches ==&lt;br /&gt;
Zum Flashen der Panstamps wird die Arduino IDE benötigt. Eine Installationsanleitung ist unter folgendem Link zu finden:&lt;br /&gt;
:https://code.google.com/p/panstamp/wiki/firststeps&lt;br /&gt;
&lt;br /&gt;
Für den RGB-Driver sketch sind je nach gewünschtem Funktionsumfang noch folgende libs zu installieren:&lt;br /&gt;
&lt;br /&gt;
* IR lib - https://github.com/shirriff/Arduino-IRremote&lt;br /&gt;
* DMX lib- http://www.mathertel.de/Arduino/DMXSerial.aspx&lt;br /&gt;
&lt;br /&gt;
Die Librarys sollten entweder mit dem entsprechenden Menüpunkt in die IDE integriert werden oder jeweils nach auspacken des zip files als als kompletten Ordner im Arduino libraries verzeichnis abgelegt werden (siehe [http://www.arduino.cc/en/Hacking/Libraries)]).&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version des RGB-Driver Sketches findet sich auf [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ sourceforge].&lt;br /&gt;
&lt;br /&gt;
Dieser muss in Arduino\libraries\panstamp\examples\sketches entpackt und die rbgdriver.ino gestartet werden. In der Arduino IDE sollte unter Tools-&amp;gt;Board &amp;quot;Arduino Pro or Pro Mini (3.3V, 8MHz) w/ Atmega328&amp;quot; eingestellt sein. Wenn man das boards.txt file von [http://code.google.com/p/panstamp/downloads/detail?name=boards.txt&amp;amp;can=2&amp;amp;q= hier] installiert kann man in der IDE auch direkt PanStamp als Plattform auswählen.&lt;br /&gt;
&lt;br /&gt;
Welche Features der sketch bietet lässt sich im config.h file durch ein- oder auskommentieren der #define ENABLE_... Zeilen festlegen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Besonderheiten bei der Nutzung einiger Funktionen&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
* #define ENABLE_DMX&lt;br /&gt;
&lt;br /&gt;
Hierbei ist darauf zu achten, dass in der DMX-Lib in der Datei DMXSerial.h die Zeile&lt;br /&gt;
#define DmxModePin 2     // Arduino pin 2 for controlling the data direction&lt;br /&gt;
in &lt;br /&gt;
#define DmxModePin 7     // Arduino pin 7 for controlling the data direction&lt;br /&gt;
abgeändert werden muss.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* #define HAS_SENSOR (ermöglicht die Nutzung eines DHT22 Sensors zur Auswerung von Temperatur und Luftfeuchtigkeit)&lt;br /&gt;
&lt;br /&gt;
USE_SOFT_PWM;&lt;br /&gt;
ENABLE_IR_SEND;&lt;br /&gt;
ENABLE_REPEATER;&lt;br /&gt;
&lt;br /&gt;
sollte hierfür auskommentiert sein.&lt;br /&gt;
&lt;br /&gt;
In der IRremote.cpp Datei in der Irremote Library muss die Zeile&lt;br /&gt;
&lt;br /&gt;
void IRrecv::disableIRIn() &lt;br /&gt;
{&lt;br /&gt;
TIMER_DISABLE_INTR;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sowie die Irremote.h Datei unter Public: um die Zeile &lt;br /&gt;
&lt;br /&gt;
void disableIRIn();&lt;br /&gt;
&lt;br /&gt;
erweitert werden.&lt;br /&gt;
&lt;br /&gt;
Der Daten-Pin des DHT22 Sensors muss hierfür an A2 des Panstamps angeschlossen werden.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.panstamp.com/home panStamp] panStamp Hersteller&lt;br /&gt;
* [http://itse.homeip.net/projekte/12/6/ Projektseite] für das RGB-Multi-Board.&lt;br /&gt;
* [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ rgbdriver sketch] auf sourceforge&lt;br /&gt;
* [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ soilmoisture sketch]  auf sourceforge&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Interfaces]]&lt;br /&gt;
[[Kategorie:Other Components]]&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=PanStamp&amp;diff=6806</id>
		<title>PanStamp</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=PanStamp&amp;diff=6806"/>
		<updated>2014-07-09T19:17:29Z</updated>

		<summary type="html">&lt;p&gt;Fidel: /* Arduino Sketches */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle}}&lt;br /&gt;
{{SEITENTITEL:panStamp}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Hardware&lt;br /&gt;
|Bild=panStamp.jpg&lt;br /&gt;
|Bildbeschreibung=panStamp&lt;br /&gt;
|HWProtocol=SWAP&lt;br /&gt;
|HWType=Sender, Empfänger, Sensor, [[Interface]]&lt;br /&gt;
|HWCategory=&lt;br /&gt;
|HWComm=868MHz (433/915MHz)&lt;br /&gt;
|HWChannels=&lt;br /&gt;
|HWVoltage=3.3V (panStick: 5V USB)&lt;br /&gt;
|HWPowerConsumption=&lt;br /&gt;
|HWPoweredBy=Battery (panStick: USB)&lt;br /&gt;
|HWSize=17.7 x 30.5 mm&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#panStamp 35_panStamp.pm] [http://fhem.de/commandref.html#SWAP 35_SWAP.pm]&lt;br /&gt;
|ModOwner=[http://forum.fhem.de/index.php?action=profile;u=430 Andre / justme1968]&lt;br /&gt;
|HWManufacturer=panStamp&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.panstamp.com/home PanStamps] sind [[Arduino]] Clones, die ein CC1101 Funkmodul beinhalten. Mit ihnen lassen sich Sensoren und Aktoren drahtlos an FHEM anbinden. Sie lassen sich genau wie Arduinos über die Ardunio IDE oder mit dem ino Kommandozeilen Binary programmieren.&lt;br /&gt;
&lt;br /&gt;
Der panStamp Software Stack unterstützt einen stromsparenden Power-Down- oder Sleep-Modus für batteriebetriebene Sensoren, aus dem diese dann nur zur eigentlichen Messung und Übertragung &amp;quot;aufwachen&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Zur Kommunikation in einem panStamp Netzwerk dient das &#039;&#039;Simple Wireless Abstract Protocol&#039;&#039; ([http://code.google.com/p/panstamp/wiki/SWAP SWAP]).&lt;br /&gt;
&lt;br /&gt;
Um einen panStamp in Betrieb zu nehmen muss er unbedingt mit einer Antenne oder einem stück Draht in der [https://code.google.com/p/panstamp/wiki/antennalengths richtigen Länge] bestückt sein. Ohne Antenne funktioniert die Übertragung nicht. Auch nicht auf kurze Distanzen.&lt;br /&gt;
&lt;br /&gt;
== Simple Wireless Abstract Protocol (SWAP) ==&lt;br /&gt;
Die komplette SWAP- Kommunikation ist registerbasiert und erfolgt mit Nachrichten um diese Register abzufragen, zu setzen und deren Inhalt zu senden. Alle Register lassen sich lesen, manche auch beschreiben.&lt;br /&gt;
&lt;br /&gt;
Jeder panStamp stellt elf Systemregister (00-0A) [http://code.google.com/p/panstamp/wiki/SWAPregisters] und beliebig viele sketchabängige Userregister (0B-)bereit. Die Beschreibung der jeweils von einem Sketch bereitgestellten Userregister erfolgt in &#039;&#039;Device Description Files&#039;&#039;, die in .../FHEM/lib/SWAP zu finden sind. Die Identifikation der Art eines panStamp und die Zuordnung zu einem bestimmten Device Description File erfolgt über den productCode der aus &#039;&#039;Hersteller&#039;&#039;- und &#039;&#039;Produkt&#039;&#039;-Id gebildet wird.&lt;br /&gt;
&lt;br /&gt;
In den Systemregistern steht z.&amp;amp;nbsp;B. der productCode, die Deviceadresse und das Übertragungsintervall. Konfigurierbare Register werden im EEPROM gesichert, so dass die Werte auch bei einem Neustart nicht verlorengehen. Beim ersten Starten eines panStamp ist das EEPROM mit FF initialisiert und alle konfigurierbaren Register haben diesen Wert, also z.&amp;amp;nbsp;B. die Adresse FF und das Intervall FFFF (zwischen 18 und 19 Stunden).&lt;br /&gt;
&lt;br /&gt;
Die Systemregister werden in der Device Detailansicht bei den InternalValues im oberen Bereich angezeigt und die User-Register als reading im unteren Bereich.&lt;br /&gt;
&lt;br /&gt;
Jeder panStamp durchläuft beim Start eine definierte Einschaltsequenz und überträgt als erstes seinen productCode. Batteriebetriebene panStamps warten anschließend drei Sekunden auf Konfigurationskommandos. Danach werden bestimmte Systemregister und aktuelle Messwerte gesendet.&lt;br /&gt;
&lt;br /&gt;
== FHEM Integration ==&lt;br /&gt;
Die Integration in FHEM erfolgt über eine reihe von Modulen die im folgenden genauer beschrieben werden.&lt;br /&gt;
=== panStamp ===&lt;br /&gt;
Als Schnittstelle zwischen FHEM und einem panStamp Netzwerk dient entweder ein panStick (USB Stick mit aufgestecktem panStamp) oder ein panStamp Shield mit integriertem panStamp an einem Raspberry PI. Der so angebundene panStamp wird mit einem Modem-Sketch als RF Modem verwenden und über das FHEM Modul panStamp angesprochen. Hierzu ist in FHEM ein entsprechendes Device anzulegen: &amp;lt;pre&amp;gt;define panStick panStamp /dev/ttyUSBx@38400&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dieses panStamp Device versucht dann als erstes alle panStamps im Netz zu finden und per autocreate anzulegen.&lt;br /&gt;
&lt;br /&gt;
=== SWAP ===&lt;br /&gt;
[[Datei:SWAP_ 0000000100000005-detail.png|mini|hochkant=2.5|Readings]]&lt;br /&gt;
Das SWAP Modul ermöglicht die generische Integration beliebiger panStamp Sensoren und Aktoren in FHEM. Mit Hilfe der im jeweiligen Device Description File hinterlegten Beschreibung werden hierzu automatisch userReadings angelegt die neben den reinen Registerwerten in hex auch &#039;menschenlesbare&#039; readings der Sensorwerte erzeugen. Damit dies funktioniert, muss das Attribut ProductCode korrekt gesetzt sein. Das geschieht normalerweise automatisch beim Anlegen des Device.&lt;br /&gt;
&lt;br /&gt;
Hier Beispielhaft anhand eines BMP085 Temperatur- und Luftdrucksensors dargestellt:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;attr temppress userReadings voltage:0B-Voltage {hex(ReadingsVal($name,&amp;quot;0B-Voltage&amp;quot;,&amp;quot;0&amp;quot;))*0.001}, temperature:0C.0-Temperature {hex(ReadingsVal($name,&amp;quot;0C.0-Temperature&amp;quot;,&amp;quot;0&amp;quot;))*0.1-50}, pressure:0C.1-Pressure {hex(ReadingsVal($name,&amp;quot;0C.1-Pressure&amp;quot;,&amp;quot;0&amp;quot;))*0.01}, pressureNN:0C.1-Pressure {sprintf(&amp;quot;%.2f&amp;quot;,hex(ReadingsVal($name,&amp;quot;0C.1-Pressure&amp;quot;,&amp;quot;0&amp;quot;))*0.01 + AttrVal(&amp;quot;global&amp;quot;, &amp;quot;altitude&amp;quot;, 0)/8.5)}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:SWAP_ 0000000100000005.png|mini|hochkant=2.5|Resultat eines stateFormat]]&lt;br /&gt;
Aus diesen readings kann dann mit stateFormat die gewünschte Darstellung für die Raumübersicht erzeugt werden:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;attr temppress stateFormat {sprintf(&amp;quot;%.1f&amp;quot;,ReadingsVal($name,&amp;quot;temperature&amp;quot;,0)).&amp;quot;°C &amp;quot;.sprintf(&amp;quot;%.1f&amp;quot;,ReadingsVal($name,&amp;quot;pressureNN&amp;quot;,0)).&amp;quot;mbar&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sobald ein SWAP Device mit dem productCode korrekt angelegt wurde, können die Userregister bzw. alle Register aufgelistet werden: &lt;br /&gt;
 get &amp;lt;device&amp;gt; regList&lt;br /&gt;
 get &amp;lt;device&amp;gt; regListALL&lt;br /&gt;
&lt;br /&gt;
und einzelne Register abgefragt und gesetzt werden:&lt;br /&gt;
 set &amp;lt;device&amp;gt; regGet &amp;lt;ID&amp;gt;&lt;br /&gt;
 set &amp;lt;device&amp;gt; regSet &amp;lt;ID&amp;gt; &amp;lt;value&amp;gt;&lt;br /&gt;
Für die Systemregister kann hierzu statt der RegisterID auch der Registername (siehe regListAll) verwendet werden.&lt;br /&gt;
&lt;br /&gt;
==== Neue panStamps in Betrieb nehmen ====&lt;br /&gt;
&#039;&#039;&#039;Info: Das SWAP Modul unterstützt autocreate. Bei der Inbetriebnahme ist autocreate zu aktivieren!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Neue panStamps sollten nur Einer nach dem Anderen in Betrieb genommen werden, da sie zuerst mit einer eindeutigen Device-Adresse (ungleich FF und grösser 01) versehen werden müssen. Bei batteriebetriebenen Sensoren sollte auch das Sendeintervall auf einen sinnvollen Wert gesetzt werden:&lt;br /&gt;
 set &amp;lt;device&amp;gt; regSet 09 &amp;lt;device adresse als 2 stellige hex zahl&amp;gt;&lt;br /&gt;
 set &amp;lt;device&amp;gt; regSet 0A &amp;lt;intervall in sekunden als 4 stellige hex zahl&amp;gt;&lt;br /&gt;
Für Devices im Power-Down-Modus werden diese Kommandos in eine Warteschlange gestellt und übertragen, sobald das Device seine Initialisierungssequenz durchläuft. Hierzu ist nach Absetzen der Kommandos Reset zu drücken oder die Stromquelle erneut zu verbinden.&lt;br /&gt;
&lt;br /&gt;
Das SWAP modul versucht, ein Device mit der default Adresse &amp;lt;code&amp;gt;FF&amp;lt;/code&amp;gt; automatisch auf die erste freie Adresse im Bereich &amp;lt;code&amp;gt;F0&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;FE&amp;lt;/code&amp;gt; zu ändern.&lt;br /&gt;
&lt;br /&gt;
Für batteriebetriebene Devices (genauer: Devices die den Power-Down-Modus unterstützen) wird das Default Sendeintervall von &amp;lt;code&amp;gt;FFFF&amp;lt;/code&amp;gt; zu &amp;lt;code&amp;gt;0384&amp;lt;/code&amp;gt; (900 Sekunden) geändert.&lt;br /&gt;
Es gibt mit bestimmten panstamp lib Versionen das Problem das ein wert von FFFF in 0A zum Überlauf führt und dann ununterbrochen gesendet wird. Im fhem Modul wird versucht das abzufangen. Das funktioniert auf manchen langsamen host systemen (z.B. FritzBox) nicht, weil der panstamp so schnell sendet das fhem so mit dem abarbeiten beschäftigt ist das es selber nicht zum senden kommt.&lt;br /&gt;
Zur Abhilfe kann im sketch in setup() ganz am Anfang  ein&lt;br /&gt;
  EEPROM.write(EEPROM_TX_INTERVAL, 0x55);&lt;br /&gt;
  EEPROM.write(EEPROM_TX_INTERVAL+1, 0x55);&lt;br /&gt;
eingefügt werden und noch mal flashen. Wenn der Sketch damit ein mal durchgelaufen ist können diese beiden Zeilen wieder entfernen und der panstamp noch mal geflasht.&lt;br /&gt;
&lt;br /&gt;
Automatisch gesetzte Werte sollten danach manuell auf die jeweilige Installation angepasst werden.&lt;br /&gt;
&lt;br /&gt;
==== Beispiele ====&lt;br /&gt;
===== Bodenfeuchte =====&lt;br /&gt;
Der panStamp soilmoisture Sketch aus dem examples Verzeichnis ist mit dem Standard SWAP Modul kompatibel. &lt;br /&gt;
&lt;br /&gt;
Eine für einen Vegetronix sensor angepasste Version kann von [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ sourceforge] heruntergeladen werden. Das Übertragungsintervall ist wie üblich über das regsiter 0A konfigurierbar. Der Sensor wird and GND, D7 für die Versorgungsspannung und A4 für den Messwert angeschlossen. Erfahrungen haben gezeigt, dass bei einem fünfminütigen Übertragungsintervall nach 12 Monaten Laufzeit die Batteriespannung von 1.55V auf 1.4V abfällt. Das würde bedeuten, dass eine Batterie im Batterieboard mindestens eine Laufzeit von drei Jahren haben sollte.&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;MyBodenfeuchte&amp;gt; stateFormat VWC_A%&lt;br /&gt;
 set &amp;lt;MyBodenfeuchte&amp;gt; userReadings Level0_Voltage {hex(ReadingsVal($name,&amp;quot;0C.0-Moisture_level_0&amp;quot;,&amp;quot;0&amp;quot;))*(3.3/1024)}, &lt;br /&gt;
     VWC_A:0C.0-Moisture_level_0 {sprintf(&amp;quot;%.0f&amp;quot;,(11.6552 * (ReadingsVal($name,&amp;quot;Level0_Voltage&amp;quot;,&amp;quot;0&amp;quot;))**4 + 7.10835 * &lt;br /&gt;
        (ReadingsVal($name,&amp;quot;Level0_Voltage&amp;quot;,&amp;quot;0&amp;quot;))**2 - 0.569557) / ((ReadingsVal($name,&amp;quot;Level0_Voltage&amp;quot;,&amp;quot;0&amp;quot;))**2 + 1))}, &lt;br /&gt;
     voltage:0B-Voltage {hex(ReadingsVal($name,&amp;quot;0B-Voltage&amp;quot;,&amp;quot;0&amp;quot;))*0.001}, &lt;br /&gt;
     battery:0B-Voltage {(ReadingsVal($name,&amp;quot;voltage&amp;quot;,&amp;quot;0&amp;quot;)&amp;lt;1?&amp;quot;low&amp;quot;:&amp;quot;ok&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
[[Datei:SWAP_ soilmositure-plot.jpg|mini|x100px|Bodenfeuchte]]&lt;br /&gt;
&amp;lt;div class=&amp;quot;tright&amp;quot; style=&amp;quot;clear:none&amp;quot;&amp;gt;[[Datei:panstamp_vegetronix1.jpg|mini|ohne|x130px|Vegetronix Bodenfeuchtesensor an Panstamp]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;tright&amp;quot; style=&amp;quot;clear:none&amp;quot;&amp;gt;[[Datei:panstamp_vegetronix2.jpg|mini|ohne|x130px|Vegetronix Bodenfeuchtesensor an Panstamp]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit einem entsprechend erweiterten Sketch lassen sich auch mehrere Sensoren an einem panStamp auslesen.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Bilder zeigen eine Panstamp/Vegetronix Außeneinheit im IP65-Gehäuse. Dieser Aufbau wird ganzjährig den Witterungseinflüssen ausgesetzt. Die auf den Stab aufgesetzte Antenne muss nicht verwendet werden, bei kürzeren Funkstrecken ist eine innenliegende Drahtantenne ausreichend. Bitte in FHEM den RSSI- und LQI-Wert sowie die Gleichmäßigkeit des Empfangens der 5 Minuten Sendeintervalle dementsprechend beobachten.&lt;br /&gt;
&lt;br /&gt;
=== SWAP_XXXXXXXXXXXXXXXX ===&lt;br /&gt;
Besonders bei Aktoren ist oft eine engere FHEM-Integration sinnvoll, um FHEM Konzepte wie on/off/on-for-timer direkt abzubilden und nicht mehr nur auf die Registerebene und regSet und regGet Kommandos beschränkt zu sein.&lt;br /&gt;
&lt;br /&gt;
Um per autocreate automatisch das passende Modul laden zu können, müssen diese Module nach dem Schema SWAP_XXXXXXXXXXXXXXXX.pm benannt sein wobei XXXXXXXXXXXXXXXX für den jeweiligen productCode steht.&lt;br /&gt;
&lt;br /&gt;
==== SWAP_0000002200000003 ====&lt;br /&gt;
[[Datei:SWAP_0000002200000003.png|mini|rechts|hochkant=2.5|RGB LED Driver Board]]&lt;br /&gt;
Ein FHEM Modul für das modifizierte panStamp RGB LED Driver Board. &lt;br /&gt;
&lt;br /&gt;
Das Board unterstützt RGBW LEDs und lässt sich per Infrarot Fernbedienung, DMX Controller (z.&amp;amp;nbsp;B. als Unterputz Touchpanel) und FHEM bedienen.&lt;br /&gt;
&lt;br /&gt;
Der Funktionsumfang wird in diesem [http://forum.fhem.de/index.php/topic,12487.msg81923.html#msg81923 Forenthread] vorgestellt. Die Hardware für das Board wird [http://forum.fhem.de/index.php/topic,13890.0.html  hier] im FHEM Forum vorgestellt und ein Prototyp ist [http://forum.fhem.de/index.php/topic,12487.msg85777.html#msg85777 hier] zu sehen.&lt;br /&gt;
=====Upate 2014-01-11===== &lt;br /&gt;
Zur Zeit ist Version 2 des Boards in Vorbereiteung. Die Projektseite zur Hardware findet sich [http://itse.homeip.net/projekte/12/6/ hier]. &lt;br /&gt;
&lt;br /&gt;
Demnächst wird eine aktualisiert Version des Fhem Moduls und panStamp Sketches eingecheckt. Eine Übersicht über die dann vorhandene Funktionalität:&lt;br /&gt;
&lt;br /&gt;
was geht:&lt;br /&gt;
* bis zu vier led kanäle (je nach kombination von ir und soft pwm)&lt;br /&gt;
* ir senden&lt;br /&gt;
* ir empfangen&lt;br /&gt;
* messen ob die led versorgung an ist&lt;br /&gt;
* helligkeit eines an A2 angeschlossenen helligkeits sensors&lt;br /&gt;
* konfiguration der dmx basis adresse über das swap register 0x12&lt;br /&gt;
* optional soft on auf letzten wert&lt;br /&gt;
* alles was auch vorher schon ging: dimmen, faden, ir fernbedienungen anlernen, ...&lt;br /&gt;
&lt;br /&gt;
wichtig zu wissen:&lt;br /&gt;
* wenn ir aktiv ist und kein soft pwm lässt sich der 4. kanal nur ein und aus schalten&lt;br /&gt;
* wenn ir aktiv ist muss soft pwm aktiv sein um den 4. kanäle auch zu dimmen&lt;br /&gt;
* es wird nur ein zusätzlicher kanal tatsächlich schon unterstützt. der fünfte kommt noch&lt;br /&gt;
* bei ir senden sind nur die aufrufe für sony und nec tatsächlich eingebaut. die anderen sind aber einfach zu ergänzen&lt;br /&gt;
* beim ir senden sind noch keine Wiederholungen eingebaut. die müssen laut protokoll aber eigentlich sein&lt;br /&gt;
&lt;br /&gt;
was noch kommt:&lt;br /&gt;
* besseres soft pwm&lt;br /&gt;
* mehr konfiguration bezüglich default verhalten. ramp zeiten, delays, ...&lt;br /&gt;
* hsv farb modell um besser zu faden und vor allem um den weiss anteil automatisch auf die weiss leds zu legen&lt;br /&gt;
* die virtuellen channel &lt;br /&gt;
* fhem kompatibles ir senden&lt;br /&gt;
* sofortiges senden von helligkeit und led spannung bei änderung&lt;br /&gt;
* andere ir lib mit sehr viel besserer geräte unterstützung&lt;br /&gt;
&lt;br /&gt;
wie gehabt muss alles über config.h konfiguriert werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== weitrere Screenshots =====&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:SWAP_0000002200000003-internal.png|InternalValues&lt;br /&gt;
File:SWAP_0000002200000003-readings.png|Readings&lt;br /&gt;
File:SWAP_0000002200000003-attributes.png|Attributes&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Arduino Sketches ==&lt;br /&gt;
Zum Flashen der Panstamps wird die Arduino IDE benötigt. Eine Installationsanleitung ist unter folgendem Link zu finden:&lt;br /&gt;
:https://code.google.com/p/panstamp/wiki/firststeps&lt;br /&gt;
&lt;br /&gt;
Für den RGB-Driver sketch sind je nach gewünschtem Funktionsumfang noch folgende libs zu installieren:&lt;br /&gt;
&lt;br /&gt;
* IR lib - https://github.com/shirriff/Arduino-IRremote&lt;br /&gt;
* DMX lib- http://www.mathertel.de/Arduino/DMXSerial.aspx&lt;br /&gt;
&lt;br /&gt;
Die Librarys sollten entweder mit dem entsprechenden Menüpunkt in die IDE integriert werden oder jeweils nach auspacken des zip files als als kompletten Ordner im Arduino libraries verzeichnis abgelegt werden (siehe [http://www.arduino.cc/en/Hacking/Libraries)]).&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version des RGB-Driver Sketches findet sich auf [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ sourceforge].&lt;br /&gt;
&lt;br /&gt;
Dieser muss in Arduino\libraries\panstamp\examples\sketches entpackt und die rbgdriver.ino gestartet werden. In der Arduino IDE sollte unter Tools-&amp;gt;Board &amp;quot;Arduino Pro or Pro Mini (3.3V, 8MHz) w/ Atmega328&amp;quot; eingestellt sein. Wenn man das boards.txt file von [http://code.google.com/p/panstamp/downloads/detail?name=boards.txt&amp;amp;can=2&amp;amp;q= hier] installiert kann man in der IDE auch direkt PanStamp als Plattform auswählen.&lt;br /&gt;
&lt;br /&gt;
Welche Features der sketch bietet lässt sich im config.h file durch ein- oder auskommentieren der #define ENABLE_... Zeilen festlegen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Besonderheiten bei der Nutzung einiger Funktionen&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;- #define ENABLE_DMX&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist darauf zu achten, dass in der DMX-Lib in der Datei DMXSerial.h die Zeile&lt;br /&gt;
* #define DmxModePin 2     // Arduino pin 2 for controlling the data direction&lt;br /&gt;
in &lt;br /&gt;
* #define DmxModePin 7     // Arduino pin 7 for controlling the data direction&lt;br /&gt;
abgeändert werden muss.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;- #define HAS_SENSOR (ermöglicht die Nutzung eines DHT22 Sensors zur Auswerung von Temperatur und Luftfeuchtigkeit)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
USE_SOFT_PWM;&lt;br /&gt;
ENABLE_IR_SEND;&lt;br /&gt;
ENABLE_REPEATER;&lt;br /&gt;
&lt;br /&gt;
sollte hierfür auskommentiert sein.&lt;br /&gt;
&lt;br /&gt;
In der IRremote.cpp Datei in der Irremote Library muss die Zeile&lt;br /&gt;
&lt;br /&gt;
void IRrecv::disableIRIn() &lt;br /&gt;
{&lt;br /&gt;
TIMER_DISABLE_INTR;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sowie die Irremote.h Datei unter Public: um die Zeile &lt;br /&gt;
&lt;br /&gt;
void disableIRIn();&lt;br /&gt;
&lt;br /&gt;
erweitert werden.&lt;br /&gt;
&lt;br /&gt;
Der Daten-Pin des DHT22 Sensors muss hierfür an A2 des Panstamps angeschlossen werden.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.panstamp.com/home panStamp] panStamp Hersteller&lt;br /&gt;
* [http://itse.homeip.net/projekte/12/6/ Projektseite] für das RGB-Multi-Board.&lt;br /&gt;
* [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ rgbdriver sketch] auf sourceforge&lt;br /&gt;
* [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ soilmoisture sketch]  auf sourceforge&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Interfaces]]&lt;br /&gt;
[[Kategorie:Other Components]]&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=PanStamp&amp;diff=6805</id>
		<title>PanStamp</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=PanStamp&amp;diff=6805"/>
		<updated>2014-07-09T19:15:40Z</updated>

		<summary type="html">&lt;p&gt;Fidel: /* Arduino Sketches */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle}}&lt;br /&gt;
{{SEITENTITEL:panStamp}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Hardware&lt;br /&gt;
|Bild=panStamp.jpg&lt;br /&gt;
|Bildbeschreibung=panStamp&lt;br /&gt;
|HWProtocol=SWAP&lt;br /&gt;
|HWType=Sender, Empfänger, Sensor, [[Interface]]&lt;br /&gt;
|HWCategory=&lt;br /&gt;
|HWComm=868MHz (433/915MHz)&lt;br /&gt;
|HWChannels=&lt;br /&gt;
|HWVoltage=3.3V (panStick: 5V USB)&lt;br /&gt;
|HWPowerConsumption=&lt;br /&gt;
|HWPoweredBy=Battery (panStick: USB)&lt;br /&gt;
|HWSize=17.7 x 30.5 mm&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#panStamp 35_panStamp.pm] [http://fhem.de/commandref.html#SWAP 35_SWAP.pm]&lt;br /&gt;
|ModOwner=[http://forum.fhem.de/index.php?action=profile;u=430 Andre / justme1968]&lt;br /&gt;
|HWManufacturer=panStamp&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.panstamp.com/home PanStamps] sind [[Arduino]] Clones, die ein CC1101 Funkmodul beinhalten. Mit ihnen lassen sich Sensoren und Aktoren drahtlos an FHEM anbinden. Sie lassen sich genau wie Arduinos über die Ardunio IDE oder mit dem ino Kommandozeilen Binary programmieren.&lt;br /&gt;
&lt;br /&gt;
Der panStamp Software Stack unterstützt einen stromsparenden Power-Down- oder Sleep-Modus für batteriebetriebene Sensoren, aus dem diese dann nur zur eigentlichen Messung und Übertragung &amp;quot;aufwachen&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Zur Kommunikation in einem panStamp Netzwerk dient das &#039;&#039;Simple Wireless Abstract Protocol&#039;&#039; ([http://code.google.com/p/panstamp/wiki/SWAP SWAP]).&lt;br /&gt;
&lt;br /&gt;
Um einen panStamp in Betrieb zu nehmen muss er unbedingt mit einer Antenne oder einem stück Draht in der [https://code.google.com/p/panstamp/wiki/antennalengths richtigen Länge] bestückt sein. Ohne Antenne funktioniert die Übertragung nicht. Auch nicht auf kurze Distanzen.&lt;br /&gt;
&lt;br /&gt;
== Simple Wireless Abstract Protocol (SWAP) ==&lt;br /&gt;
Die komplette SWAP- Kommunikation ist registerbasiert und erfolgt mit Nachrichten um diese Register abzufragen, zu setzen und deren Inhalt zu senden. Alle Register lassen sich lesen, manche auch beschreiben.&lt;br /&gt;
&lt;br /&gt;
Jeder panStamp stellt elf Systemregister (00-0A) [http://code.google.com/p/panstamp/wiki/SWAPregisters] und beliebig viele sketchabängige Userregister (0B-)bereit. Die Beschreibung der jeweils von einem Sketch bereitgestellten Userregister erfolgt in &#039;&#039;Device Description Files&#039;&#039;, die in .../FHEM/lib/SWAP zu finden sind. Die Identifikation der Art eines panStamp und die Zuordnung zu einem bestimmten Device Description File erfolgt über den productCode der aus &#039;&#039;Hersteller&#039;&#039;- und &#039;&#039;Produkt&#039;&#039;-Id gebildet wird.&lt;br /&gt;
&lt;br /&gt;
In den Systemregistern steht z.&amp;amp;nbsp;B. der productCode, die Deviceadresse und das Übertragungsintervall. Konfigurierbare Register werden im EEPROM gesichert, so dass die Werte auch bei einem Neustart nicht verlorengehen. Beim ersten Starten eines panStamp ist das EEPROM mit FF initialisiert und alle konfigurierbaren Register haben diesen Wert, also z.&amp;amp;nbsp;B. die Adresse FF und das Intervall FFFF (zwischen 18 und 19 Stunden).&lt;br /&gt;
&lt;br /&gt;
Die Systemregister werden in der Device Detailansicht bei den InternalValues im oberen Bereich angezeigt und die User-Register als reading im unteren Bereich.&lt;br /&gt;
&lt;br /&gt;
Jeder panStamp durchläuft beim Start eine definierte Einschaltsequenz und überträgt als erstes seinen productCode. Batteriebetriebene panStamps warten anschließend drei Sekunden auf Konfigurationskommandos. Danach werden bestimmte Systemregister und aktuelle Messwerte gesendet.&lt;br /&gt;
&lt;br /&gt;
== FHEM Integration ==&lt;br /&gt;
Die Integration in FHEM erfolgt über eine reihe von Modulen die im folgenden genauer beschrieben werden.&lt;br /&gt;
=== panStamp ===&lt;br /&gt;
Als Schnittstelle zwischen FHEM und einem panStamp Netzwerk dient entweder ein panStick (USB Stick mit aufgestecktem panStamp) oder ein panStamp Shield mit integriertem panStamp an einem Raspberry PI. Der so angebundene panStamp wird mit einem Modem-Sketch als RF Modem verwenden und über das FHEM Modul panStamp angesprochen. Hierzu ist in FHEM ein entsprechendes Device anzulegen: &amp;lt;pre&amp;gt;define panStick panStamp /dev/ttyUSBx@38400&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dieses panStamp Device versucht dann als erstes alle panStamps im Netz zu finden und per autocreate anzulegen.&lt;br /&gt;
&lt;br /&gt;
=== SWAP ===&lt;br /&gt;
[[Datei:SWAP_ 0000000100000005-detail.png|mini|hochkant=2.5|Readings]]&lt;br /&gt;
Das SWAP Modul ermöglicht die generische Integration beliebiger panStamp Sensoren und Aktoren in FHEM. Mit Hilfe der im jeweiligen Device Description File hinterlegten Beschreibung werden hierzu automatisch userReadings angelegt die neben den reinen Registerwerten in hex auch &#039;menschenlesbare&#039; readings der Sensorwerte erzeugen. Damit dies funktioniert, muss das Attribut ProductCode korrekt gesetzt sein. Das geschieht normalerweise automatisch beim Anlegen des Device.&lt;br /&gt;
&lt;br /&gt;
Hier Beispielhaft anhand eines BMP085 Temperatur- und Luftdrucksensors dargestellt:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;attr temppress userReadings voltage:0B-Voltage {hex(ReadingsVal($name,&amp;quot;0B-Voltage&amp;quot;,&amp;quot;0&amp;quot;))*0.001}, temperature:0C.0-Temperature {hex(ReadingsVal($name,&amp;quot;0C.0-Temperature&amp;quot;,&amp;quot;0&amp;quot;))*0.1-50}, pressure:0C.1-Pressure {hex(ReadingsVal($name,&amp;quot;0C.1-Pressure&amp;quot;,&amp;quot;0&amp;quot;))*0.01}, pressureNN:0C.1-Pressure {sprintf(&amp;quot;%.2f&amp;quot;,hex(ReadingsVal($name,&amp;quot;0C.1-Pressure&amp;quot;,&amp;quot;0&amp;quot;))*0.01 + AttrVal(&amp;quot;global&amp;quot;, &amp;quot;altitude&amp;quot;, 0)/8.5)}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:SWAP_ 0000000100000005.png|mini|hochkant=2.5|Resultat eines stateFormat]]&lt;br /&gt;
Aus diesen readings kann dann mit stateFormat die gewünschte Darstellung für die Raumübersicht erzeugt werden:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;attr temppress stateFormat {sprintf(&amp;quot;%.1f&amp;quot;,ReadingsVal($name,&amp;quot;temperature&amp;quot;,0)).&amp;quot;°C &amp;quot;.sprintf(&amp;quot;%.1f&amp;quot;,ReadingsVal($name,&amp;quot;pressureNN&amp;quot;,0)).&amp;quot;mbar&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sobald ein SWAP Device mit dem productCode korrekt angelegt wurde, können die Userregister bzw. alle Register aufgelistet werden: &lt;br /&gt;
 get &amp;lt;device&amp;gt; regList&lt;br /&gt;
 get &amp;lt;device&amp;gt; regListALL&lt;br /&gt;
&lt;br /&gt;
und einzelne Register abgefragt und gesetzt werden:&lt;br /&gt;
 set &amp;lt;device&amp;gt; regGet &amp;lt;ID&amp;gt;&lt;br /&gt;
 set &amp;lt;device&amp;gt; regSet &amp;lt;ID&amp;gt; &amp;lt;value&amp;gt;&lt;br /&gt;
Für die Systemregister kann hierzu statt der RegisterID auch der Registername (siehe regListAll) verwendet werden.&lt;br /&gt;
&lt;br /&gt;
==== Neue panStamps in Betrieb nehmen ====&lt;br /&gt;
&#039;&#039;&#039;Info: Das SWAP Modul unterstützt autocreate. Bei der Inbetriebnahme ist autocreate zu aktivieren!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Neue panStamps sollten nur Einer nach dem Anderen in Betrieb genommen werden, da sie zuerst mit einer eindeutigen Device-Adresse (ungleich FF und grösser 01) versehen werden müssen. Bei batteriebetriebenen Sensoren sollte auch das Sendeintervall auf einen sinnvollen Wert gesetzt werden:&lt;br /&gt;
 set &amp;lt;device&amp;gt; regSet 09 &amp;lt;device adresse als 2 stellige hex zahl&amp;gt;&lt;br /&gt;
 set &amp;lt;device&amp;gt; regSet 0A &amp;lt;intervall in sekunden als 4 stellige hex zahl&amp;gt;&lt;br /&gt;
Für Devices im Power-Down-Modus werden diese Kommandos in eine Warteschlange gestellt und übertragen, sobald das Device seine Initialisierungssequenz durchläuft. Hierzu ist nach Absetzen der Kommandos Reset zu drücken oder die Stromquelle erneut zu verbinden.&lt;br /&gt;
&lt;br /&gt;
Das SWAP modul versucht, ein Device mit der default Adresse &amp;lt;code&amp;gt;FF&amp;lt;/code&amp;gt; automatisch auf die erste freie Adresse im Bereich &amp;lt;code&amp;gt;F0&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;FE&amp;lt;/code&amp;gt; zu ändern.&lt;br /&gt;
&lt;br /&gt;
Für batteriebetriebene Devices (genauer: Devices die den Power-Down-Modus unterstützen) wird das Default Sendeintervall von &amp;lt;code&amp;gt;FFFF&amp;lt;/code&amp;gt; zu &amp;lt;code&amp;gt;0384&amp;lt;/code&amp;gt; (900 Sekunden) geändert.&lt;br /&gt;
Es gibt mit bestimmten panstamp lib Versionen das Problem das ein wert von FFFF in 0A zum Überlauf führt und dann ununterbrochen gesendet wird. Im fhem Modul wird versucht das abzufangen. Das funktioniert auf manchen langsamen host systemen (z.B. FritzBox) nicht, weil der panstamp so schnell sendet das fhem so mit dem abarbeiten beschäftigt ist das es selber nicht zum senden kommt.&lt;br /&gt;
Zur Abhilfe kann im sketch in setup() ganz am Anfang  ein&lt;br /&gt;
  EEPROM.write(EEPROM_TX_INTERVAL, 0x55);&lt;br /&gt;
  EEPROM.write(EEPROM_TX_INTERVAL+1, 0x55);&lt;br /&gt;
eingefügt werden und noch mal flashen. Wenn der Sketch damit ein mal durchgelaufen ist können diese beiden Zeilen wieder entfernen und der panstamp noch mal geflasht.&lt;br /&gt;
&lt;br /&gt;
Automatisch gesetzte Werte sollten danach manuell auf die jeweilige Installation angepasst werden.&lt;br /&gt;
&lt;br /&gt;
==== Beispiele ====&lt;br /&gt;
===== Bodenfeuchte =====&lt;br /&gt;
Der panStamp soilmoisture Sketch aus dem examples Verzeichnis ist mit dem Standard SWAP Modul kompatibel. &lt;br /&gt;
&lt;br /&gt;
Eine für einen Vegetronix sensor angepasste Version kann von [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ sourceforge] heruntergeladen werden. Das Übertragungsintervall ist wie üblich über das regsiter 0A konfigurierbar. Der Sensor wird and GND, D7 für die Versorgungsspannung und A4 für den Messwert angeschlossen. Erfahrungen haben gezeigt, dass bei einem fünfminütigen Übertragungsintervall nach 12 Monaten Laufzeit die Batteriespannung von 1.55V auf 1.4V abfällt. Das würde bedeuten, dass eine Batterie im Batterieboard mindestens eine Laufzeit von drei Jahren haben sollte.&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;MyBodenfeuchte&amp;gt; stateFormat VWC_A%&lt;br /&gt;
 set &amp;lt;MyBodenfeuchte&amp;gt; userReadings Level0_Voltage {hex(ReadingsVal($name,&amp;quot;0C.0-Moisture_level_0&amp;quot;,&amp;quot;0&amp;quot;))*(3.3/1024)}, &lt;br /&gt;
     VWC_A:0C.0-Moisture_level_0 {sprintf(&amp;quot;%.0f&amp;quot;,(11.6552 * (ReadingsVal($name,&amp;quot;Level0_Voltage&amp;quot;,&amp;quot;0&amp;quot;))**4 + 7.10835 * &lt;br /&gt;
        (ReadingsVal($name,&amp;quot;Level0_Voltage&amp;quot;,&amp;quot;0&amp;quot;))**2 - 0.569557) / ((ReadingsVal($name,&amp;quot;Level0_Voltage&amp;quot;,&amp;quot;0&amp;quot;))**2 + 1))}, &lt;br /&gt;
     voltage:0B-Voltage {hex(ReadingsVal($name,&amp;quot;0B-Voltage&amp;quot;,&amp;quot;0&amp;quot;))*0.001}, &lt;br /&gt;
     battery:0B-Voltage {(ReadingsVal($name,&amp;quot;voltage&amp;quot;,&amp;quot;0&amp;quot;)&amp;lt;1?&amp;quot;low&amp;quot;:&amp;quot;ok&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
[[Datei:SWAP_ soilmositure-plot.jpg|mini|x100px|Bodenfeuchte]]&lt;br /&gt;
&amp;lt;div class=&amp;quot;tright&amp;quot; style=&amp;quot;clear:none&amp;quot;&amp;gt;[[Datei:panstamp_vegetronix1.jpg|mini|ohne|x130px|Vegetronix Bodenfeuchtesensor an Panstamp]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;tright&amp;quot; style=&amp;quot;clear:none&amp;quot;&amp;gt;[[Datei:panstamp_vegetronix2.jpg|mini|ohne|x130px|Vegetronix Bodenfeuchtesensor an Panstamp]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit einem entsprechend erweiterten Sketch lassen sich auch mehrere Sensoren an einem panStamp auslesen.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Bilder zeigen eine Panstamp/Vegetronix Außeneinheit im IP65-Gehäuse. Dieser Aufbau wird ganzjährig den Witterungseinflüssen ausgesetzt. Die auf den Stab aufgesetzte Antenne muss nicht verwendet werden, bei kürzeren Funkstrecken ist eine innenliegende Drahtantenne ausreichend. Bitte in FHEM den RSSI- und LQI-Wert sowie die Gleichmäßigkeit des Empfangens der 5 Minuten Sendeintervalle dementsprechend beobachten.&lt;br /&gt;
&lt;br /&gt;
=== SWAP_XXXXXXXXXXXXXXXX ===&lt;br /&gt;
Besonders bei Aktoren ist oft eine engere FHEM-Integration sinnvoll, um FHEM Konzepte wie on/off/on-for-timer direkt abzubilden und nicht mehr nur auf die Registerebene und regSet und regGet Kommandos beschränkt zu sein.&lt;br /&gt;
&lt;br /&gt;
Um per autocreate automatisch das passende Modul laden zu können, müssen diese Module nach dem Schema SWAP_XXXXXXXXXXXXXXXX.pm benannt sein wobei XXXXXXXXXXXXXXXX für den jeweiligen productCode steht.&lt;br /&gt;
&lt;br /&gt;
==== SWAP_0000002200000003 ====&lt;br /&gt;
[[Datei:SWAP_0000002200000003.png|mini|rechts|hochkant=2.5|RGB LED Driver Board]]&lt;br /&gt;
Ein FHEM Modul für das modifizierte panStamp RGB LED Driver Board. &lt;br /&gt;
&lt;br /&gt;
Das Board unterstützt RGBW LEDs und lässt sich per Infrarot Fernbedienung, DMX Controller (z.&amp;amp;nbsp;B. als Unterputz Touchpanel) und FHEM bedienen.&lt;br /&gt;
&lt;br /&gt;
Der Funktionsumfang wird in diesem [http://forum.fhem.de/index.php/topic,12487.msg81923.html#msg81923 Forenthread] vorgestellt. Die Hardware für das Board wird [http://forum.fhem.de/index.php/topic,13890.0.html  hier] im FHEM Forum vorgestellt und ein Prototyp ist [http://forum.fhem.de/index.php/topic,12487.msg85777.html#msg85777 hier] zu sehen.&lt;br /&gt;
=====Upate 2014-01-11===== &lt;br /&gt;
Zur Zeit ist Version 2 des Boards in Vorbereiteung. Die Projektseite zur Hardware findet sich [http://itse.homeip.net/projekte/12/6/ hier]. &lt;br /&gt;
&lt;br /&gt;
Demnächst wird eine aktualisiert Version des Fhem Moduls und panStamp Sketches eingecheckt. Eine Übersicht über die dann vorhandene Funktionalität:&lt;br /&gt;
&lt;br /&gt;
was geht:&lt;br /&gt;
* bis zu vier led kanäle (je nach kombination von ir und soft pwm)&lt;br /&gt;
* ir senden&lt;br /&gt;
* ir empfangen&lt;br /&gt;
* messen ob die led versorgung an ist&lt;br /&gt;
* helligkeit eines an A2 angeschlossenen helligkeits sensors&lt;br /&gt;
* konfiguration der dmx basis adresse über das swap register 0x12&lt;br /&gt;
* optional soft on auf letzten wert&lt;br /&gt;
* alles was auch vorher schon ging: dimmen, faden, ir fernbedienungen anlernen, ...&lt;br /&gt;
&lt;br /&gt;
wichtig zu wissen:&lt;br /&gt;
* wenn ir aktiv ist und kein soft pwm lässt sich der 4. kanal nur ein und aus schalten&lt;br /&gt;
* wenn ir aktiv ist muss soft pwm aktiv sein um den 4. kanäle auch zu dimmen&lt;br /&gt;
* es wird nur ein zusätzlicher kanal tatsächlich schon unterstützt. der fünfte kommt noch&lt;br /&gt;
* bei ir senden sind nur die aufrufe für sony und nec tatsächlich eingebaut. die anderen sind aber einfach zu ergänzen&lt;br /&gt;
* beim ir senden sind noch keine Wiederholungen eingebaut. die müssen laut protokoll aber eigentlich sein&lt;br /&gt;
&lt;br /&gt;
was noch kommt:&lt;br /&gt;
* besseres soft pwm&lt;br /&gt;
* mehr konfiguration bezüglich default verhalten. ramp zeiten, delays, ...&lt;br /&gt;
* hsv farb modell um besser zu faden und vor allem um den weiss anteil automatisch auf die weiss leds zu legen&lt;br /&gt;
* die virtuellen channel &lt;br /&gt;
* fhem kompatibles ir senden&lt;br /&gt;
* sofortiges senden von helligkeit und led spannung bei änderung&lt;br /&gt;
* andere ir lib mit sehr viel besserer geräte unterstützung&lt;br /&gt;
&lt;br /&gt;
wie gehabt muss alles über config.h konfiguriert werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== weitrere Screenshots =====&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:SWAP_0000002200000003-internal.png|InternalValues&lt;br /&gt;
File:SWAP_0000002200000003-readings.png|Readings&lt;br /&gt;
File:SWAP_0000002200000003-attributes.png|Attributes&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Arduino Sketches ==&lt;br /&gt;
Zum Flashen der Panstamps wird die Arduino IDE benötigt. Eine Installationsanleitung ist unter folgendem Link zu finden:&lt;br /&gt;
:https://code.google.com/p/panstamp/wiki/firststeps&lt;br /&gt;
&lt;br /&gt;
Für den RGB-Driver sketch sind je nach gewünschtem Funktionsumfang noch folgende libs zu installieren:&lt;br /&gt;
&lt;br /&gt;
* IR lib - https://github.com/shirriff/Arduino-IRremote&lt;br /&gt;
* DMX lib- http://www.mathertel.de/Arduino/DMXSerial.aspx&lt;br /&gt;
&lt;br /&gt;
Die Librarys sollten entweder mit dem entsprechenden Menüpunkt in die IDE integriert werden oder jeweils nach auspacken des zip files als als kompletten Ordner im Arduino libraries verzeichnis abgelegt werden (siehe [http://www.arduino.cc/en/Hacking/Libraries)]).&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version des RGB-Driver Sketches findet sich auf [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ sourceforge].&lt;br /&gt;
&lt;br /&gt;
Dieser muss in Arduino\libraries\panstamp\examples\sketches entpackt und die rbgdriver.ino gestartet werden. In der Arduino IDE sollte unter Tools-&amp;gt;Board &amp;quot;Arduino Pro or Pro Mini (3.3V, 8MHz) w/ Atmega328&amp;quot; eingestellt sein. Wenn man das boards.txt file von [http://code.google.com/p/panstamp/downloads/detail?name=boards.txt&amp;amp;can=2&amp;amp;q= hier] installiert kann man in der IDE auch direkt PanStamp als Plattform auswählen.&lt;br /&gt;
&lt;br /&gt;
Welche Features der sketch bietet lässt sich im config.h file durch ein- oder auskommentieren der #define ENABLE_... Zeilen festlegen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Besonderheiten bei der Nutzung einiger Funktionen&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;- #define ENABLE_DMX&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist darauf zu achten, dass in der DMX-Lib in der Datei DMXSerial.h die Zeile&lt;br /&gt;
* #define DmxModePin 2     // Arduino pin 2 for controlling the data direction&lt;br /&gt;
in &lt;br /&gt;
* #define DmxModePin 7     // Arduino pin 7 for controlling the data direction&lt;br /&gt;
abgeändert werden muss.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;- #define HAS_SENSOR (ermöglicht die Nutzung eines DHT22 Sensors zur Auswerung von Temperatur und Luftfeuchtigkeit)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
USE_SOFT_PWM;&lt;br /&gt;
ENABLE_IR_SEND;&lt;br /&gt;
ENABLE_REPEATER;&lt;br /&gt;
&lt;br /&gt;
sollte hierfür auskommentiert sein.&lt;br /&gt;
&lt;br /&gt;
In der IRremote.cpp Datei in der Irremote Library muss die Zeile&lt;br /&gt;
&lt;br /&gt;
void IRrecv::disableIRIn() &lt;br /&gt;
{&lt;br /&gt;
TIMER_DISABLE_INTR;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sowie die Irremote.h Datei unter Public: um die Zeile &lt;br /&gt;
&lt;br /&gt;
void disableIRIn();&lt;br /&gt;
&lt;br /&gt;
erweitert werden.&lt;br /&gt;
&lt;br /&gt;
Der Daten-Pin des DHT22 Sensors muss hierfür an A2 des Panstamps angeschlossen werden.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.panstamp.com/home panStamp] panStamp Hersteller&lt;br /&gt;
* [http://itse.homeip.net/projekte/12/6/ Projektseite] für das RGB-Multi-Board.&lt;br /&gt;
* [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ rgbdriver sketch] auf sourceforge&lt;br /&gt;
* [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ soilmoisture sketch]  auf sourceforge&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Interfaces]]&lt;br /&gt;
[[Kategorie:Other Components]]&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=PanStamp&amp;diff=6804</id>
		<title>PanStamp</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=PanStamp&amp;diff=6804"/>
		<updated>2014-07-09T19:13:47Z</updated>

		<summary type="html">&lt;p&gt;Fidel: /* Arduino Sketches */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle}}&lt;br /&gt;
{{SEITENTITEL:panStamp}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Hardware&lt;br /&gt;
|Bild=panStamp.jpg&lt;br /&gt;
|Bildbeschreibung=panStamp&lt;br /&gt;
|HWProtocol=SWAP&lt;br /&gt;
|HWType=Sender, Empfänger, Sensor, [[Interface]]&lt;br /&gt;
|HWCategory=&lt;br /&gt;
|HWComm=868MHz (433/915MHz)&lt;br /&gt;
|HWChannels=&lt;br /&gt;
|HWVoltage=3.3V (panStick: 5V USB)&lt;br /&gt;
|HWPowerConsumption=&lt;br /&gt;
|HWPoweredBy=Battery (panStick: USB)&lt;br /&gt;
|HWSize=17.7 x 30.5 mm&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#panStamp 35_panStamp.pm] [http://fhem.de/commandref.html#SWAP 35_SWAP.pm]&lt;br /&gt;
|ModOwner=[http://forum.fhem.de/index.php?action=profile;u=430 Andre / justme1968]&lt;br /&gt;
|HWManufacturer=panStamp&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.panstamp.com/home PanStamps] sind [[Arduino]] Clones, die ein CC1101 Funkmodul beinhalten. Mit ihnen lassen sich Sensoren und Aktoren drahtlos an FHEM anbinden. Sie lassen sich genau wie Arduinos über die Ardunio IDE oder mit dem ino Kommandozeilen Binary programmieren.&lt;br /&gt;
&lt;br /&gt;
Der panStamp Software Stack unterstützt einen stromsparenden Power-Down- oder Sleep-Modus für batteriebetriebene Sensoren, aus dem diese dann nur zur eigentlichen Messung und Übertragung &amp;quot;aufwachen&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Zur Kommunikation in einem panStamp Netzwerk dient das &#039;&#039;Simple Wireless Abstract Protocol&#039;&#039; ([http://code.google.com/p/panstamp/wiki/SWAP SWAP]).&lt;br /&gt;
&lt;br /&gt;
Um einen panStamp in Betrieb zu nehmen muss er unbedingt mit einer Antenne oder einem stück Draht in der [https://code.google.com/p/panstamp/wiki/antennalengths richtigen Länge] bestückt sein. Ohne Antenne funktioniert die Übertragung nicht. Auch nicht auf kurze Distanzen.&lt;br /&gt;
&lt;br /&gt;
== Simple Wireless Abstract Protocol (SWAP) ==&lt;br /&gt;
Die komplette SWAP- Kommunikation ist registerbasiert und erfolgt mit Nachrichten um diese Register abzufragen, zu setzen und deren Inhalt zu senden. Alle Register lassen sich lesen, manche auch beschreiben.&lt;br /&gt;
&lt;br /&gt;
Jeder panStamp stellt elf Systemregister (00-0A) [http://code.google.com/p/panstamp/wiki/SWAPregisters] und beliebig viele sketchabängige Userregister (0B-)bereit. Die Beschreibung der jeweils von einem Sketch bereitgestellten Userregister erfolgt in &#039;&#039;Device Description Files&#039;&#039;, die in .../FHEM/lib/SWAP zu finden sind. Die Identifikation der Art eines panStamp und die Zuordnung zu einem bestimmten Device Description File erfolgt über den productCode der aus &#039;&#039;Hersteller&#039;&#039;- und &#039;&#039;Produkt&#039;&#039;-Id gebildet wird.&lt;br /&gt;
&lt;br /&gt;
In den Systemregistern steht z.&amp;amp;nbsp;B. der productCode, die Deviceadresse und das Übertragungsintervall. Konfigurierbare Register werden im EEPROM gesichert, so dass die Werte auch bei einem Neustart nicht verlorengehen. Beim ersten Starten eines panStamp ist das EEPROM mit FF initialisiert und alle konfigurierbaren Register haben diesen Wert, also z.&amp;amp;nbsp;B. die Adresse FF und das Intervall FFFF (zwischen 18 und 19 Stunden).&lt;br /&gt;
&lt;br /&gt;
Die Systemregister werden in der Device Detailansicht bei den InternalValues im oberen Bereich angezeigt und die User-Register als reading im unteren Bereich.&lt;br /&gt;
&lt;br /&gt;
Jeder panStamp durchläuft beim Start eine definierte Einschaltsequenz und überträgt als erstes seinen productCode. Batteriebetriebene panStamps warten anschließend drei Sekunden auf Konfigurationskommandos. Danach werden bestimmte Systemregister und aktuelle Messwerte gesendet.&lt;br /&gt;
&lt;br /&gt;
== FHEM Integration ==&lt;br /&gt;
Die Integration in FHEM erfolgt über eine reihe von Modulen die im folgenden genauer beschrieben werden.&lt;br /&gt;
=== panStamp ===&lt;br /&gt;
Als Schnittstelle zwischen FHEM und einem panStamp Netzwerk dient entweder ein panStick (USB Stick mit aufgestecktem panStamp) oder ein panStamp Shield mit integriertem panStamp an einem Raspberry PI. Der so angebundene panStamp wird mit einem Modem-Sketch als RF Modem verwenden und über das FHEM Modul panStamp angesprochen. Hierzu ist in FHEM ein entsprechendes Device anzulegen: &amp;lt;pre&amp;gt;define panStick panStamp /dev/ttyUSBx@38400&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dieses panStamp Device versucht dann als erstes alle panStamps im Netz zu finden und per autocreate anzulegen.&lt;br /&gt;
&lt;br /&gt;
=== SWAP ===&lt;br /&gt;
[[Datei:SWAP_ 0000000100000005-detail.png|mini|hochkant=2.5|Readings]]&lt;br /&gt;
Das SWAP Modul ermöglicht die generische Integration beliebiger panStamp Sensoren und Aktoren in FHEM. Mit Hilfe der im jeweiligen Device Description File hinterlegten Beschreibung werden hierzu automatisch userReadings angelegt die neben den reinen Registerwerten in hex auch &#039;menschenlesbare&#039; readings der Sensorwerte erzeugen. Damit dies funktioniert, muss das Attribut ProductCode korrekt gesetzt sein. Das geschieht normalerweise automatisch beim Anlegen des Device.&lt;br /&gt;
&lt;br /&gt;
Hier Beispielhaft anhand eines BMP085 Temperatur- und Luftdrucksensors dargestellt:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;attr temppress userReadings voltage:0B-Voltage {hex(ReadingsVal($name,&amp;quot;0B-Voltage&amp;quot;,&amp;quot;0&amp;quot;))*0.001}, temperature:0C.0-Temperature {hex(ReadingsVal($name,&amp;quot;0C.0-Temperature&amp;quot;,&amp;quot;0&amp;quot;))*0.1-50}, pressure:0C.1-Pressure {hex(ReadingsVal($name,&amp;quot;0C.1-Pressure&amp;quot;,&amp;quot;0&amp;quot;))*0.01}, pressureNN:0C.1-Pressure {sprintf(&amp;quot;%.2f&amp;quot;,hex(ReadingsVal($name,&amp;quot;0C.1-Pressure&amp;quot;,&amp;quot;0&amp;quot;))*0.01 + AttrVal(&amp;quot;global&amp;quot;, &amp;quot;altitude&amp;quot;, 0)/8.5)}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:SWAP_ 0000000100000005.png|mini|hochkant=2.5|Resultat eines stateFormat]]&lt;br /&gt;
Aus diesen readings kann dann mit stateFormat die gewünschte Darstellung für die Raumübersicht erzeugt werden:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;attr temppress stateFormat {sprintf(&amp;quot;%.1f&amp;quot;,ReadingsVal($name,&amp;quot;temperature&amp;quot;,0)).&amp;quot;°C &amp;quot;.sprintf(&amp;quot;%.1f&amp;quot;,ReadingsVal($name,&amp;quot;pressureNN&amp;quot;,0)).&amp;quot;mbar&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sobald ein SWAP Device mit dem productCode korrekt angelegt wurde, können die Userregister bzw. alle Register aufgelistet werden: &lt;br /&gt;
 get &amp;lt;device&amp;gt; regList&lt;br /&gt;
 get &amp;lt;device&amp;gt; regListALL&lt;br /&gt;
&lt;br /&gt;
und einzelne Register abgefragt und gesetzt werden:&lt;br /&gt;
 set &amp;lt;device&amp;gt; regGet &amp;lt;ID&amp;gt;&lt;br /&gt;
 set &amp;lt;device&amp;gt; regSet &amp;lt;ID&amp;gt; &amp;lt;value&amp;gt;&lt;br /&gt;
Für die Systemregister kann hierzu statt der RegisterID auch der Registername (siehe regListAll) verwendet werden.&lt;br /&gt;
&lt;br /&gt;
==== Neue panStamps in Betrieb nehmen ====&lt;br /&gt;
&#039;&#039;&#039;Info: Das SWAP Modul unterstützt autocreate. Bei der Inbetriebnahme ist autocreate zu aktivieren!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Neue panStamps sollten nur Einer nach dem Anderen in Betrieb genommen werden, da sie zuerst mit einer eindeutigen Device-Adresse (ungleich FF und grösser 01) versehen werden müssen. Bei batteriebetriebenen Sensoren sollte auch das Sendeintervall auf einen sinnvollen Wert gesetzt werden:&lt;br /&gt;
 set &amp;lt;device&amp;gt; regSet 09 &amp;lt;device adresse als 2 stellige hex zahl&amp;gt;&lt;br /&gt;
 set &amp;lt;device&amp;gt; regSet 0A &amp;lt;intervall in sekunden als 4 stellige hex zahl&amp;gt;&lt;br /&gt;
Für Devices im Power-Down-Modus werden diese Kommandos in eine Warteschlange gestellt und übertragen, sobald das Device seine Initialisierungssequenz durchläuft. Hierzu ist nach Absetzen der Kommandos Reset zu drücken oder die Stromquelle erneut zu verbinden.&lt;br /&gt;
&lt;br /&gt;
Das SWAP modul versucht, ein Device mit der default Adresse &amp;lt;code&amp;gt;FF&amp;lt;/code&amp;gt; automatisch auf die erste freie Adresse im Bereich &amp;lt;code&amp;gt;F0&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;FE&amp;lt;/code&amp;gt; zu ändern.&lt;br /&gt;
&lt;br /&gt;
Für batteriebetriebene Devices (genauer: Devices die den Power-Down-Modus unterstützen) wird das Default Sendeintervall von &amp;lt;code&amp;gt;FFFF&amp;lt;/code&amp;gt; zu &amp;lt;code&amp;gt;0384&amp;lt;/code&amp;gt; (900 Sekunden) geändert.&lt;br /&gt;
Es gibt mit bestimmten panstamp lib Versionen das Problem das ein wert von FFFF in 0A zum Überlauf führt und dann ununterbrochen gesendet wird. Im fhem Modul wird versucht das abzufangen. Das funktioniert auf manchen langsamen host systemen (z.B. FritzBox) nicht, weil der panstamp so schnell sendet das fhem so mit dem abarbeiten beschäftigt ist das es selber nicht zum senden kommt.&lt;br /&gt;
Zur Abhilfe kann im sketch in setup() ganz am Anfang  ein&lt;br /&gt;
  EEPROM.write(EEPROM_TX_INTERVAL, 0x55);&lt;br /&gt;
  EEPROM.write(EEPROM_TX_INTERVAL+1, 0x55);&lt;br /&gt;
eingefügt werden und noch mal flashen. Wenn der Sketch damit ein mal durchgelaufen ist können diese beiden Zeilen wieder entfernen und der panstamp noch mal geflasht.&lt;br /&gt;
&lt;br /&gt;
Automatisch gesetzte Werte sollten danach manuell auf die jeweilige Installation angepasst werden.&lt;br /&gt;
&lt;br /&gt;
==== Beispiele ====&lt;br /&gt;
===== Bodenfeuchte =====&lt;br /&gt;
Der panStamp soilmoisture Sketch aus dem examples Verzeichnis ist mit dem Standard SWAP Modul kompatibel. &lt;br /&gt;
&lt;br /&gt;
Eine für einen Vegetronix sensor angepasste Version kann von [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ sourceforge] heruntergeladen werden. Das Übertragungsintervall ist wie üblich über das regsiter 0A konfigurierbar. Der Sensor wird and GND, D7 für die Versorgungsspannung und A4 für den Messwert angeschlossen. Erfahrungen haben gezeigt, dass bei einem fünfminütigen Übertragungsintervall nach 12 Monaten Laufzeit die Batteriespannung von 1.55V auf 1.4V abfällt. Das würde bedeuten, dass eine Batterie im Batterieboard mindestens eine Laufzeit von drei Jahren haben sollte.&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;MyBodenfeuchte&amp;gt; stateFormat VWC_A%&lt;br /&gt;
 set &amp;lt;MyBodenfeuchte&amp;gt; userReadings Level0_Voltage {hex(ReadingsVal($name,&amp;quot;0C.0-Moisture_level_0&amp;quot;,&amp;quot;0&amp;quot;))*(3.3/1024)}, &lt;br /&gt;
     VWC_A:0C.0-Moisture_level_0 {sprintf(&amp;quot;%.0f&amp;quot;,(11.6552 * (ReadingsVal($name,&amp;quot;Level0_Voltage&amp;quot;,&amp;quot;0&amp;quot;))**4 + 7.10835 * &lt;br /&gt;
        (ReadingsVal($name,&amp;quot;Level0_Voltage&amp;quot;,&amp;quot;0&amp;quot;))**2 - 0.569557) / ((ReadingsVal($name,&amp;quot;Level0_Voltage&amp;quot;,&amp;quot;0&amp;quot;))**2 + 1))}, &lt;br /&gt;
     voltage:0B-Voltage {hex(ReadingsVal($name,&amp;quot;0B-Voltage&amp;quot;,&amp;quot;0&amp;quot;))*0.001}, &lt;br /&gt;
     battery:0B-Voltage {(ReadingsVal($name,&amp;quot;voltage&amp;quot;,&amp;quot;0&amp;quot;)&amp;lt;1?&amp;quot;low&amp;quot;:&amp;quot;ok&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
[[Datei:SWAP_ soilmositure-plot.jpg|mini|x100px|Bodenfeuchte]]&lt;br /&gt;
&amp;lt;div class=&amp;quot;tright&amp;quot; style=&amp;quot;clear:none&amp;quot;&amp;gt;[[Datei:panstamp_vegetronix1.jpg|mini|ohne|x130px|Vegetronix Bodenfeuchtesensor an Panstamp]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;tright&amp;quot; style=&amp;quot;clear:none&amp;quot;&amp;gt;[[Datei:panstamp_vegetronix2.jpg|mini|ohne|x130px|Vegetronix Bodenfeuchtesensor an Panstamp]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit einem entsprechend erweiterten Sketch lassen sich auch mehrere Sensoren an einem panStamp auslesen.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Bilder zeigen eine Panstamp/Vegetronix Außeneinheit im IP65-Gehäuse. Dieser Aufbau wird ganzjährig den Witterungseinflüssen ausgesetzt. Die auf den Stab aufgesetzte Antenne muss nicht verwendet werden, bei kürzeren Funkstrecken ist eine innenliegende Drahtantenne ausreichend. Bitte in FHEM den RSSI- und LQI-Wert sowie die Gleichmäßigkeit des Empfangens der 5 Minuten Sendeintervalle dementsprechend beobachten.&lt;br /&gt;
&lt;br /&gt;
=== SWAP_XXXXXXXXXXXXXXXX ===&lt;br /&gt;
Besonders bei Aktoren ist oft eine engere FHEM-Integration sinnvoll, um FHEM Konzepte wie on/off/on-for-timer direkt abzubilden und nicht mehr nur auf die Registerebene und regSet und regGet Kommandos beschränkt zu sein.&lt;br /&gt;
&lt;br /&gt;
Um per autocreate automatisch das passende Modul laden zu können, müssen diese Module nach dem Schema SWAP_XXXXXXXXXXXXXXXX.pm benannt sein wobei XXXXXXXXXXXXXXXX für den jeweiligen productCode steht.&lt;br /&gt;
&lt;br /&gt;
==== SWAP_0000002200000003 ====&lt;br /&gt;
[[Datei:SWAP_0000002200000003.png|mini|rechts|hochkant=2.5|RGB LED Driver Board]]&lt;br /&gt;
Ein FHEM Modul für das modifizierte panStamp RGB LED Driver Board. &lt;br /&gt;
&lt;br /&gt;
Das Board unterstützt RGBW LEDs und lässt sich per Infrarot Fernbedienung, DMX Controller (z.&amp;amp;nbsp;B. als Unterputz Touchpanel) und FHEM bedienen.&lt;br /&gt;
&lt;br /&gt;
Der Funktionsumfang wird in diesem [http://forum.fhem.de/index.php/topic,12487.msg81923.html#msg81923 Forenthread] vorgestellt. Die Hardware für das Board wird [http://forum.fhem.de/index.php/topic,13890.0.html  hier] im FHEM Forum vorgestellt und ein Prototyp ist [http://forum.fhem.de/index.php/topic,12487.msg85777.html#msg85777 hier] zu sehen.&lt;br /&gt;
=====Upate 2014-01-11===== &lt;br /&gt;
Zur Zeit ist Version 2 des Boards in Vorbereiteung. Die Projektseite zur Hardware findet sich [http://itse.homeip.net/projekte/12/6/ hier]. &lt;br /&gt;
&lt;br /&gt;
Demnächst wird eine aktualisiert Version des Fhem Moduls und panStamp Sketches eingecheckt. Eine Übersicht über die dann vorhandene Funktionalität:&lt;br /&gt;
&lt;br /&gt;
was geht:&lt;br /&gt;
* bis zu vier led kanäle (je nach kombination von ir und soft pwm)&lt;br /&gt;
* ir senden&lt;br /&gt;
* ir empfangen&lt;br /&gt;
* messen ob die led versorgung an ist&lt;br /&gt;
* helligkeit eines an A2 angeschlossenen helligkeits sensors&lt;br /&gt;
* konfiguration der dmx basis adresse über das swap register 0x12&lt;br /&gt;
* optional soft on auf letzten wert&lt;br /&gt;
* alles was auch vorher schon ging: dimmen, faden, ir fernbedienungen anlernen, ...&lt;br /&gt;
&lt;br /&gt;
wichtig zu wissen:&lt;br /&gt;
* wenn ir aktiv ist und kein soft pwm lässt sich der 4. kanal nur ein und aus schalten&lt;br /&gt;
* wenn ir aktiv ist muss soft pwm aktiv sein um den 4. kanäle auch zu dimmen&lt;br /&gt;
* es wird nur ein zusätzlicher kanal tatsächlich schon unterstützt. der fünfte kommt noch&lt;br /&gt;
* bei ir senden sind nur die aufrufe für sony und nec tatsächlich eingebaut. die anderen sind aber einfach zu ergänzen&lt;br /&gt;
* beim ir senden sind noch keine Wiederholungen eingebaut. die müssen laut protokoll aber eigentlich sein&lt;br /&gt;
&lt;br /&gt;
was noch kommt:&lt;br /&gt;
* besseres soft pwm&lt;br /&gt;
* mehr konfiguration bezüglich default verhalten. ramp zeiten, delays, ...&lt;br /&gt;
* hsv farb modell um besser zu faden und vor allem um den weiss anteil automatisch auf die weiss leds zu legen&lt;br /&gt;
* die virtuellen channel &lt;br /&gt;
* fhem kompatibles ir senden&lt;br /&gt;
* sofortiges senden von helligkeit und led spannung bei änderung&lt;br /&gt;
* andere ir lib mit sehr viel besserer geräte unterstützung&lt;br /&gt;
&lt;br /&gt;
wie gehabt muss alles über config.h konfiguriert werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== weitrere Screenshots =====&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:SWAP_0000002200000003-internal.png|InternalValues&lt;br /&gt;
File:SWAP_0000002200000003-readings.png|Readings&lt;br /&gt;
File:SWAP_0000002200000003-attributes.png|Attributes&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Arduino Sketches ==&lt;br /&gt;
Zum Flashen der Panstamps wird die Arduino IDE benötigt. Eine Installationsanleitung ist unter folgendem Link zu finden:&lt;br /&gt;
:https://code.google.com/p/panstamp/wiki/firststeps&lt;br /&gt;
&lt;br /&gt;
Für den RGB-Driver sketch sind je nach gewünschtem Funktionsumfang noch folgende libs zu installieren:&lt;br /&gt;
&lt;br /&gt;
* IR lib - https://github.com/shirriff/Arduino-IRremote&lt;br /&gt;
* DMX lib- http://www.mathertel.de/Arduino/DMXSerial.aspx&lt;br /&gt;
&lt;br /&gt;
Die Librarys sollten entweder mit dem entsprechenden Menüpunkt in die IDE integriert werden oder jeweils nach auspacken des zip files als als kompletten Ordner im Arduino libraries verzeichnis abgelegt werden (siehe [http://www.arduino.cc/en/Hacking/Libraries)]).&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version des RGB-Driver Sketches findet sich auf [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ sourceforge].&lt;br /&gt;
&lt;br /&gt;
Dieser muss in Arduino\libraries\panstamp\examples\sketches entpackt und die rbgdriver.ino gestartet werden. In der Arduino IDE sollte unter Tools-&amp;gt;Board &amp;quot;Arduino Pro or Pro Mini (3.3V, 8MHz) w/ Atmega328&amp;quot; eingestellt sein. Wenn man das boards.txt file von [http://code.google.com/p/panstamp/downloads/detail?name=boards.txt&amp;amp;can=2&amp;amp;q= hier] installiert kann man in der IDE auch direkt PanStamp als Plattform auswählen.&lt;br /&gt;
&lt;br /&gt;
Welche Features der sketch bietet lässt sich im config.h file durch ein- oder auskommentieren der #define ENABLE_... Zeilen festlegen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Besonderheiten bei der Nutzung einiger Funktionen&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;- #define ENABLE_DMX&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist darauf zu achten, dass in der DMX-Lib in der Datei DMXSerial.h die Zeile&lt;br /&gt;
* #define DmxModePin 2     // Arduino pin 2 for controlling the data direction&lt;br /&gt;
in &lt;br /&gt;
* #define DmxModePin 7     // Arduino pin 7 for controlling the data direction&lt;br /&gt;
abgeändert werden muss.&lt;br /&gt;
&lt;br /&gt;
#define HAS_SENSOR (ermöglicht die Nutzung eines DHT22 Sensors zur Auswerung von Temperatur und Luftfeuchtigkeit)&lt;br /&gt;
&lt;br /&gt;
USE_SOFT_PWM&lt;br /&gt;
ENABLE_IR_SEND&lt;br /&gt;
ENABLE_REPEATER&lt;br /&gt;
&lt;br /&gt;
Sollte hierfür auskommentiert sein.&lt;br /&gt;
&lt;br /&gt;
In der IRremote.cpp Datei in der Irremote Library muss die Zeile&lt;br /&gt;
&lt;br /&gt;
void IRrecv::disableIRIn() &lt;br /&gt;
{&lt;br /&gt;
TIMER_DISABLE_INTR;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sowie die Irremote.h Datei unter Public: um die Zeile &lt;br /&gt;
&lt;br /&gt;
void disableIRIn();&lt;br /&gt;
&lt;br /&gt;
erweitert werden.&lt;br /&gt;
&lt;br /&gt;
Der Daten-Pin des DHT22 Sensors muss hierfür an A2 des Panstamps angeschlossen werden.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.panstamp.com/home panStamp] panStamp Hersteller&lt;br /&gt;
* [http://itse.homeip.net/projekte/12/6/ Projektseite] für das RGB-Multi-Board.&lt;br /&gt;
* [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ rgbdriver sketch] auf sourceforge&lt;br /&gt;
* [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ soilmoisture sketch]  auf sourceforge&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Interfaces]]&lt;br /&gt;
[[Kategorie:Other Components]]&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=PanStamp&amp;diff=6666</id>
		<title>PanStamp</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=PanStamp&amp;diff=6666"/>
		<updated>2014-06-27T09:31:59Z</updated>

		<summary type="html">&lt;p&gt;Fidel: /* Arduino Sketches */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle}}&lt;br /&gt;
{{SEITENTITEL:panStamp}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Hardware&lt;br /&gt;
|Bild=panStamp.jpg&lt;br /&gt;
|Bildbeschreibung=panStamp&lt;br /&gt;
|HWProtocol=SWAP&lt;br /&gt;
|HWType=Sender, Empfänger, Sensor, [[Interface]]&lt;br /&gt;
|HWCategory=&lt;br /&gt;
|HWComm=868MHz (433/915MHz)&lt;br /&gt;
|HWChannels=&lt;br /&gt;
|HWVoltage=3.3V (panStick: 5V USB)&lt;br /&gt;
|HWPowerConsumption=&lt;br /&gt;
|HWPoweredBy=Battery (panStick: USB)&lt;br /&gt;
|HWSize=17.7 x 30.5 mm&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#panStamp 35_panStamp.pm] [http://fhem.de/commandref.html#SWAP 35_SWAP.pm]&lt;br /&gt;
|ModOwner=[http://forum.fhem.de/index.php?action=profile;u=430 Andre / justme1968]&lt;br /&gt;
|HWManufacturer=panStamp&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.panstamp.com/home PanStamps] sind [[Arduino]] Clones, die ein CC1101 Funkmodul beinhalten. Mit ihnen lassen sich Sensoren und Aktoren drahtlos an FHEM anbinden. Sie lassen sich genau wie Arduinos über die Ardunio IDE oder mit dem ino Kommandozeilen Binary programmieren.&lt;br /&gt;
&lt;br /&gt;
Der panStamp Software Stack unterstützt einen stromsparenden Power-Down- oder Sleep-Modus für batteriebetriebene Sensoren, aus dem diese dann nur zur eigentlichen Messung und Übertragung &amp;quot;aufwachen&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Zur Kommunikation in einem panStamp Netzwerk dient das &#039;&#039;Simple Wireless Abstract Protocol&#039;&#039; ([http://code.google.com/p/panstamp/wiki/SWAP SWAP]).&lt;br /&gt;
&lt;br /&gt;
Um einen panStamp in Betrieb zu nehmen muss er unbedingt mit einer Antenne oder einem stück Draht in der [https://code.google.com/p/panstamp/wiki/antennalengths richtigen Länge] bestückt sein. Ohne Antenne funktioniert die Übertragung nicht. Auch nicht auf kurze Distanzen.&lt;br /&gt;
&lt;br /&gt;
== Simple Wireless Abstract Protocol (SWAP) ==&lt;br /&gt;
Die komplette SWAP- Kommunikation ist registerbasiert und erfolgt mit Nachrichten um diese Register abzufragen, zu setzen und deren Inhalt zu senden. Alle Register lassen sich lesen, manche auch beschreiben.&lt;br /&gt;
&lt;br /&gt;
Jeder panStamp stellt elf Systemregister (00-0A) [http://code.google.com/p/panstamp/wiki/SWAPregisters] und beliebig viele sketchabängige Userregister (0B-)bereit. Die Beschreibung der jeweils von einem Sketch bereitgestellten Userregister erfolgt in &#039;&#039;Device Description Files&#039;&#039;, die in .../FHEM/lib/SWAP zu finden sind. Die Identifikation der Art eines panStamp und die Zuordnung zu einem bestimmten Device Description File erfolgt über den productCode der aus &#039;&#039;Hersteller&#039;&#039;- und &#039;&#039;Produkt&#039;&#039;-Id gebildet wird.&lt;br /&gt;
&lt;br /&gt;
In den Systemregistern steht z.&amp;amp;nbsp;B. der productCode, die Deviceadresse und das Übertragungsintervall. Konfigurierbare Register werden im EEPROM gesichert, so dass die Werte auch bei einem Neustart nicht verlorengehen. Beim ersten Starten eines panStamp ist das EEPROM mit FF initialisiert und alle konfigurierbaren Register haben diesen Wert, also z.&amp;amp;nbsp;B. die Adresse FF und das Intervall FFFF (zwischen 18 und 19 Stunden).&lt;br /&gt;
&lt;br /&gt;
Die Systemregister werden in der Device Detailansicht bei den InternalValues im oberen Bereich angezeigt und die User-Register als reading im unteren Bereich.&lt;br /&gt;
&lt;br /&gt;
Jeder panStamp durchläuft beim Start eine definierte Einschaltsequenz und überträgt als erstes seinen productCode. Batteriebetriebene panStamps warten anschließend drei Sekunden auf Konfigurationskommandos. Danach werden bestimmte Systemregister und aktuelle Messwerte gesendet.&lt;br /&gt;
&lt;br /&gt;
== FHEM Integration ==&lt;br /&gt;
Die Integration in FHEM erfolgt über eine reihe von Modulen die im folgenden genauer beschrieben werden.&lt;br /&gt;
=== panStamp ===&lt;br /&gt;
Als Schnittstelle zwischen FHEM und einem panStamp Netzwerk dient entweder ein panStick (USB Stick mit aufgestecktem panStamp) oder ein panStamp Shield mit integriertem panStamp an einem Raspberry PI. Der so angebundene panStamp wird mit einem Modem-Sketch als RF Modem verwenden und über das FHEM Modul panStamp angesprochen. Hierzu ist in FHEM ein entsprechendes Device anzulegen: &amp;lt;pre&amp;gt;define panStick panStamp /dev/ttyUSBx@38400&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dieses panStamp Device versucht dann als erstes alle panStamps im Netz zu finden und per autocreate anzulegen.&lt;br /&gt;
&lt;br /&gt;
=== SWAP ===&lt;br /&gt;
[[Datei:SWAP_ 0000000100000005-detail.png|mini|hochkant=2.5|Readings]]&lt;br /&gt;
Das SWAP Modul ermöglicht die generische Integration beliebiger panStamp Sensoren und Aktoren in FHEM. Mit Hilfe der im jeweiligen Device Description File hinterlegten Beschreibung werden hierzu automatisch userReadings angelegt die neben den reinen Registerwerten in hex auch &#039;menschenlesbare&#039; readings der Sensorwerte erzeugen. Damit dies funktioniert, muss das Attribut ProductCode korrekt gesetzt sein. Das geschieht normalerweise automatisch beim Anlegen des Device.&lt;br /&gt;
&lt;br /&gt;
Hier Beispielhaft anhand eines BMP085 Temperatur- und Luftdrucksensors dargestellt:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;attr temppress userReadings voltage:0B-Voltage {hex(ReadingsVal($name,&amp;quot;0B-Voltage&amp;quot;,&amp;quot;0&amp;quot;))*0.001}, temperature:0C.0-Temperature {hex(ReadingsVal($name,&amp;quot;0C.0-Temperature&amp;quot;,&amp;quot;0&amp;quot;))*0.1-50}, pressure:0C.1-Pressure {hex(ReadingsVal($name,&amp;quot;0C.1-Pressure&amp;quot;,&amp;quot;0&amp;quot;))*0.01}, pressureNN:0C.1-Pressure {sprintf(&amp;quot;%.2f&amp;quot;,hex(ReadingsVal($name,&amp;quot;0C.1-Pressure&amp;quot;,&amp;quot;0&amp;quot;))*0.01 + AttrVal(&amp;quot;global&amp;quot;, &amp;quot;altitude&amp;quot;, 0)/8.5)}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:SWAP_ 0000000100000005.png|mini|hochkant=2.5|Resultat eines stateFormat]]&lt;br /&gt;
Aus diesen readings kann dann mit stateFormat die gewünschte Darstellung für die Raumübersicht erzeugt werden:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;attr temppress stateFormat {sprintf(&amp;quot;%.1f&amp;quot;,ReadingsVal($name,&amp;quot;temperature&amp;quot;,0)).&amp;quot;°C &amp;quot;.sprintf(&amp;quot;%.1f&amp;quot;,ReadingsVal($name,&amp;quot;pressureNN&amp;quot;,0)).&amp;quot;mbar&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sobald ein SWAP Device mit dem productCode korrekt angelegt wurde, können die Userregister bzw. alle Register aufgelistet werden: &lt;br /&gt;
 get &amp;lt;device&amp;gt; regList&lt;br /&gt;
 get &amp;lt;device&amp;gt; regListALL&lt;br /&gt;
&lt;br /&gt;
und einzelne Register abgefragt und gesetzt werden:&lt;br /&gt;
 set &amp;lt;device&amp;gt; regGet &amp;lt;ID&amp;gt;&lt;br /&gt;
 set &amp;lt;device&amp;gt; regSet &amp;lt;ID&amp;gt; &amp;lt;value&amp;gt;&lt;br /&gt;
Für die Systemregister kann hierzu statt der RegisterID auch der Registername (siehe regListAll) verwendet werden.&lt;br /&gt;
&lt;br /&gt;
==== Neue panStamps in Betrieb nehmen ====&lt;br /&gt;
&#039;&#039;&#039;Info: Das SWAP Modul unterstützt autocreate. Bei der Inbetriebnahme ist autocreate zu aktivieren!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Neue panStamps sollten nur Einer nach dem Anderen in Betrieb genommen werden, da sie zuerst mit einer eindeutigen Device-Adresse (ungleich FF und grösser 01) versehen werden müssen. Bei batteriebetriebenen Sensoren sollte auch das Sendeintervall auf einen sinnvollen Wert gesetzt werden:&lt;br /&gt;
 set &amp;lt;device&amp;gt; regSet 09 &amp;lt;device adresse als 2 stellige hex zahl&amp;gt;&lt;br /&gt;
 set &amp;lt;device&amp;gt; regSet 0A &amp;lt;intervall in sekunden als 4 stellige hex zahl&amp;gt;&lt;br /&gt;
Für Devices im Power-Down-Modus werden diese Kommandos in eine Warteschlange gestellt und übertragen, sobald das Device seine Initialisierungssequenz durchläuft. Hierzu ist nach Absetzen der Kommandos Reset zu drücken oder die Stromquelle erneut zu verbinden.&lt;br /&gt;
&lt;br /&gt;
Das SWAP modul versucht, ein Device mit der default Adresse &amp;lt;code&amp;gt;FF&amp;lt;/code&amp;gt; automatisch auf die erste freie Adresse im Bereich &amp;lt;code&amp;gt;F0&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;FE&amp;lt;/code&amp;gt; zu ändern.&lt;br /&gt;
&lt;br /&gt;
Für batteriebetriebene Devices (genauer: Devices die den Power-Down-Modus unterstützen) wird das Default Sendeintervall von &amp;lt;code&amp;gt;FFFF&amp;lt;/code&amp;gt; zu &amp;lt;code&amp;gt;0384&amp;lt;/code&amp;gt; (900 Sekunden) geändert.&lt;br /&gt;
Es gibt mit bestimmten panstamp lib Versionen das Problem das ein wert von FFFF in 0A zum Überlauf führt und dann ununterbrochen gesendet wird. Im fhem Modul wird versucht das abzufangen. Das funktioniert auf manchen langsamen host systemen (z.B. FritzBox) nicht, weil der panstamp so schnell sendet das fhem so mit dem abarbeiten beschäftigt ist das es selber nicht zum senden kommt.&lt;br /&gt;
Zur Abhilfe kann im sketch in setup() ganz am Anfang  ein&lt;br /&gt;
  EEPROM.write(EEPROM_TX_INTERVAL, 0x55);&lt;br /&gt;
  EEPROM.write(EEPROM_TX_INTERVAL+1, 0x55);&lt;br /&gt;
eingefügt werden und noch mal flashen. Wenn der Sketch damit ein mal durchgelaufen ist können diese beiden Zeilen wieder entfernen und der panstamp noch mal geflasht.&lt;br /&gt;
&lt;br /&gt;
Automatisch gesetzte Werte sollten danach manuell auf die jeweilige Installation angepasst werden.&lt;br /&gt;
&lt;br /&gt;
==== Beispiele ====&lt;br /&gt;
===== Bodenfeuchte =====&lt;br /&gt;
Der panStamp soilmoisture Sketch aus dem examples Verzeichnis ist mit dem Standard SWAP Modul kompatibel. &lt;br /&gt;
&lt;br /&gt;
Eine für einen Vegetronix sensor angepasste Version kann von [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ sourceforge] heruntergeladen werden. Das Übertragungsintervall ist wie üblich über das regsiter 0A konfigurierbar. Der Sensor wird and GND, D7 für die Versorgungsspannung und A4 für den Messwert angeschlossen. Erfahrungen haben gezeigt, dass bei einem fünfminütigen Übertragungsintervall nach 12 Monaten Laufzeit die Batteriespannung von 1.55V auf 1.4V abfällt. Das würde bedeuten, dass eine Batterie im Batterieboard mindestens eine Laufzeit von drei Jahren haben sollte.&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;MyBodenfeuchte&amp;gt; stateFormat VWC_A%&lt;br /&gt;
 set &amp;lt;MyBodenfeuchte&amp;gt; userReadings Level0_Voltage {hex(ReadingsVal($name,&amp;quot;0C.0-Moisture_level_0&amp;quot;,&amp;quot;0&amp;quot;))*(3.3/1024)}, &lt;br /&gt;
     VWC_A:0C.0-Moisture_level_0 {sprintf(&amp;quot;%.0f&amp;quot;,(11.6552 * (ReadingsVal($name,&amp;quot;Level0_Voltage&amp;quot;,&amp;quot;0&amp;quot;))**4 + 7.10835 * &lt;br /&gt;
        (ReadingsVal($name,&amp;quot;Level0_Voltage&amp;quot;,&amp;quot;0&amp;quot;))**2 - 0.569557) / ((ReadingsVal($name,&amp;quot;Level0_Voltage&amp;quot;,&amp;quot;0&amp;quot;))**2 + 1))}, &lt;br /&gt;
     voltage:0B-Voltage {hex(ReadingsVal($name,&amp;quot;0B-Voltage&amp;quot;,&amp;quot;0&amp;quot;))*0.001}, &lt;br /&gt;
     battery:0B-Voltage {(ReadingsVal($name,&amp;quot;voltage&amp;quot;,&amp;quot;0&amp;quot;)&amp;lt;1?&amp;quot;low&amp;quot;:&amp;quot;ok&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
[[Datei:SWAP_ soilmositure-plot.jpg|mini|x100px|Bodenfeuchte]]&lt;br /&gt;
&amp;lt;div class=&amp;quot;tright&amp;quot; style=&amp;quot;clear:none&amp;quot;&amp;gt;[[Datei:panstamp_vegetronix1.jpg|mini|ohne|x130px|Vegetronix Bodenfeuchtesensor an Panstamp]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;tright&amp;quot; style=&amp;quot;clear:none&amp;quot;&amp;gt;[[Datei:panstamp_vegetronix2.jpg|mini|ohne|x130px|Vegetronix Bodenfeuchtesensor an Panstamp]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit einem entsprechend erweiterten Sketch lassen sich auch mehrere Sensoren an einem panStamp auslesen.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Bilder zeigen eine Panstamp/Vegetronix Außeneinheit im IP65-Gehäuse. Dieser Aufbau wird ganzjährig den Witterungseinflüssen ausgesetzt. Die auf den Stab aufgesetzte Antenne muss nicht verwendet werden, bei kürzeren Funkstrecken ist eine innenliegende Drahtantenne ausreichend. Bitte in FHEM den RSSI- und LQI-Wert sowie die Gleichmäßigkeit des Empfangens der 5 Minuten Sendeintervalle dementsprechend beobachten.&lt;br /&gt;
&lt;br /&gt;
=== SWAP_XXXXXXXXXXXXXXXX ===&lt;br /&gt;
Besonders bei Aktoren ist oft eine engere FHEM-Integration sinnvoll, um FHEM Konzepte wie on/off/on-for-timer direkt abzubilden und nicht mehr nur auf die Registerebene und regSet und regGet Kommandos beschränkt zu sein.&lt;br /&gt;
&lt;br /&gt;
Um per autocreate automatisch das passende Modul laden zu können, müssen diese Module nach dem Schema SWAP_XXXXXXXXXXXXXXXX.pm benannt sein wobei XXXXXXXXXXXXXXXX für den jeweiligen productCode steht.&lt;br /&gt;
&lt;br /&gt;
==== SWAP_0000002200000003 ====&lt;br /&gt;
[[Datei:SWAP_0000002200000003.png|mini|rechts|hochkant=2.5|RGB LED Driver Board]]&lt;br /&gt;
Ein FHEM Modul für das modifizierte panStamp RGB LED Driver Board. &lt;br /&gt;
&lt;br /&gt;
Das Board unterstützt RGBW LEDs und lässt sich per Infrarot Fernbedienung, DMX Controller (z.&amp;amp;nbsp;B. als Unterputz Touchpanel) und FHEM bedienen.&lt;br /&gt;
&lt;br /&gt;
Der Funktionsumfang wird in diesem [http://forum.fhem.de/index.php/topic,12487.msg81923.html#msg81923 Forenthread] vorgestellt. Die Hardware für das Board wird [http://forum.fhem.de/index.php/topic,13890.0.html  hier] im FHEM Forum vorgestellt und ein Prototyp ist [http://forum.fhem.de/index.php/topic,12487.msg85777.html#msg85777 hier] zu sehen.&lt;br /&gt;
=====Upate 2014-01-11===== &lt;br /&gt;
Zur Zeit ist Version 2 des Boards in Vorbereiteung. Die Projektseite zur Hardware findet sich [http://itse.homeip.net/projekte/12/6/ hier]. &lt;br /&gt;
&lt;br /&gt;
Demnächst wird eine aktualisiert Version des Fhem Moduls und panStamp Sketches eingecheckt. Eine Übersicht über die dann vorhandene Funktionalität:&lt;br /&gt;
&lt;br /&gt;
was geht:&lt;br /&gt;
* bis zu vier led kanäle (je nach kombination von ir und soft pwm)&lt;br /&gt;
* ir senden&lt;br /&gt;
* ir empfangen&lt;br /&gt;
* messen ob die led versorgung an ist&lt;br /&gt;
* helligkeit eines an A2 angeschlossenen helligkeits sensors&lt;br /&gt;
* konfiguration der dmx basis adresse über das swap register 0x12&lt;br /&gt;
* optional soft on auf letzten wert&lt;br /&gt;
* alles was auch vorher schon ging: dimmen, faden, ir fernbedienungen anlernen, ...&lt;br /&gt;
&lt;br /&gt;
wichtig zu wissen:&lt;br /&gt;
* wenn ir aktiv ist und kein soft pwm lässt sich der 4. kanal nur ein und aus schalten&lt;br /&gt;
* wenn ir aktiv ist muss soft pwm aktiv sein um den 4. kanäle auch zu dimmen&lt;br /&gt;
* es wird nur ein zusätzlicher kanal tatsächlich schon unterstützt. der fünfte kommt noch&lt;br /&gt;
* bei ir senden sind nur die aufrufe für sony und nec tatsächlich eingebaut. die anderen sind aber einfach zu ergänzen&lt;br /&gt;
* beim ir senden sind noch keine Wiederholungen eingebaut. die müssen laut protokoll aber eigentlich sein&lt;br /&gt;
&lt;br /&gt;
was noch kommt:&lt;br /&gt;
* besseres soft pwm&lt;br /&gt;
* mehr konfiguration bezüglich default verhalten. ramp zeiten, delays, ...&lt;br /&gt;
* hsv farb modell um besser zu faden und vor allem um den weiss anteil automatisch auf die weiss leds zu legen&lt;br /&gt;
* die virtuellen channel &lt;br /&gt;
* fhem kompatibles ir senden&lt;br /&gt;
* sofortiges senden von helligkeit und led spannung bei änderung&lt;br /&gt;
* andere ir lib mit sehr viel besserer geräte unterstützung&lt;br /&gt;
&lt;br /&gt;
wie gehabt muss alles über config.h konfiguriert werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== weitrere Screenshots =====&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:SWAP_0000002200000003-internal.png|InternalValues&lt;br /&gt;
File:SWAP_0000002200000003-readings.png|Readings&lt;br /&gt;
File:SWAP_0000002200000003-attributes.png|Attributes&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Arduino Sketches ==&lt;br /&gt;
Zum Flashen der Panstamps wird die Arduino IDE benötigt. Eine Installationsanleitung ist unter folgendem Link zu finden:&lt;br /&gt;
:https://code.google.com/p/panstamp/wiki/firststeps&lt;br /&gt;
&lt;br /&gt;
Für den RGB-Driver sketch sind je nach gewünschtem Funktionsumfang noch folgende libs zu installieren:&lt;br /&gt;
&lt;br /&gt;
* IR lib - https://github.com/shirriff/Arduino-IRremote&lt;br /&gt;
* DMX lib- http://www.mathertel.de/Arduino/DMXSerial.aspx&lt;br /&gt;
&lt;br /&gt;
Die Librarys sollten entweder mit dem entsprechenden Menüpunkt in die IDE integriert werden oder jeweils nach auspacken des zip files als als kompletten Ordner im Arduino libraries verzeichnis abgelegt werden (siehe [http://www.arduino.cc/en/Hacking/Libraries)]).&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version des RGB-Driver Sketches findet sich auf [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ sourceforge].&lt;br /&gt;
&lt;br /&gt;
Dieser muss in Arduino\libraries\panstamp\examples\sketches entpackt und die rbgdriver.ino gestartet werden. In der Arduino IDE sollte unter Tools-&amp;gt;Board &amp;quot;Arduino Pro or Pro Mini (3.3V, 8MHz) w/ Atmega328&amp;quot; eingestellt sein. Wenn man das boards.txt file von [http://code.google.com/p/panstamp/downloads/detail?name=boards.txt&amp;amp;can=2&amp;amp;q= hier] installiert kann man in der IDE auch direkt PanStamp als Plattform auswählen.&lt;br /&gt;
&lt;br /&gt;
Welche Features der sketch bietet lässt sich im config.h file durch ein- oder auskommentieren der #define ENABLE_... Zeilen festlegen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Besonderheiten bei der Nutzung einiger Funktionen&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;- #define ENABLE_DMX&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist darauf zu achten, dass in der DMX-Lib in der Datei DMXSerial.h die Zeile&lt;br /&gt;
* #define DmxModePin 2     // Arduino pin 2 for controlling the data direction&lt;br /&gt;
in &lt;br /&gt;
* #define DmxModePin 7     // Arduino pin 7 for controlling the data direction&lt;br /&gt;
abgeändert werden muss.&lt;br /&gt;
&lt;br /&gt;
#define HAS_SENSOR (ermöglicht die Nutzung eines DHT22 Sensors zur Auswerung von Temperatur und Luftfeuchtigkeit)&lt;br /&gt;
&lt;br /&gt;
Hierzu muss&lt;br /&gt;
&lt;br /&gt;
USE_SOFT_PWM muss auskommentiert sein.&lt;br /&gt;
&lt;br /&gt;
In der IRremote.cpp Datei in der Irremote Library muss die Zeile&lt;br /&gt;
&lt;br /&gt;
void IRrecv::disableIRIn() &lt;br /&gt;
{&lt;br /&gt;
TIMER_DISABLE_INTR;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sowie die Irremote.h Datei unter Public: um die Zeile &lt;br /&gt;
&lt;br /&gt;
void disableIRIn();&lt;br /&gt;
&lt;br /&gt;
erweitert werden.&lt;br /&gt;
&lt;br /&gt;
Der Daten-Pin des DHT22 Sensors muss hierfür an A2 des Panstamps angeschlossen werden.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.panstamp.com/home panStamp] panStamp Hersteller&lt;br /&gt;
* [http://itse.homeip.net/projekte/12/6/ Projektseite] für das RGB-Multi-Board.&lt;br /&gt;
* [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ rgbdriver sketch] auf sourceforge&lt;br /&gt;
* [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ soilmoisture sketch]  auf sourceforge&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Interfaces]]&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=PanStamp&amp;diff=6581</id>
		<title>PanStamp</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=PanStamp&amp;diff=6581"/>
		<updated>2014-06-18T23:08:38Z</updated>

		<summary type="html">&lt;p&gt;Fidel: /* Arduino Sketches */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle}}&lt;br /&gt;
{{SEITENTITEL:panStamp}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Hardware&lt;br /&gt;
|Bild=panStamp.jpg&lt;br /&gt;
|Bildbeschreibung=panStamp&lt;br /&gt;
|HWProtocol=SWAP&lt;br /&gt;
|HWType=Sender, Empfänger, Sensor, [[Interface]]&lt;br /&gt;
|HWCategory=&lt;br /&gt;
|HWComm=868MHz (433/915MHz)&lt;br /&gt;
|HWChannels=&lt;br /&gt;
|HWVoltage=3.3V (panStick: 5V USB)&lt;br /&gt;
|HWPowerConsumption=&lt;br /&gt;
|HWPoweredBy=Battery (panStick: USB)&lt;br /&gt;
|HWSize=17.7 x 30.5 mm&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#panStamp 35_panStamp.pm] [http://fhem.de/commandref.html#SWAP 35_SWAP.pm]&lt;br /&gt;
|ModOwner=[http://forum.fhem.de/index.php?action=profile;u=430 Andre / justme1968]&lt;br /&gt;
|HWManufacturer=panStamp&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.panstamp.com/home PanStamps] sind [[Arduino]] Clones, die ein CC1101 Funkmodul beinhalten. Mit ihnen lassen sich Sensoren und Aktoren drahtlos an FHEM anbinden. Sie lassen sich genau wie Arduinos über die Ardunio IDE oder mit dem ino Kommandozeilen Binary programmieren.&lt;br /&gt;
&lt;br /&gt;
Der panStamp Software Stack unterstützt einen stromsparenden Power-Down- oder Sleep-Modus für batteriebetriebene Sensoren, aus dem diese dann nur zur eigentlichen Messung und Übertragung &amp;quot;aufwachen&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Zur Kommunikation in einem panStamp Netzwerk dient das &#039;&#039;Simple Wireless Abstract Protocol&#039;&#039; ([http://code.google.com/p/panstamp/wiki/SWAP SWAP]).&lt;br /&gt;
&lt;br /&gt;
Um einen panStamp in Betrieb zu nehmen muss er unbedingt mit einer Antenne oder einem stück Draht in der [https://code.google.com/p/panstamp/wiki/antennalengths richtigen Länge] bestückt sein. Ohne Antenne funktioniert die Übertragung nicht. Auch nicht auf kurze Distanzen.&lt;br /&gt;
&lt;br /&gt;
== Simple Wireless Abstract Protocol (SWAP) ==&lt;br /&gt;
Die komplette SWAP- Kommunikation ist registerbasiert und erfolgt mit Nachrichten um diese Register abzufragen, zu setzen und deren Inhalt zu senden. Alle Register lassen sich lesen, manche auch beschreiben.&lt;br /&gt;
&lt;br /&gt;
Jeder panStamp stellt elf Systemregister (00-0A) [http://code.google.com/p/panstamp/wiki/SWAPregisters] und beliebig viele sketchabängige Userregister (0B-)bereit. Die Beschreibung der jeweils von einem Sketch bereitgestellten Userregister erfolgt in &#039;&#039;Device Description Files&#039;&#039;, die in .../FHEM/lib/SWAP zu finden sind. Die Identifikation der Art eines panStamp und die Zuordnung zu einem bestimmten Device Description File erfolgt über den productCode der aus &#039;&#039;Hersteller&#039;&#039;- und &#039;&#039;Produkt&#039;&#039;-Id gebildet wird.&lt;br /&gt;
&lt;br /&gt;
In den Systemregistern steht z.&amp;amp;nbsp;B. der productCode, die Deviceadresse und das Übertragungsintervall. Konfigurierbare Register werden im EEPROM gesichert, so dass die Werte auch bei einem Neustart nicht verlorengehen. Beim ersten Starten eines panStamp ist das EEPROM mit FF initialisiert und alle konfigurierbaren Register haben diesen Wert, also z.&amp;amp;nbsp;B. die Adresse FF und das Intervall FFFF (zwischen 18 und 19 Stunden).&lt;br /&gt;
&lt;br /&gt;
Die Systemregister werden in der Device Detailansicht bei den InternalValues im oberen Bereich angezeigt und die User-Register als reading im unteren Bereich.&lt;br /&gt;
&lt;br /&gt;
Jeder panStamp durchläuft beim Start eine definierte Einschaltsequenz und überträgt als erstes seinen productCode. Batteriebetriebene panStamps warten anschließend drei Sekunden auf Konfigurationskommandos. Danach werden bestimmte Systemregister und aktuelle Messwerte gesendet.&lt;br /&gt;
&lt;br /&gt;
== FHEM Integration ==&lt;br /&gt;
Die Integration in FHEM erfolgt über eine reihe von Modulen die im folgenden genauer beschrieben werden.&lt;br /&gt;
=== panStamp ===&lt;br /&gt;
Als Schnittstelle zwischen FHEM und einem panStamp Netzwerk dient entweder ein panStick (USB Stick mit aufgestecktem panStamp) oder ein panStamp Shield mit integriertem panStamp an einem Raspberry PI. Der so angebundene panStamp wird mit einem Modem-Sketch als RF Modem verwenden und über das FHEM Modul panStamp angesprochen. Hierzu ist in FHEM ein entsprechendes Device anzulegen: &amp;lt;pre&amp;gt;define panStick panStamp /dev/ttyUSBx@38400&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dieses panStamp Device versucht dann als erstes alle panStamps im Netz zu finden und per autocreate anzulegen.&lt;br /&gt;
&lt;br /&gt;
=== SWAP ===&lt;br /&gt;
[[Datei:SWAP_ 0000000100000005-detail.png|mini|hochkant=2.5|Readings]]&lt;br /&gt;
Das SWAP Modul ermöglicht die generische Integration beliebiger panStamp Sensoren und Aktoren in FHEM. Mit Hilfe der im jeweiligen Device Description File hinterlegten Beschreibung werden hierzu automatisch userReadings angelegt die neben den reinen Registerwerten in hex auch &#039;menschenlesbare&#039; readings der Sensorwerte erzeugen. Damit dies funktioniert, muss das Attribut ProductCode korrekt gesetzt sein. Das geschieht normalerweise automatisch beim Anlegen des Device.&lt;br /&gt;
&lt;br /&gt;
Hier Beispielhaft anhand eines BMP085 Temperatur- und Luftdrucksensors dargestellt:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;attr temppress userReadings voltage:0B-Voltage {hex(ReadingsVal($name,&amp;quot;0B-Voltage&amp;quot;,&amp;quot;0&amp;quot;))*0.001}, temperature:0C.0-Temperature {hex(ReadingsVal($name,&amp;quot;0C.0-Temperature&amp;quot;,&amp;quot;0&amp;quot;))*0.1-50}, pressure:0C.1-Pressure {hex(ReadingsVal($name,&amp;quot;0C.1-Pressure&amp;quot;,&amp;quot;0&amp;quot;))*0.01}, pressureNN:0C.1-Pressure {sprintf(&amp;quot;%.2f&amp;quot;,hex(ReadingsVal($name,&amp;quot;0C.1-Pressure&amp;quot;,&amp;quot;0&amp;quot;))*0.01 + AttrVal(&amp;quot;global&amp;quot;, &amp;quot;altitude&amp;quot;, 0)/8.5)}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:SWAP_ 0000000100000005.png|mini|hochkant=2.5|Resultat eines stateFormat]]&lt;br /&gt;
Aus diesen readings kann dann mit stateFormat die gewünschte Darstellung für die Raumübersicht erzeugt werden:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;attr temppress stateFormat {sprintf(&amp;quot;%.1f&amp;quot;,ReadingsVal($name,&amp;quot;temperature&amp;quot;,0)).&amp;quot;°C &amp;quot;.sprintf(&amp;quot;%.1f&amp;quot;,ReadingsVal($name,&amp;quot;pressureNN&amp;quot;,0)).&amp;quot;mbar&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sobald ein SWAP Device mit dem productCode korrekt angelegt wurde, können die Userregister bzw. alle Register aufgelistet werden: &lt;br /&gt;
 get &amp;lt;device&amp;gt; regList&lt;br /&gt;
 get &amp;lt;device&amp;gt; regListALL&lt;br /&gt;
&lt;br /&gt;
und einzelne Register abgefragt und gesetzt werden:&lt;br /&gt;
 set &amp;lt;device&amp;gt; regGet &amp;lt;ID&amp;gt;&lt;br /&gt;
 set &amp;lt;device&amp;gt; regSet &amp;lt;ID&amp;gt; &amp;lt;value&amp;gt;&lt;br /&gt;
Für die Systemregister kann hierzu statt der RegisterID auch der Registername (siehe regListAll) verwendet werden.&lt;br /&gt;
&lt;br /&gt;
==== Neue panStamps in Betrieb nehmen ====&lt;br /&gt;
&#039;&#039;&#039;Info: Das SWAP Modul unterstützt autocreate. Bei der Inbetriebnahme ist autocreate zu aktivieren!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Neue panStamps sollten nur Einer nach dem Anderen in Betrieb genommen werden, da sie zuerst mit einer eindeutigen Device-Adresse (ungleich FF und grösser 01) versehen werden müssen. Bei batteriebetriebenen Sensoren sollte auch das Sendeintervall auf einen sinnvollen Wert gesetzt werden:&lt;br /&gt;
 set &amp;lt;device&amp;gt; regSet 09 &amp;lt;device adresse als 2 stellige hex zahl&amp;gt;&lt;br /&gt;
 set &amp;lt;device&amp;gt; regSet 0A &amp;lt;intervall in sekunden als 4 stellige hex zahl&amp;gt;&lt;br /&gt;
Für Devices im Power-Down-Modus werden diese Kommandos in eine Warteschlange gestellt und übertragen, sobald das Device seine Initialisierungssequenz durchläuft. Hierzu ist nach Absetzen der Kommandos Reset zu drücken oder die Stromquelle erneut zu verbinden.&lt;br /&gt;
&lt;br /&gt;
Das SWAP modul versucht, ein Device mit der default Adresse &amp;lt;code&amp;gt;FF&amp;lt;/code&amp;gt; automatisch auf die erste freie Adresse im Bereich &amp;lt;code&amp;gt;F0&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;FE&amp;lt;/code&amp;gt; zu ändern.&lt;br /&gt;
&lt;br /&gt;
Für batteriebetriebene Devices (genauer: Devices die den Power-Down-Modus unterstützen) wird das Default Sendeintervall von &amp;lt;code&amp;gt;FFFF&amp;lt;/code&amp;gt; zu &amp;lt;code&amp;gt;0384&amp;lt;/code&amp;gt; (900 Sekunden) geändert.&lt;br /&gt;
Es gibt mit bestimmten panstamp lib Versionen das Problem das ein wert von FFFF in 0A zum Überlauf führt und dann ununterbrochen gesendet wird. Im fhem Modul wird versucht das abzufangen. Das funktioniert auf manchen langsamen host systemen (z.B. FritzBox) nicht, weil der panstamp so schnell sendet das fhem so mit dem abarbeiten beschäftigt ist das es selber nicht zum senden kommt.&lt;br /&gt;
Zur Abhilfe kann im sketch in setup() ganz am Anfang  ein&lt;br /&gt;
  EEPROM.write(EEPROM_TX_INTERVAL, 0x55);&lt;br /&gt;
  EEPROM.write(EEPROM_TX_INTERVAL+1, 0x55);&lt;br /&gt;
eingefügt werden und noch mal flashen. Wenn der Sketch damit ein mal durchgelaufen ist können diese beiden Zeilen wieder entfernen und der panstamp noch mal geflasht.&lt;br /&gt;
&lt;br /&gt;
Automatisch gesetzte Werte sollten danach manuell auf die jeweilige Installation angepasst werden.&lt;br /&gt;
&lt;br /&gt;
==== Beispiele ====&lt;br /&gt;
===== Bodenfeuchte =====&lt;br /&gt;
[[Datei:SWAP_ soilmositure-plot.jpg|mini|hochkant=2.5|Bodenfeuchte]]&lt;br /&gt;
&lt;br /&gt;
Der panStamp soilmoisture Sketch aus dem examples Verzeichnis ist mit dem Standard SWAP Modul kompatibel. &lt;br /&gt;
&lt;br /&gt;
Eine für einen Vegetronix sensor angepasste Version kann von [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ sourceforge] heruntergeladen werden. Das Übertragungsintervall ist wie üblich über das regsiter 0A konfigurierbar. Der Sensor wird and GND, D7 für die Versorgungsspannung und A4 für den Messwert angeschlossen.&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;MyBodenfeuchte&amp;gt; stateFormat VWC_A%&lt;br /&gt;
 set &amp;lt;MyBodenfeuchte&amp;gt; userReadings Level0_Voltage {hex(ReadingsVal($name,&amp;quot;0C.0-Moisture_level_0&amp;quot;,&amp;quot;0&amp;quot;))*(3.3/1024)}, VWC_A:0C.0-Moisture_level_0 {sprintf(&amp;quot;%.0f&amp;quot;,(11.6552 * (ReadingsVal($name,&amp;quot;Level0_Voltage&amp;quot;,&amp;quot;0&amp;quot;))**4 + 7.10835 * (ReadingsVal($name,&amp;quot;Level0_Voltage&amp;quot;,&amp;quot;0&amp;quot;))**2 - 0.569557) / ((ReadingsVal($name,&amp;quot;Level0_Voltage&amp;quot;,&amp;quot;0&amp;quot;))**2 + 1))}, voltage:0B-Voltage {hex(ReadingsVal($name,&amp;quot;0B-Voltage&amp;quot;,&amp;quot;0&amp;quot;))*0.001}, battery:0B-Voltage {(ReadingsVal($name,&amp;quot;voltage&amp;quot;,&amp;quot;0&amp;quot;)&amp;lt;1?&amp;quot;low&amp;quot;:&amp;quot;ok&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
Mit einem entsprechend erweiterten Sketch lassen sich auch mehrere Sensoren an einem panStamp auslesen.&lt;br /&gt;
&lt;br /&gt;
=== SWAP_XXXXXXXXXXXXXXXX ===&lt;br /&gt;
Besonders bei Aktoren ist oft eine engere FHEM-Integration sinnvoll, um FHEM Konzepte wie on/off/on-for-timer direkt abzubilden und nicht mehr nur auf die Registerebene und regSet und regGet Kommandos beschränkt zu sein.&lt;br /&gt;
&lt;br /&gt;
Um per autocreate automatisch das passende Modul laden zu können, müssen diese Module nach dem Schema SWAP_XXXXXXXXXXXXXXXX.pm benannt sein wobei XXXXXXXXXXXXXXXX für den jeweiligen productCode steht.&lt;br /&gt;
&lt;br /&gt;
==== SWAP_0000002200000003 ====&lt;br /&gt;
[[Datei:SWAP_0000002200000003.png|mini|rechts|hochkant=2.5|RGB LED Driver Board]]&lt;br /&gt;
Ein FHEM Modul für das modifizierte panStamp RGB LED Driver Board. &lt;br /&gt;
&lt;br /&gt;
Das Board unterstützt RGBW LEDs und lässt sich per Infrarot Fernbedienung, DMX Controller (z.&amp;amp;nbsp;B. als Unterputz Touchpanel) und FHEM bedienen.&lt;br /&gt;
&lt;br /&gt;
Der Funktionsumfang wird in diesem [http://forum.fhem.de/index.php/topic,12487.msg81923.html#msg81923 Forenthread] vorgestellt. Die Hardware für das Board wird [http://forum.fhem.de/index.php/topic,13890.0.html  hier] im FHEM Forum vorgestellt und ein Prototyp ist [http://forum.fhem.de/index.php/topic,12487.msg85777.html#msg85777 hier] zu sehen.&lt;br /&gt;
=====Upate 2014-01-11===== &lt;br /&gt;
Zur Zeit ist Version 2 des Boards in Vorbereiteung. Die Projektseite zur Hardware findet sich [http://itse.homeip.net/projekte/12/6/ hier]. &lt;br /&gt;
&lt;br /&gt;
Demnächst wird eine aktualisiert Version des Fhem Moduls und panStamp Sketches eingecheckt. Eine Übersicht über die dann vorhandene Funktionalität:&lt;br /&gt;
&lt;br /&gt;
was geht:&lt;br /&gt;
* bis zu vier led kanäle (je nach kombination von ir und soft pwm)&lt;br /&gt;
* ir senden&lt;br /&gt;
* ir empfangen&lt;br /&gt;
* messen ob die led versorgung an ist&lt;br /&gt;
* helligkeit eines an A2 angeschlossenen helligkeits sensors&lt;br /&gt;
* konfiguration der dmx basis adresse über das swap register 0x12&lt;br /&gt;
* optional soft on auf letzten wert&lt;br /&gt;
* alles was auch vorher schon ging: dimmen, faden, ir fernbedienungen anlernen, ...&lt;br /&gt;
&lt;br /&gt;
wichtig zu wissen:&lt;br /&gt;
* wenn ir aktiv ist und kein soft pwm lässt sich der 4. kanal nur ein und aus schalten&lt;br /&gt;
* wenn ir aktiv ist muss soft pwm aktiv sein um den 4. kanäle auch zu dimmen&lt;br /&gt;
* es wird nur ein zusätzlicher kanal tatsächlich schon unterstützt. der fünfte kommt noch&lt;br /&gt;
* bei ir senden sind nur die aufrufe für sony und nec tatsächlich eingebaut. die anderen sind aber einfach zu ergänzen&lt;br /&gt;
* beim ir senden sind noch keine Wiederholungen eingebaut. die müssen laut protokoll aber eigentlich sein&lt;br /&gt;
&lt;br /&gt;
was noch kommt:&lt;br /&gt;
* besseres soft pwm&lt;br /&gt;
* mehr konfiguration bezüglich default verhalten. ramp zeiten, delays, ...&lt;br /&gt;
* hsv farb modell um besser zu faden und vor allem um den weiss anteil automatisch auf die weiss leds zu legen&lt;br /&gt;
* die virtuellen channel &lt;br /&gt;
* fhem kompatibles ir senden&lt;br /&gt;
* sofortiges senden von helligkeit und led spannung bei änderung&lt;br /&gt;
* andere ir lib mit sehr viel besserer geräte unterstützung&lt;br /&gt;
&lt;br /&gt;
wie gehabt muss alles über config.h konfiguriert werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== weitrere Screenshots =====&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:SWAP_0000002200000003-internal.png|InternalValues&lt;br /&gt;
File:SWAP_0000002200000003-readings.png|Readings&lt;br /&gt;
File:SWAP_0000002200000003-attributes.png|Attributes&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Arduino Sketches ==&lt;br /&gt;
Zum Flashen der Panstamps wird die Arduino IDE benötigt. Eine Installationsanleitung ist unter folgendem Link zu finden:&lt;br /&gt;
:https://code.google.com/p/panstamp/wiki/firststeps&lt;br /&gt;
&lt;br /&gt;
Für den RGB-Driver sketch sind je nach gewünschtem Funktionsumfang noch folgende libs zu installieren:&lt;br /&gt;
&lt;br /&gt;
* IR lib - https://github.com/shirriff/Arduino-IRremote&lt;br /&gt;
* DMX lib- http://www.mathertel.de/Arduino/DMXSerial.aspx&lt;br /&gt;
&lt;br /&gt;
Die Librarys sollten entweder mit dem entsprechenden Menüpunkt in die IDE integriert werden oder jeweils nach auspacken des zip files als als kompletten Ordner im Arduino libraries verzeichnis abgelegt werden (siehe [http://www.arduino.cc/en/Hacking/Libraries)]).&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version des RGB-Driver Sketches findet sich auf [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ sourceforge].&lt;br /&gt;
&lt;br /&gt;
Dieser muss in Arduino\libraries\panstamp\examples\sketches entpackt und die rbgdriver.ino gestartet werden. In der Arduino IDE sollte unter Tools-&amp;gt;Board &amp;quot;Arduino Pro or Pro Mini (3.3V, 8MHz) w/ Atmega328&amp;quot; eingestellt sein. Wenn man das boards.txt file von [http://code.google.com/p/panstamp/downloads/detail?name=boards.txt&amp;amp;can=2&amp;amp;q= hier] installiert kann man in der IDE auch direkt PanStamp als Plattform auswählen.&lt;br /&gt;
&lt;br /&gt;
Welche Features der sketch bietet lässt sich im config.h file durch ein- oder auskommentieren der #define ENABLE_... Zeilen festlegen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Besonderheiten bei der Nutzung einiger Funktionen&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;- #define ENABLE_DMX&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist darauf zu achten, dass in der DMX-Lib in der Datei DMXSerial.h die Zeile&lt;br /&gt;
* #define DmxModePin 2     // Arduino pin 2 for controlling the data direction&lt;br /&gt;
in &lt;br /&gt;
* #define DmxModePin 7     // Arduino pin 7 for controlling the data direction&lt;br /&gt;
abgeändert werden muss.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--#define HAS_SENSOR (ermöglicht die Nutzung eines DHT22 Sensors zur Auswerung von Temperatur und Luftfeuchtigkeit)&lt;br /&gt;
&lt;br /&gt;
Hierzu muss&lt;br /&gt;
&lt;br /&gt;
USE_SOFT_PWM muss auskommentiert sein.&lt;br /&gt;
&lt;br /&gt;
In der IRremote.cpp Datei in der Irremote Library muss die Zeile&lt;br /&gt;
&lt;br /&gt;
void IRrecv::disableIRIn() &lt;br /&gt;
{&lt;br /&gt;
TIMER_DISABLE_INTR;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sowie die Irremote.h Datei unter Public: um die Zeile &lt;br /&gt;
&lt;br /&gt;
void disableIRIn();&lt;br /&gt;
&lt;br /&gt;
erweitert werden.&lt;br /&gt;
&lt;br /&gt;
Der Daten-Pin des DHT22 Sensors muss hierfür an A2 des Panstamps angeschlossen werden.&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.panstamp.com/home panStamp] panStamp Hersteller&lt;br /&gt;
* [http://itse.homeip.net/projekte/12/6/ Projektseite] für das RGB-Multi-Board.&lt;br /&gt;
* [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ rgbdriver sketch] auf sourceforge&lt;br /&gt;
* [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ soilmoisture sketch]  auf sourceforge&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Interfaces]]&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=PanStamp&amp;diff=6580</id>
		<title>PanStamp</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=PanStamp&amp;diff=6580"/>
		<updated>2014-06-18T23:02:41Z</updated>

		<summary type="html">&lt;p&gt;Fidel: /* Arduino Sketches */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle}}&lt;br /&gt;
{{SEITENTITEL:panStamp}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Hardware&lt;br /&gt;
|Bild=panStamp.jpg&lt;br /&gt;
|Bildbeschreibung=panStamp&lt;br /&gt;
|HWProtocol=SWAP&lt;br /&gt;
|HWType=Sender, Empfänger, Sensor, [[Interface]]&lt;br /&gt;
|HWCategory=&lt;br /&gt;
|HWComm=868MHz (433/915MHz)&lt;br /&gt;
|HWChannels=&lt;br /&gt;
|HWVoltage=3.3V (panStick: 5V USB)&lt;br /&gt;
|HWPowerConsumption=&lt;br /&gt;
|HWPoweredBy=Battery (panStick: USB)&lt;br /&gt;
|HWSize=17.7 x 30.5 mm&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#panStamp 35_panStamp.pm] [http://fhem.de/commandref.html#SWAP 35_SWAP.pm]&lt;br /&gt;
|ModOwner=[http://forum.fhem.de/index.php?action=profile;u=430 Andre / justme1968]&lt;br /&gt;
|HWManufacturer=panStamp&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.panstamp.com/home PanStamps] sind [[Arduino]] Clones, die ein CC1101 Funkmodul beinhalten. Mit ihnen lassen sich Sensoren und Aktoren drahtlos an FHEM anbinden. Sie lassen sich genau wie Arduinos über die Ardunio IDE oder mit dem ino Kommandozeilen Binary programmieren.&lt;br /&gt;
&lt;br /&gt;
Der panStamp Software Stack unterstützt einen stromsparenden Power-Down- oder Sleep-Modus für batteriebetriebene Sensoren, aus dem diese dann nur zur eigentlichen Messung und Übertragung &amp;quot;aufwachen&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Zur Kommunikation in einem panStamp Netzwerk dient das &#039;&#039;Simple Wireless Abstract Protocol&#039;&#039; ([http://code.google.com/p/panstamp/wiki/SWAP SWAP]).&lt;br /&gt;
&lt;br /&gt;
Um einen panStamp in Betrieb zu nehmen muss er unbedingt mit einer Antenne oder einem stück Draht in der [https://code.google.com/p/panstamp/wiki/antennalengths richtigen Länge] bestückt sein. Ohne Antenne funktioniert die Übertragung nicht. Auch nicht auf kurze Distanzen.&lt;br /&gt;
&lt;br /&gt;
== Simple Wireless Abstract Protocol (SWAP) ==&lt;br /&gt;
Die komplette SWAP- Kommunikation ist registerbasiert und erfolgt mit Nachrichten um diese Register abzufragen, zu setzen und deren Inhalt zu senden. Alle Register lassen sich lesen, manche auch beschreiben.&lt;br /&gt;
&lt;br /&gt;
Jeder panStamp stellt elf Systemregister (00-0A) [http://code.google.com/p/panstamp/wiki/SWAPregisters] und beliebig viele sketchabängige Userregister (0B-)bereit. Die Beschreibung der jeweils von einem Sketch bereitgestellten Userregister erfolgt in &#039;&#039;Device Description Files&#039;&#039;, die in .../FHEM/lib/SWAP zu finden sind. Die Identifikation der Art eines panStamp und die Zuordnung zu einem bestimmten Device Description File erfolgt über den productCode der aus &#039;&#039;Hersteller&#039;&#039;- und &#039;&#039;Produkt&#039;&#039;-Id gebildet wird.&lt;br /&gt;
&lt;br /&gt;
In den Systemregistern steht z.&amp;amp;nbsp;B. der productCode, die Deviceadresse und das Übertragungsintervall. Konfigurierbare Register werden im EEPROM gesichert, so dass die Werte auch bei einem Neustart nicht verlorengehen. Beim ersten Starten eines panStamp ist das EEPROM mit FF initialisiert und alle konfigurierbaren Register haben diesen Wert, also z.&amp;amp;nbsp;B. die Adresse FF und das Intervall FFFF (zwischen 18 und 19 Stunden).&lt;br /&gt;
&lt;br /&gt;
Die Systemregister werden in der Device Detailansicht bei den InternalValues im oberen Bereich angezeigt und die User-Register als reading im unteren Bereich.&lt;br /&gt;
&lt;br /&gt;
Jeder panStamp durchläuft beim Start eine definierte Einschaltsequenz und überträgt als erstes seinen productCode. Batteriebetriebene panStamps warten anschließend drei Sekunden auf Konfigurationskommandos. Danach werden bestimmte Systemregister und aktuelle Messwerte gesendet.&lt;br /&gt;
&lt;br /&gt;
== FHEM Integration ==&lt;br /&gt;
Die Integration in FHEM erfolgt über eine reihe von Modulen die im folgenden genauer beschrieben werden.&lt;br /&gt;
=== panStamp ===&lt;br /&gt;
Als Schnittstelle zwischen FHEM und einem panStamp Netzwerk dient entweder ein panStick (USB Stick mit aufgestecktem panStamp) oder ein panStamp Shield mit integriertem panStamp an einem Raspberry PI. Der so angebundene panStamp wird mit einem Modem-Sketch als RF Modem verwenden und über das FHEM Modul panStamp angesprochen. Hierzu ist in FHEM ein entsprechendes Device anzulegen: &amp;lt;pre&amp;gt;define panStick panStamp /dev/ttyUSBx@38400&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dieses panStamp Device versucht dann als erstes alle panStamps im Netz zu finden und per autocreate anzulegen.&lt;br /&gt;
&lt;br /&gt;
=== SWAP ===&lt;br /&gt;
[[Datei:SWAP_ 0000000100000005-detail.png|mini|hochkant=2.5|Readings]]&lt;br /&gt;
Das SWAP Modul ermöglicht die generische Integration beliebiger panStamp Sensoren und Aktoren in FHEM. Mit Hilfe der im jeweiligen Device Description File hinterlegten Beschreibung werden hierzu automatisch userReadings angelegt die neben den reinen Registerwerten in hex auch &#039;menschenlesbare&#039; readings der Sensorwerte erzeugen. Damit dies funktioniert, muss das Attribut ProductCode korrekt gesetzt sein. Das geschieht normalerweise automatisch beim Anlegen des Device.&lt;br /&gt;
&lt;br /&gt;
Hier Beispielhaft anhand eines BMP085 Temperatur- und Luftdrucksensors dargestellt:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;attr temppress userReadings voltage:0B-Voltage {hex(ReadingsVal($name,&amp;quot;0B-Voltage&amp;quot;,&amp;quot;0&amp;quot;))*0.001}, temperature:0C.0-Temperature {hex(ReadingsVal($name,&amp;quot;0C.0-Temperature&amp;quot;,&amp;quot;0&amp;quot;))*0.1-50}, pressure:0C.1-Pressure {hex(ReadingsVal($name,&amp;quot;0C.1-Pressure&amp;quot;,&amp;quot;0&amp;quot;))*0.01}, pressureNN:0C.1-Pressure {sprintf(&amp;quot;%.2f&amp;quot;,hex(ReadingsVal($name,&amp;quot;0C.1-Pressure&amp;quot;,&amp;quot;0&amp;quot;))*0.01 + AttrVal(&amp;quot;global&amp;quot;, &amp;quot;altitude&amp;quot;, 0)/8.5)}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:SWAP_ 0000000100000005.png|mini|hochkant=2.5|Resultat eines stateFormat]]&lt;br /&gt;
Aus diesen readings kann dann mit stateFormat die gewünschte Darstellung für die Raumübersicht erzeugt werden:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;attr temppress stateFormat {sprintf(&amp;quot;%.1f&amp;quot;,ReadingsVal($name,&amp;quot;temperature&amp;quot;,0)).&amp;quot;°C &amp;quot;.sprintf(&amp;quot;%.1f&amp;quot;,ReadingsVal($name,&amp;quot;pressureNN&amp;quot;,0)).&amp;quot;mbar&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sobald ein SWAP Device mit dem productCode korrekt angelegt wurde, können die Userregister bzw. alle Register aufgelistet werden: &lt;br /&gt;
 get &amp;lt;device&amp;gt; regList&lt;br /&gt;
 get &amp;lt;device&amp;gt; regListALL&lt;br /&gt;
&lt;br /&gt;
und einzelne Register abgefragt und gesetzt werden:&lt;br /&gt;
 set &amp;lt;device&amp;gt; regGet &amp;lt;ID&amp;gt;&lt;br /&gt;
 set &amp;lt;device&amp;gt; regSet &amp;lt;ID&amp;gt; &amp;lt;value&amp;gt;&lt;br /&gt;
Für die Systemregister kann hierzu statt der RegisterID auch der Registername (siehe regListAll) verwendet werden.&lt;br /&gt;
&lt;br /&gt;
==== Neue panStamps in Betrieb nehmen ====&lt;br /&gt;
&#039;&#039;&#039;Info: Das SWAP Modul unterstützt autocreate. Bei der Inbetriebnahme ist autocreate zu aktivieren!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Neue panStamps sollten nur Einer nach dem Anderen in Betrieb genommen werden, da sie zuerst mit einer eindeutigen Device-Adresse (ungleich FF und grösser 01) versehen werden müssen. Bei batteriebetriebenen Sensoren sollte auch das Sendeintervall auf einen sinnvollen Wert gesetzt werden:&lt;br /&gt;
 set &amp;lt;device&amp;gt; regSet 09 &amp;lt;device adresse als 2 stellige hex zahl&amp;gt;&lt;br /&gt;
 set &amp;lt;device&amp;gt; regSet 0A &amp;lt;intervall in sekunden als 4 stellige hex zahl&amp;gt;&lt;br /&gt;
Für Devices im Power-Down-Modus werden diese Kommandos in eine Warteschlange gestellt und übertragen, sobald das Device seine Initialisierungssequenz durchläuft. Hierzu ist nach Absetzen der Kommandos Reset zu drücken oder die Stromquelle erneut zu verbinden.&lt;br /&gt;
&lt;br /&gt;
Das SWAP modul versucht, ein Device mit der default Adresse &amp;lt;code&amp;gt;FF&amp;lt;/code&amp;gt; automatisch auf die erste freie Adresse im Bereich &amp;lt;code&amp;gt;F0&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;FE&amp;lt;/code&amp;gt; zu ändern.&lt;br /&gt;
&lt;br /&gt;
Für batteriebetriebene Devices (genauer: Devices die den Power-Down-Modus unterstützen) wird das Default Sendeintervall von &amp;lt;code&amp;gt;FFFF&amp;lt;/code&amp;gt; zu &amp;lt;code&amp;gt;0384&amp;lt;/code&amp;gt; (900 Sekunden) geändert.&lt;br /&gt;
Es gibt mit bestimmten panstamp lib Versionen das Problem das ein wert von FFFF in 0A zum Überlauf führt und dann ununterbrochen gesendet wird. Im fhem Modul wird versucht das abzufangen. Das funktioniert auf manchen langsamen host systemen (z.B. FritzBox) nicht, weil der panstamp so schnell sendet das fhem so mit dem abarbeiten beschäftigt ist das es selber nicht zum senden kommt.&lt;br /&gt;
Zur Abhilfe kann im sketch in setup() ganz am Anfang  ein&lt;br /&gt;
  EEPROM.write(EEPROM_TX_INTERVAL, 0x55);&lt;br /&gt;
  EEPROM.write(EEPROM_TX_INTERVAL+1, 0x55);&lt;br /&gt;
eingefügt werden und noch mal flashen. Wenn der Sketch damit ein mal durchgelaufen ist können diese beiden Zeilen wieder entfernen und der panstamp noch mal geflasht.&lt;br /&gt;
&lt;br /&gt;
Automatisch gesetzte Werte sollten danach manuell auf die jeweilige Installation angepasst werden.&lt;br /&gt;
&lt;br /&gt;
==== Beispiele ====&lt;br /&gt;
===== Bodenfeuchte =====&lt;br /&gt;
[[Datei:SWAP_ soilmositure-plot.jpg|mini|hochkant=2.5|Bodenfeuchte]]&lt;br /&gt;
&lt;br /&gt;
Der panStamp soilmoisture Sketch aus dem examples Verzeichnis ist mit dem Standard SWAP Modul kompatibel. &lt;br /&gt;
&lt;br /&gt;
Eine für einen Vegetronix sensor angepasste Version kann von [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ sourceforge] heruntergeladen werden. Das Übertragungsintervall ist wie üblich über das regsiter 0A konfigurierbar. Der Sensor wird and GND, D7 für die Versorgungsspannung und A4 für den Messwert angeschlossen.&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;MyBodenfeuchte&amp;gt; stateFormat VWC_A%&lt;br /&gt;
 set &amp;lt;MyBodenfeuchte&amp;gt; userReadings Level0_Voltage {hex(ReadingsVal($name,&amp;quot;0C.0-Moisture_level_0&amp;quot;,&amp;quot;0&amp;quot;))*(3.3/1024)}, VWC_A:0C.0-Moisture_level_0 {sprintf(&amp;quot;%.0f&amp;quot;,(11.6552 * (ReadingsVal($name,&amp;quot;Level0_Voltage&amp;quot;,&amp;quot;0&amp;quot;))**4 + 7.10835 * (ReadingsVal($name,&amp;quot;Level0_Voltage&amp;quot;,&amp;quot;0&amp;quot;))**2 - 0.569557) / ((ReadingsVal($name,&amp;quot;Level0_Voltage&amp;quot;,&amp;quot;0&amp;quot;))**2 + 1))}, voltage:0B-Voltage {hex(ReadingsVal($name,&amp;quot;0B-Voltage&amp;quot;,&amp;quot;0&amp;quot;))*0.001}, battery:0B-Voltage {(ReadingsVal($name,&amp;quot;voltage&amp;quot;,&amp;quot;0&amp;quot;)&amp;lt;1?&amp;quot;low&amp;quot;:&amp;quot;ok&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
Mit einem entsprechend erweiterten Sketch lassen sich auch mehrere Sensoren an einem panStamp auslesen.&lt;br /&gt;
&lt;br /&gt;
=== SWAP_XXXXXXXXXXXXXXXX ===&lt;br /&gt;
Besonders bei Aktoren ist oft eine engere FHEM-Integration sinnvoll, um FHEM Konzepte wie on/off/on-for-timer direkt abzubilden und nicht mehr nur auf die Registerebene und regSet und regGet Kommandos beschränkt zu sein.&lt;br /&gt;
&lt;br /&gt;
Um per autocreate automatisch das passende Modul laden zu können, müssen diese Module nach dem Schema SWAP_XXXXXXXXXXXXXXXX.pm benannt sein wobei XXXXXXXXXXXXXXXX für den jeweiligen productCode steht.&lt;br /&gt;
&lt;br /&gt;
==== SWAP_0000002200000003 ====&lt;br /&gt;
[[Datei:SWAP_0000002200000003.png|mini|rechts|hochkant=2.5|RGB LED Driver Board]]&lt;br /&gt;
Ein FHEM Modul für das modifizierte panStamp RGB LED Driver Board. &lt;br /&gt;
&lt;br /&gt;
Das Board unterstützt RGBW LEDs und lässt sich per Infrarot Fernbedienung, DMX Controller (z.&amp;amp;nbsp;B. als Unterputz Touchpanel) und FHEM bedienen.&lt;br /&gt;
&lt;br /&gt;
Der Funktionsumfang wird in diesem [http://forum.fhem.de/index.php/topic,12487.msg81923.html#msg81923 Forenthread] vorgestellt. Die Hardware für das Board wird [http://forum.fhem.de/index.php/topic,13890.0.html  hier] im FHEM Forum vorgestellt und ein Prototyp ist [http://forum.fhem.de/index.php/topic,12487.msg85777.html#msg85777 hier] zu sehen.&lt;br /&gt;
=====Upate 2014-01-11===== &lt;br /&gt;
Zur Zeit ist Version 2 des Boards in Vorbereiteung. Die Projektseite zur Hardware findet sich [http://itse.homeip.net/projekte/12/6/ hier]. &lt;br /&gt;
&lt;br /&gt;
Demnächst wird eine aktualisiert Version des Fhem Moduls und panStamp Sketches eingecheckt. Eine Übersicht über die dann vorhandene Funktionalität:&lt;br /&gt;
&lt;br /&gt;
was geht:&lt;br /&gt;
* bis zu vier led kanäle (je nach kombination von ir und soft pwm)&lt;br /&gt;
* ir senden&lt;br /&gt;
* ir empfangen&lt;br /&gt;
* messen ob die led versorgung an ist&lt;br /&gt;
* helligkeit eines an A2 angeschlossenen helligkeits sensors&lt;br /&gt;
* konfiguration der dmx basis adresse über das swap register 0x12&lt;br /&gt;
* optional soft on auf letzten wert&lt;br /&gt;
* alles was auch vorher schon ging: dimmen, faden, ir fernbedienungen anlernen, ...&lt;br /&gt;
&lt;br /&gt;
wichtig zu wissen:&lt;br /&gt;
* wenn ir aktiv ist und kein soft pwm lässt sich der 4. kanal nur ein und aus schalten&lt;br /&gt;
* wenn ir aktiv ist muss soft pwm aktiv sein um den 4. kanäle auch zu dimmen&lt;br /&gt;
* es wird nur ein zusätzlicher kanal tatsächlich schon unterstützt. der fünfte kommt noch&lt;br /&gt;
* bei ir senden sind nur die aufrufe für sony und nec tatsächlich eingebaut. die anderen sind aber einfach zu ergänzen&lt;br /&gt;
* beim ir senden sind noch keine Wiederholungen eingebaut. die müssen laut protokoll aber eigentlich sein&lt;br /&gt;
&lt;br /&gt;
was noch kommt:&lt;br /&gt;
* besseres soft pwm&lt;br /&gt;
* mehr konfiguration bezüglich default verhalten. ramp zeiten, delays, ...&lt;br /&gt;
* hsv farb modell um besser zu faden und vor allem um den weiss anteil automatisch auf die weiss leds zu legen&lt;br /&gt;
* die virtuellen channel &lt;br /&gt;
* fhem kompatibles ir senden&lt;br /&gt;
* sofortiges senden von helligkeit und led spannung bei änderung&lt;br /&gt;
* andere ir lib mit sehr viel besserer geräte unterstützung&lt;br /&gt;
&lt;br /&gt;
wie gehabt muss alles über config.h konfiguriert werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== weitrere Screenshots =====&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:SWAP_0000002200000003-internal.png|InternalValues&lt;br /&gt;
File:SWAP_0000002200000003-readings.png|Readings&lt;br /&gt;
File:SWAP_0000002200000003-attributes.png|Attributes&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Arduino Sketches ==&lt;br /&gt;
Zum Flashen der Panstamps wird die Arduino IDE benötigt. Eine Installationsanleitung ist unter folgendem Link zu finden:&lt;br /&gt;
:https://code.google.com/p/panstamp/wiki/firststeps&lt;br /&gt;
&lt;br /&gt;
Für den RGB-Driver sketch sind je nach gewünschtem Funktionsumfang noch folgende libs zu installieren:&lt;br /&gt;
&lt;br /&gt;
* IR lib - https://github.com/shirriff/Arduino-IRremote&lt;br /&gt;
* DMX lib- http://www.mathertel.de/Arduino/DMXSerial.aspx&lt;br /&gt;
&lt;br /&gt;
Die Librarys sollten entweder mit dem entsprechenden Menüpunkt in die IDE integriert werden oder jeweils nach auspacken des zip files als als kompletten Ordner im Arduino libraries verzeichnis abgelegt werden (siehe [http://www.arduino.cc/en/Hacking/Libraries)]).&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version des RGB-Driver Sketches findet sich auf [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ sourceforge].&lt;br /&gt;
&lt;br /&gt;
Dieser muss in Arduino\libraries\panstamp\examples\sketches entpackt und die rbgdriver.ino gestartet werden. In der Arduino IDE sollte unter Tools-&amp;gt;Board &amp;quot;Arduino Pro or Pro Mini (3.3V, 8MHz) w/ Atmega328&amp;quot; eingestellt sein. Wenn man das boards.txt file von [http://code.google.com/p/panstamp/downloads/detail?name=boards.txt&amp;amp;can=2&amp;amp;q= hier] installiert kann man in der IDE auch direkt PanStamp als Plattform auswählen.&lt;br /&gt;
&lt;br /&gt;
Welche Features der sketch bietet lässt sich im config.h file durch ein- oder auskommentieren der #define ENABLE_... Zeilen festlegen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Besonderheiten bei der Nutzung einiger Funktionen&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;- #define ENABLE_DMX&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist darauf zu achten, dass in der DMX-Lib in der Datei DMXSerial.h die Zeile&lt;br /&gt;
* #define DmxModePin 2     // Arduino pin 2 for controlling the data direction&lt;br /&gt;
in &lt;br /&gt;
* #define DmxModePin 7     // Arduino pin 7 for controlling the data direction&lt;br /&gt;
abgeändert werden muss.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--#define HAS_SENSOR (ermöglicht die Nutzung eines DHT22 Sensors zur Auswerung von Temperatur und Luftfeuchtigkeit)&lt;br /&gt;
&lt;br /&gt;
Hierzu müssen die IRremote.cpp Datei in der Irremote Library um die Zeile&lt;br /&gt;
&lt;br /&gt;
void IRrecv::disableIRIn() &lt;br /&gt;
{&lt;br /&gt;
TIMER_DISABLE_INTR;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sowie die Irremote.h Datei unter Public: um die Zeile &lt;br /&gt;
&lt;br /&gt;
void disableIRIn();&lt;br /&gt;
&lt;br /&gt;
erweitert werden.&lt;br /&gt;
&lt;br /&gt;
Der Daten-Pin des DHT22 Sensors muss hierfür an A2 des Panstamps angeschlossen werden.&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.panstamp.com/home panStamp] panStamp Hersteller&lt;br /&gt;
* [http://itse.homeip.net/projekte/12/6/ Projektseite] für das RGB-Multi-Board.&lt;br /&gt;
* [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ rgbdriver sketch] auf sourceforge&lt;br /&gt;
* [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ soilmoisture sketch]  auf sourceforge&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Interfaces]]&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=PanStamp&amp;diff=6188</id>
		<title>PanStamp</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=PanStamp&amp;diff=6188"/>
		<updated>2014-05-03T14:38:04Z</updated>

		<summary type="html">&lt;p&gt;Fidel: /* Arduino Sketches */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle}}&lt;br /&gt;
{{SEITENTITEL:panStamp}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Hardware&lt;br /&gt;
|Bild=panStamp.jpg&lt;br /&gt;
|Bildbeschreibung=panStamp&lt;br /&gt;
|HWProtocol=SWAP&lt;br /&gt;
|HWType=Sender, Empfänger, Sensor, [[Interface]]&lt;br /&gt;
|HWCategory=&lt;br /&gt;
|HWComm=868MHz (433/915MHz)&lt;br /&gt;
|HWChannels=&lt;br /&gt;
|HWVoltage=3.3V (panStick: 5V USB)&lt;br /&gt;
|HWPowerConsumption=&lt;br /&gt;
|HWPoweredBy=Battery (panStick: USB)&lt;br /&gt;
|HWSize=17.7 x 30.5 mm&lt;br /&gt;
|HWDeviceFHEM=[http://fhem.de/commandref.html#panStamp 35_panStamp.pm] [http://fhem.de/commandref.html#SWAP 35_SWAP.pm]&lt;br /&gt;
|HWManufacturer=panStamp&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.panstamp.com/home PanStamps] sind [[Arduino]] Clones, die ein CC1101 Funkmodul beinhalten. Mit ihnen lassen sich Sensoren und Aktoren drahtlos an FHEM anbinden. Sie lassen sich genau wie Arduinos über die Ardunio IDE oder mit dem ino Kommandozeilen Binary programmieren.&lt;br /&gt;
&lt;br /&gt;
Der panStamp Software Stack unterstützt einen stromsparenden Power-Down- oder Sleep-Modus für batteriebetriebene Sensoren, aus dem diese dann nur zur eigentlichen Messung und Übertragung &amp;quot;aufwachen&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Zur Kommunikation in einem panStamp Netzwerk dient das &#039;&#039;Simple Wireless Abstract Protocol&#039;&#039; ([http://code.google.com/p/panstamp/wiki/SWAP SWAP]).&lt;br /&gt;
&lt;br /&gt;
Um einen panStamp in Betrieb zu nehmen muss er unbedingt mit einer Antenne oder einem stück Draht in der [https://code.google.com/p/panstamp/wiki/antennalengths richtigen Länge] bestückt sein. Ohne Antenne funktioniert die Übertragung nicht. Auch nicht auf kurze Distanzen.&lt;br /&gt;
&lt;br /&gt;
== Simple Wireless Abstract Protocol (SWAP) ==&lt;br /&gt;
Die komplette SWAP- Kommunikation ist registerbasiert und erfolgt mit Nachrichten um diese Register abzufragen, zu setzen und deren Inhalt zu senden. Alle Register lassen sich lesen, manche auch beschreiben.&lt;br /&gt;
&lt;br /&gt;
Jeder panStamp stellt elf Systemregister (00-0A) [http://code.google.com/p/panstamp/wiki/SWAPregisters] und beliebig viele sketchabängige Userregister (0B-)bereit. Die Beschreibung der jeweils von einem Sketch bereitgestellten Userregister erfolgt in &#039;&#039;Device Description Files&#039;&#039;, die in .../FHEM/lib/SWAP zu finden sind. Die Identifikation der Art eines panStamp und die Zuordnung zu einem bestimmten Device Description File erfolgt über den productCode der aus &#039;&#039;Hersteller&#039;&#039;- und &#039;&#039;Produkt&#039;&#039;-Id gebildet wird.&lt;br /&gt;
&lt;br /&gt;
In den Systemregistern steht z.&amp;amp;nbsp;B. der productCode, die Deviceadresse und das Übertragungsintervall. Konfigurierbare Register werden im EEPROM gesichert, so dass die Werte auch bei einem Neustart nicht verlorengehen. Beim ersten Starten eines panStamp ist das EEPROM mit FF initialisiert und alle konfigurierbaren Register haben diesen Wert, also z.&amp;amp;nbsp;B. die Adresse FF und das Intervall FFFF (zwischen 18 und 19 Stunden).&lt;br /&gt;
&lt;br /&gt;
Die Systemregister werden in der Device Detailansicht bei den InternalValues im oberen Bereich angezeigt und die User-Register als reading im unteren Bereich.&lt;br /&gt;
&lt;br /&gt;
Jeder panStamp durchläuft beim Start eine definierte Einschaltsequenz und überträgt als erstes seinen productCode. Batteriebetriebene panStamps warten anschließend drei Sekunden auf Konfigurationskommandos. Danach werden bestimmte Systemregister und aktuelle Messwerte gesendet.&lt;br /&gt;
&lt;br /&gt;
== FHEM Integration ==&lt;br /&gt;
Die Integration in FHEM erfolgt über eine reihe von Modulen die im folgenden genauer beschrieben werden.&lt;br /&gt;
=== panStamp ===&lt;br /&gt;
Als Schnittstelle zwischen FHEM und einem panStamp Netzwerk dient entweder ein panStick (USB Stick mit aufgestecktem panStamp) oder ein panStamp Shield mit integriertem panStamp an einem Raspberry PI. Der so angebundene panStamp wird mit einem Modem-Sketch als RF Modem verwenden und über das FHEM Modul panStamp angesprochen. Hierzu ist in FHEM ein entsprechendes Device anzulegen: &amp;lt;pre&amp;gt;define panStick panStamp /dev/ttyUSBx@38400&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dieses panStamp Device versucht dann als erstes alle panStamps im Netz zu finden und per autocreate anzulegen.&lt;br /&gt;
&lt;br /&gt;
=== SWAP ===&lt;br /&gt;
[[Datei:SWAP_ 0000000100000005-detail.png|mini|hochkant=2.5|Readings]]&lt;br /&gt;
Das SWAP Modul ermöglicht die generische Integration beliebiger panStamp Sensoren und Aktoren in FHEM. Mit Hilfe der im jeweiligen Device Description File hinterlegten Beschreibung werden hierzu automatisch userReadings angelegt die neben den reinen Registerwerten in hex auch &#039;menschenlesbare&#039; readings der Sensorwerte erzeugen. Damit dies funktioniert, muss das Attribut ProductCode korrekt gesetzt sein. Das geschieht normalerweise automatisch beim Anlegen des Device.&lt;br /&gt;
&lt;br /&gt;
Hier Beispielhaft anhand eines BMP085 Temperatur- und Luftdrucksensors dargestellt:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;attr temppress userReadings voltage:0B-Voltage {hex(ReadingsVal($name,&amp;quot;0B-Voltage&amp;quot;,&amp;quot;0&amp;quot;))*0.001}, temperature:0C.0-Temperature {hex(ReadingsVal($name,&amp;quot;0C.0-Temperature&amp;quot;,&amp;quot;0&amp;quot;))*0.1-50}, pressure:0C.1-Pressure {hex(ReadingsVal($name,&amp;quot;0C.1-Pressure&amp;quot;,&amp;quot;0&amp;quot;))*0.01}, pressureNN:0C.1-Pressure {sprintf(&amp;quot;%.2f&amp;quot;,hex(ReadingsVal($name,&amp;quot;0C.1-Pressure&amp;quot;,&amp;quot;0&amp;quot;))*0.01 + AttrVal(&amp;quot;global&amp;quot;, &amp;quot;altitude&amp;quot;, 0)/8.5)}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:SWAP_ 0000000100000005.png|mini|hochkant=2.5|Resultat eines stateFormat]]&lt;br /&gt;
Aus diesen readings kann dann mit stateFormat die gewünschte Darstellung für die Raumübersicht erzeugt werden:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;attr temppress stateFormat {sprintf(&amp;quot;%.1f&amp;quot;,ReadingsVal($name,&amp;quot;temperature&amp;quot;,0)).&amp;quot;°C &amp;quot;.sprintf(&amp;quot;%.1f&amp;quot;,ReadingsVal($name,&amp;quot;pressureNN&amp;quot;,0)).&amp;quot;mbar&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sobald ein SWAP Device mit dem productCode korrekt angelegt wurde, können die Userregister bzw. alle Register aufgelistet werden: &lt;br /&gt;
 get &amp;lt;device&amp;gt; regList&lt;br /&gt;
 get &amp;lt;device&amp;gt; regListALL&lt;br /&gt;
&lt;br /&gt;
und einzelne Register abgefragt und gesetzt werden:&lt;br /&gt;
 set &amp;lt;device&amp;gt; regGet &amp;lt;ID&amp;gt;&lt;br /&gt;
 set &amp;lt;device&amp;gt; regSet &amp;lt;ID&amp;gt; &amp;lt;value&amp;gt;&lt;br /&gt;
Für die Systemregister kann hierzu statt der RegisterID auch der Registername (siehe regListAll) verwendet werden.&lt;br /&gt;
&lt;br /&gt;
==== Neue panStamps in Betrieb nehmen ====&lt;br /&gt;
&#039;&#039;&#039;Info: Das SWAP Modul unterstützt autocreate. Bei der Inbetriebnahme ist autocreate zu aktivieren!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Neue panStamps sollten nur Einer nach dem Anderen in Betrieb genommen werden, da sie zuerst mit einer eindeutigen Device-Adresse (ungleich FF und grösser 01) versehen werden müssen. Bei batteriebetriebenen Sensoren sollte auch das Sendeintervall auf einen sinnvollen Wert gesetzt werden:&lt;br /&gt;
 set &amp;lt;device&amp;gt; regSet 09 &amp;lt;device adresse als 2 stellige hex zahl&amp;gt;&lt;br /&gt;
 set &amp;lt;device&amp;gt; regSet 0A &amp;lt;intervall in sekunden als 4 stellige hex zahl&amp;gt;&lt;br /&gt;
Für Devices im Power-Down-Modus werden diese Kommandos in eine Warteschlange gestellt und übertragen, sobald das Device seine Initialisierungssequenz durchläuft. Hierzu ist nach Absetzen der Kommandos Reset zu drücken oder die Stromquelle erneut zu verbinden.&lt;br /&gt;
&lt;br /&gt;
Das SWAP modul versucht, ein Device mit der default Adresse &amp;lt;code&amp;gt;FF&amp;lt;/code&amp;gt; automatisch auf die erste freie Adresse im Bereich &amp;lt;code&amp;gt;F0&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;FE&amp;lt;/code&amp;gt; zu ändern.&lt;br /&gt;
&lt;br /&gt;
Für batteriebetriebene Devices (genauer: Devices die den Power-Down-Modus unterstützen) wird das Default Sendeintervall von &amp;lt;code&amp;gt;FFFF&amp;lt;/code&amp;gt; zu &amp;lt;code&amp;gt;0384&amp;lt;/code&amp;gt; (900 Sekunden) geändert.&lt;br /&gt;
Es gibt mit bestimmten panstamp lib Versionen das Problem das ein wert von FFFF in 0A zum Überlauf führt und dann ununterbrochen gesendet wird. Im fhem Modul wird versucht das abzufangen. Das funktioniert auf manchen langsamen host systemen (z.B. FritzBox) nicht, weil der panstamp so schnell sendet das fhem so mit dem abarbeiten beschäftigt ist das es selber nicht zum senden kommt.&lt;br /&gt;
Zur Abhilfe kann im sketch in setup() ganz am Anfang  ein&lt;br /&gt;
  EEPROM.write(EEPROM_TX_INTERVAL, 0x55);&lt;br /&gt;
  EEPROM.write(EEPROM_TX_INTERVAL+1, 0x55);&lt;br /&gt;
eingefügt werden und noch mal flashen. Wenn der Sketch damit ein mal durchgelaufen ist können diese beiden Zeilen wieder entfernen und der panstamp noch mal geflasht.&lt;br /&gt;
&lt;br /&gt;
Automatisch gesetzte Werte sollten danach manuell auf die jeweilige Installation angepasst werden.&lt;br /&gt;
&lt;br /&gt;
==== Beispiele ====&lt;br /&gt;
===== Bodenfeuchte =====&lt;br /&gt;
[[Datei:SWAP_ soilmositure-plot.jpg|mini|hochkant=2.5|Bodenfeuchte]]&lt;br /&gt;
&lt;br /&gt;
Der panStamp soilmoisture Sketch aus dem examples Verzeichnis ist mit dem Standard SWAP Modul kompatibel. &lt;br /&gt;
&lt;br /&gt;
Eine für einen Vegetronix sensor angepasste Version kann von [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ sourceforge] heruntergeladen werden. Das Übertragungsintervall ist wie üblich über das regsiter 0A konfigurierbar. Der Sensor wird and GND, D7 für die Versorgungsspannung und A4 für den Messwert angeschlossen.&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;MyBodenfeuchte&amp;gt; stateFormat VWC_A%&lt;br /&gt;
 set &amp;lt;MyBodenfeuchte&amp;gt; userReadings Level0_Voltage {hex(ReadingsVal($name,&amp;quot;0C.0-Moisture_level_0&amp;quot;,&amp;quot;0&amp;quot;))*(3.3/1024)}, VWC_A:0C.0-Moisture_level_0 {sprintf(&amp;quot;%.0f&amp;quot;,(11.6552 * (ReadingsVal($name,&amp;quot;Level0_Voltage&amp;quot;,&amp;quot;0&amp;quot;))**4 + 7.10835 * (ReadingsVal($name,&amp;quot;Level0_Voltage&amp;quot;,&amp;quot;0&amp;quot;))**2 - 0.569557) / ((ReadingsVal($name,&amp;quot;Level0_Voltage&amp;quot;,&amp;quot;0&amp;quot;))**2 + 1))}, voltage:0B-Voltage {hex(ReadingsVal($name,&amp;quot;0B-Voltage&amp;quot;,&amp;quot;0&amp;quot;))*0.001}, battery:0B-Voltage {(ReadingsVal($name,&amp;quot;voltage&amp;quot;,&amp;quot;0&amp;quot;)&amp;lt;1?&amp;quot;low&amp;quot;:&amp;quot;ok&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
Mit einem entsprechend erweiterten Sketch lassen sich auch mehrere Sensoren an einem panStamp auslesen.&lt;br /&gt;
&lt;br /&gt;
=== SWAP_XXXXXXXXXXXXXXXX ===&lt;br /&gt;
Besonders bei Aktoren ist oft eine engere FHEM-Integration sinnvoll, um FHEM Konzepte wie on/off/on-for-timer direkt abzubilden und nicht mehr nur auf die Registerebene und regSet und regGet Kommandos beschränkt zu sein.&lt;br /&gt;
&lt;br /&gt;
Um per autocreate automatisch das passende Modul laden zu können, müssen diese Module nach dem Schema SWAP_XXXXXXXXXXXXXXXX.pm benannt sein wobei XXXXXXXXXXXXXXXX für den jeweiligen productCode steht.&lt;br /&gt;
&lt;br /&gt;
==== SWAP_0000002200000003 ====&lt;br /&gt;
[[Datei:SWAP_0000002200000003.png|mini|rechts|hochkant=2.5|RGB LED Driver Board]]&lt;br /&gt;
Ein FHEM Modul für das modifizierte panStamp RGB LED Driver Board. &lt;br /&gt;
&lt;br /&gt;
Das Board unterstützt RGBW LEDs und lässt sich per Infrarot Fernbedienung, DMX Controller (z.&amp;amp;nbsp;B. als Unterputz Touchpanel) und FHEM bedienen.&lt;br /&gt;
&lt;br /&gt;
Der Funktionsumfang wird in diesem [http://forum.fhem.de/index.php/topic,12487.msg81923.html#msg81923 Forenthread] vorgestellt. Die Hardware für das Board wird [http://forum.fhem.de/index.php/topic,13890.0.html  hier] im FHEM Forum vorgestellt und ein Prototyp ist [http://forum.fhem.de/index.php/topic,12487.msg85777.html#msg85777 hier] zu sehen.&lt;br /&gt;
=====Upate 2014-01-11===== &lt;br /&gt;
Zur Zeit ist Version 2 des Boards in Vorbereiteung. Die Projektseite zur Hardware findet sich [http://itse.homeip.net/projekte/12/6/ hier]. &lt;br /&gt;
&lt;br /&gt;
Demnächst wird eine aktualisiert Version des Fhem Moduls und panStamp Sketches eingecheckt. Eine Übersicht über die dann vorhandene Funktionalität:&lt;br /&gt;
&lt;br /&gt;
was geht:&lt;br /&gt;
* bis zu vier led kanäle (je nach kombination von ir und soft pwm)&lt;br /&gt;
* ir senden&lt;br /&gt;
* ir empfangen&lt;br /&gt;
* messen ob die led versorgung an ist&lt;br /&gt;
* helligkeit eines an A2 angeschlossenen helligkeits sensors&lt;br /&gt;
* konfiguration der dmx basis adresse über das swap register 0x12&lt;br /&gt;
* optional soft on auf letzten wert&lt;br /&gt;
* alles was auch vorher schon ging: dimmen, faden, ir fernbedienungen anlernen, ...&lt;br /&gt;
&lt;br /&gt;
wichtig zu wissen:&lt;br /&gt;
* wenn ir aktiv ist und kein soft pwm lässt sich der 4. kanal nur ein und aus schalten&lt;br /&gt;
* wenn ir aktiv ist muss soft pwm aktiv sein um den 4. kanäle auch zu dimmen&lt;br /&gt;
* es wird nur ein zusätzlicher kanal tatsächlich schon unterstützt. der fünfte kommt noch&lt;br /&gt;
* bei ir senden sind nur die aufrufe für sony und nec tatsächlich eingebaut. die anderen sind aber einfach zu ergänzen&lt;br /&gt;
* beim ir senden sind noch keine Wiederholungen eingebaut. die müssen laut protokoll aber eigentlich sein&lt;br /&gt;
&lt;br /&gt;
was noch kommt:&lt;br /&gt;
* besseres soft pwm&lt;br /&gt;
* mehr konfiguration bezüglich default verhalten. ramp zeiten, delays, ...&lt;br /&gt;
* hsv farb modell um besser zu faden und vor allem um den weiss anteil automatisch auf die weiss leds zu legen&lt;br /&gt;
* die virtuellen channel &lt;br /&gt;
* fhem kompatibles ir senden&lt;br /&gt;
* sofortiges senden von helligkeit und led spannung bei änderung&lt;br /&gt;
* andere ir lib mit sehr viel besserer geräte unterstützung&lt;br /&gt;
&lt;br /&gt;
wie gehabt muss alles über config.h konfiguriert werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== weitrere Screenshots =====&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:SWAP_0000002200000003-internal.png|InternalValues&lt;br /&gt;
File:SWAP_0000002200000003-readings.png|Readings&lt;br /&gt;
File:SWAP_0000002200000003-attributes.png|Attributes&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Arduino Sketches ==&lt;br /&gt;
Zum Flashen der Panstamps wird die Arduino IDE benötigt. Eine Installationsanleitung ist unter folgendem Link zu finden:&lt;br /&gt;
:https://code.google.com/p/panstamp/wiki/firststeps&lt;br /&gt;
&lt;br /&gt;
Für den RGB-Driver sketch sind je nach gewünschtem Funktionsumfang noch folgende libs zu installieren:&lt;br /&gt;
&lt;br /&gt;
* IR lib - https://github.com/shirriff/Arduino-IRremote&lt;br /&gt;
* DMX lib- http://www.mathertel.de/Arduino/DMXSerial.aspx&lt;br /&gt;
&lt;br /&gt;
Wenn DMX genutzt werden soll, muss vorher in der DMX-Lib in der Datei DMXSerial.h die Zeile&lt;br /&gt;
* #define DmxModePin 2     // Arduino pin 2 for controlling the data direction&lt;br /&gt;
in &lt;br /&gt;
* #define DmxModePin 7     // Arduino pin 7 for controlling the data direction&lt;br /&gt;
abgeändert werden.&lt;br /&gt;
&lt;br /&gt;
Die Librarys sollten entweder mit dem entsprechenden Menüpunkt in die IDE integriert werden oder jeweils nach auspacken des zip files als als kompletten ordner im Arduino libraries verzeichnis abgelegt werden (siehe [http://www.arduino.cc/en/Hacking/Libraries)]).&lt;br /&gt;
&lt;br /&gt;
Nun fehlt noch der angepasste rgbdriver-Sketch:&lt;br /&gt;
* Version vom 06.2013: http://forum.fhem.de/index.php?action=dlattach;topic=12487.0;attach=3392&lt;br /&gt;
* Version vom 10.2013: http://forum.fhem.de/index.php?action=dlattach;topic=12487.0;attach=6701&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version des sketches findet sich auf [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ sourceforge].&lt;br /&gt;
&lt;br /&gt;
Welche features der sketch bietet lässt sich im config.h file durch ein- oder auskommentieren der #define ENABLE_... Zeilen festlegen.&lt;br /&gt;
&lt;br /&gt;
Dieser muss in Arduino\libraries\panstamp\examples\sketches entpackt und die rbgdriver.ino gestartet werden. In der Arduino IDE sollte unter Tools-&amp;gt;Board &amp;quot;Arduino Pro or Pro Mini (3.3V, 8MHz) w/ Atmega328&amp;quot; eingestellt sein. Wenn man das boards.txt file von [http://code.google.com/p/panstamp/downloads/detail?name=boards.txt&amp;amp;can=2&amp;amp;q= hier] installiert kann man in der IDE auch direkt PanStamp als plattform auswählen.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.panstamp.com/home panStamp] panStamp Hersteller&lt;br /&gt;
* [http://itse.homeip.net/projekte/12/6/ Projektseite] für das RGB-Multi-Board.&lt;br /&gt;
* [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ rgbdriver sketch] auf sourceforge&lt;br /&gt;
* [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/ soilmoisture sketch]  auf sourceforge&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Interfaces]]&lt;/div&gt;</summary>
		<author><name>Fidel</name></author>
	</entry>
</feed>