<?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=Bgewehr</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=Bgewehr"/>
	<link rel="alternate" type="text/html" href="http://wiki.fhem.de/wiki/Spezial:Beitr%C3%A4ge/Bgewehr"/>
	<updated>2026-04-05T22:42:03Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Homebridge_User_Configs&amp;diff=13293</id>
		<title>Homebridge User Configs</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Homebridge_User_Configs&amp;diff=13293"/>
		<updated>2015-12-20T18:16:42Z</updated>

		<summary type="html">&lt;p&gt;Bgewehr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Eintrag dient zur Sammlung funktionsfähiger Homebridge Configs.&lt;br /&gt;
&lt;br /&gt;
Bitte immer die FHEM Version und Homebridge Version angegeben.&lt;br /&gt;
&lt;br /&gt;
Sehr gute Hinweise gibt es hier: http://www.meintechblog.de/2015/10/mit-siri-und-fhem-das-gesamte-smart-home-per-stimme-steuern/&lt;/div&gt;</summary>
		<author><name>Bgewehr</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=12891</id>
		<title>Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=12891"/>
		<updated>2015-11-15T18:06:42Z</updated>

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

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

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

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

		<summary type="html">&lt;p&gt;Bgewehr: /* fronthemEditor */&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. Möchte man dies umgehen, kann das Attribut &amp;quot;whitelisting&amp;quot; der fronthemDevices auf false gesetzt werden. Das bedeutet dann, dass unabhängig von den whitelisting - Checkboxen das fronthemDevice immer auf alle GADs lesen und schreiben darf.&lt;br /&gt;
&lt;br /&gt;
==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/herrmannj/smartvisu-widgets beziehen&lt;br /&gt;
&lt;br /&gt;
Dank dafür an mworion!&lt;br /&gt;
&lt;br /&gt;
Man muss dazu die uzsu_widget.html in das eigene Verzeichnis in ../pages/.. kopieren und die visu.js und die visu.css in seine Installation integrieren (Achtung, wenn die beiden Dateien schon bestehen, dann muss man das manuell zusammenkopieren!)&lt;br /&gt;
&lt;br /&gt;
Das Widget kann in SmartVISU 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 aus der 99_fronthemUtils.pm (s. u.) an das Reading uzsu des zu schaltenden Device read und write in fhem&lt;br /&gt;
&lt;br /&gt;
3. Den sonstigen UZSU  Code aus der  99_FronthemUtils.pm aus dem http://github.com/herrmannj/fronthem&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>Bgewehr</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=10960</id>
		<title>Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=10960"/>
		<updated>2015-04-10T17:38:58Z</updated>

		<summary type="html">&lt;p&gt;Bgewehr: /* 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 &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/herrmannj/smartvisu-widgets beziehen&lt;br /&gt;
&lt;br /&gt;
Dank dafür an mworion!&lt;br /&gt;
&lt;br /&gt;
Man muss dazu die uzsu_widget.html in das eigene Verzeichnis in ../pages/.. kopieren und die visu.js und die visu.css in seine Installation integrieren (Achtung, wenn die beiden Dateien schon bestehen, dann muss man das manuell zusammenkopieren!)&lt;br /&gt;
&lt;br /&gt;
Das Widget kann in SmartVISU 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 aus der 99_fronthemUtils.pm (s. u.) an das Reading uzsu des zu schaltenden Device read und write in fhem&lt;br /&gt;
&lt;br /&gt;
3. Den sonstigen UZSU  Code aus der  99_FronthemUtils.pm aus dem http://github.com/herrmannj/fronthem&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>Bgewehr</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=10959</id>
		<title>Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=10959"/>
		<updated>2015-04-10T17:32:18Z</updated>

		<summary type="html">&lt;p&gt;Bgewehr: /* 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 &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/herrmannj/smartvisu-widgets beziehen&lt;br /&gt;
&lt;br /&gt;
Dank dafür an mworion!&lt;br /&gt;
&lt;br /&gt;
Man muss dazu die uzsu_widget.html in das eigene Verzeichnis in ../pages/.. kopieren und die visu.js und die visu.css in seine Installation integrieren (Achtung, wenn die beiden Dateien schon bestehen, dann muss man das manuell zusammenkopieren!)&lt;br /&gt;
&lt;br /&gt;
Das Widget kann in SmartVISU 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 aus der 99_fronthemUtils.pm (s. u.) an das Reading uzsu des zu schaltenden Device read und write in fhem&lt;br /&gt;
&lt;br /&gt;
3. Den sonstigen UZSU  Code aus der  99_FronthemUtils.pm aus dem http://github.com/herrmannj/fronthem&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>Bgewehr</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem_Installation&amp;diff=10505</id>
		<title>Fronthem Installation</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem_Installation&amp;diff=10505"/>
		<updated>2015-03-14T21:19:51Z</updated>

		<summary type="html">&lt;p&gt;Bgewehr: /* lighttpd */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Einen Überblick über Fronthem findet man auf der Seite zu [[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. lighttpd oder Apache oder nginx) installiert sein.&lt;br /&gt;
&lt;br /&gt;
==== lighttpd ====&lt;br /&gt;
&lt;br /&gt;
    sudo apt-get update&lt;br /&gt;
    sudo apt-get install lighttpd&lt;br /&gt;
    sudo apt-get install php5-common php5-cgi php5&lt;br /&gt;
    cd /var/www&lt;br /&gt;
    sudo lighty-enable-mod fastcgi-php&lt;br /&gt;
    sudo service lighttpd force-reload&lt;br /&gt;
    sudo chown www-data:www-data /var/www&lt;br /&gt;
    sudo chmod 775 /var/www&lt;br /&gt;
    sudo usermod -a -G www-data pi&lt;br /&gt;
    sudo usermod -a -G www-data bananapi&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-cleaninstall /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: {{Randnotiz|RNTyp=y|RNText=Wenn ihr hier einen Fehler erhaltet und euch nicht die SmartVisu Seite angezeigt wird müsst ihr die Datei &amp;quot;config.ini.default&amp;quot; zu &amp;quot;config.ini&amp;quot; umbenennen, am besten erstellt ihr eine neue Kopie wie folgt:&lt;br /&gt;
&amp;lt;code&amp;gt;$ sudo cp /var/www/smartvisu/config.ini.default /var/www/smartvisu/config.ini&amp;lt;/code&amp;gt;&lt;br /&gt;
}}&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 anlegen ==&lt;br /&gt;
*  im Ordner &amp;quot;&#039;&#039;/var/www/smartVISU/pages&#039;&#039;&amp;quot; einen neuen Ordner &amp;quot;&#039;&#039;MeinHaus&amp;quot;&#039;&#039; anlegen.&lt;br /&gt;
*  aus dem Ordner &amp;quot;&#039;&#039;../pages/_template&#039;&#039;&amp;quot; alles in den neuen Ordner (&amp;quot;&#039;&#039;/var/www/smartVISU/pages/MeinHaus&amp;quot;&#039;&#039;) kopieren.&lt;br /&gt;
*  &amp;quot;&#039;&#039;rooms_menu.html&#039;&#039;&amp;quot; an eigene Gegebenheiten anpassen hierzu dienen die &amp;quot;_template-Dateien&amp;quot; als Orientierung.&lt;br /&gt;
* alle rooms anlegen durch Kopien des Beispielraumes (&#039;&#039;room_sleeping.html&#039;&#039;) und passende icons und Überschriften verteilen. ([http://www.smartvisu.de/docu/2.7/index.php?page=design/design_icons SmartVisu Icons])&lt;br /&gt;
* SmartVISU nutzt [http://twig.sensiolabs.org/ Twig] als Template engine und die Seiten bestehen aus Blöcken und Widgets, die immer in doppelten geschweiften Klammern stehen &amp;lt;nowiki&amp;gt;{{ ... }}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* Widget Syntax auf [http://www.smartvisu.de/docu/2.7/index.php SmartVISU Doku] nachschlagen und kopieren.&lt;br /&gt;
* innerhalb eines Raums zwischen {% block content %} und {% endblock %} als Beispiel folgenden Abschnitt einfügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;&amp;lt;img class=&amp;quot;icon&amp;quot; src=&#039;{{ icon0 }}scene_livingroom.png&#039;/&amp;gt;Wohnzimmer&amp;lt;/h1&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;preblock&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;block&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;set-2&amp;quot; data-role=&amp;quot;collapsible-set&amp;quot; data-theme=&amp;quot;c&amp;quot; data-content-theme=&amp;quot;a&amp;quot; data-mini=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div data-role=&amp;quot;collapsible&amp;quot; data-collapsed=&amp;quot;false&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;h3&amp;gt;Licht&amp;lt;/h3&amp;gt;&lt;br /&gt;
          &amp;lt;table width=&amp;quot;90%&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;tr&amp;gt;&amp;lt;td align=&amp;quot;left&amp;quot; width=&amp;quot;100px&amp;quot;&amp;gt;&amp;amp;nbsp;{{ basic.switch(&#039;Leselampe&#039;, &#039;Leselampe.sw&#039;, icon1~&#039;light_floor_lamp.png&#039;, icon0~&#039;light_floor_lamp.png&#039;) }}&amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;Leselampe&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/table&amp;gt;&lt;br /&gt;
        &amp;lt;/div&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;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Datei speichern und checken, dass die Rechte mindestens auf &amp;quot;755&amp;quot; stehen, ansonsten  mit &amp;quot;sudo chmod 755&amp;quot; korrigieren.&lt;br /&gt;
* smartVISU aufrufen, Zahnrad = configmenü, eigenes Haus auswählen (Ordnername!) und als Treiber DOMOTIGA (oder auch FHEM) mit Port 2121 mit der IP des FHEM-Servers&lt;br /&gt;
* speichern der Config nicht vergessen (Save ganz unten!)&lt;br /&gt;
* jetzt ist es wichtig, dass ihr einmal eure Seiten in Smartvisu aufruft damit im Hintergrund die GADs erstellt werden.&lt;br /&gt;
* In Fhem eure fronthemDevice Detailansicht öffnen&lt;br /&gt;
* Nun seht ihr eure GADs, aus der gadliste ein gad auswählen (hier: &amp;quot;Leselampe.sw&amp;quot; wie im obigen Code-Beispiel definiert.) und die Parameter vergeben:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    device: &amp;lt;fhem-Name-des-fhem-devices&amp;gt; (in diesem Fall die Leselampe.sw)&lt;br /&gt;
    reading: state&lt;br /&gt;
    converter: OnOff&lt;br /&gt;
    cmd set: state&lt;br /&gt;
    write: ja (haken setzen)&lt;br /&gt;
    read: ja (haken setzen)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
: &amp;quot;state&amp;quot; immer klein schreiben und speichern nicht vergessen!&lt;br /&gt;
* Die Settings für das Device gelten für alle Endgeräte, aber die read/write Rechte müssen für jedes Endgerät separat gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
== Verbindung smartVISU mit Fhem ==&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>Bgewehr</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem_Installation&amp;diff=10504</id>
		<title>Fronthem Installation</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem_Installation&amp;diff=10504"/>
		<updated>2015-03-14T21:00:40Z</updated>

		<summary type="html">&lt;p&gt;Bgewehr: /* Allgemein */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Einen Überblick über Fronthem findet man auf der Seite zu [[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. lighttpd oder Apache oder nginx) installiert sein.&lt;br /&gt;
&lt;br /&gt;
==== lighttpd ====&lt;br /&gt;
to be done&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-cleaninstall /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: {{Randnotiz|RNTyp=y|RNText=Wenn ihr hier einen Fehler erhaltet und euch nicht die SmartVisu Seite angezeigt wird müsst ihr die Datei &amp;quot;config.ini.default&amp;quot; zu &amp;quot;config.ini&amp;quot; umbenennen, am besten erstellt ihr eine neue Kopie wie folgt:&lt;br /&gt;
&amp;lt;code&amp;gt;$ sudo cp /var/www/smartvisu/config.ini.default /var/www/smartvisu/config.ini&amp;lt;/code&amp;gt;&lt;br /&gt;
}}&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 anlegen ==&lt;br /&gt;
*  im Ordner &amp;quot;&#039;&#039;/var/www/smartVISU/pages&#039;&#039;&amp;quot; einen neuen Ordner &amp;quot;&#039;&#039;MeinHaus&amp;quot;&#039;&#039; anlegen.&lt;br /&gt;
*  aus dem Ordner &amp;quot;&#039;&#039;../pages/_template&#039;&#039;&amp;quot; alles in den neuen Ordner (&amp;quot;&#039;&#039;/var/www/smartVISU/pages/MeinHaus&amp;quot;&#039;&#039;) kopieren.&lt;br /&gt;
*  &amp;quot;&#039;&#039;rooms_menu.html&#039;&#039;&amp;quot; an eigene Gegebenheiten anpassen hierzu dienen die &amp;quot;_template-Dateien&amp;quot; als Orientierung.&lt;br /&gt;
* alle rooms anlegen durch Kopien des Beispielraumes (&#039;&#039;room_sleeping.html&#039;&#039;) und passende icons und Überschriften verteilen. ([http://www.smartvisu.de/docu/2.7/index.php?page=design/design_icons SmartVisu Icons])&lt;br /&gt;
* SmartVISU nutzt [http://twig.sensiolabs.org/ Twig] als Template engine und die Seiten bestehen aus Blöcken und Widgets, die immer in doppelten geschweiften Klammern stehen &amp;lt;nowiki&amp;gt;{{ ... }}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* Widget Syntax auf [http://www.smartvisu.de/docu/2.7/index.php SmartVISU Doku] nachschlagen und kopieren.&lt;br /&gt;
* innerhalb eines Raums zwischen {% block content %} und {% endblock %} als Beispiel folgenden Abschnitt einfügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;&amp;lt;img class=&amp;quot;icon&amp;quot; src=&#039;{{ icon0 }}scene_livingroom.png&#039;/&amp;gt;Wohnzimmer&amp;lt;/h1&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;preblock&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;block&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;set-2&amp;quot; data-role=&amp;quot;collapsible-set&amp;quot; data-theme=&amp;quot;c&amp;quot; data-content-theme=&amp;quot;a&amp;quot; data-mini=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div data-role=&amp;quot;collapsible&amp;quot; data-collapsed=&amp;quot;false&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;h3&amp;gt;Licht&amp;lt;/h3&amp;gt;&lt;br /&gt;
          &amp;lt;table width=&amp;quot;90%&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;tr&amp;gt;&amp;lt;td align=&amp;quot;left&amp;quot; width=&amp;quot;100px&amp;quot;&amp;gt;&amp;amp;nbsp;{{ basic.switch(&#039;Leselampe&#039;, &#039;Leselampe.sw&#039;, icon1~&#039;light_floor_lamp.png&#039;, icon0~&#039;light_floor_lamp.png&#039;) }}&amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;Leselampe&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/table&amp;gt;&lt;br /&gt;
        &amp;lt;/div&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;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Datei speichern und checken, dass die Rechte mindestens auf &amp;quot;755&amp;quot; stehen, ansonsten  mit &amp;quot;sudo chmod 755&amp;quot; korrigieren.&lt;br /&gt;
* smartVISU aufrufen, Zahnrad = configmenü, eigenes Haus auswählen (Ordnername!) und als Treiber DOMOTIGA (oder auch FHEM) mit Port 2121 mit der IP des FHEM-Servers&lt;br /&gt;
* speichern der Config nicht vergessen (Save ganz unten!)&lt;br /&gt;
* jetzt ist es wichtig, dass ihr einmal eure Seiten in Smartvisu aufruft damit im Hintergrund die GADs erstellt werden.&lt;br /&gt;
* In Fhem eure fronthemDevice Detailansicht öffnen&lt;br /&gt;
* Nun seht ihr eure GADs, aus der gadliste ein gad auswählen (hier: &amp;quot;Leselampe.sw&amp;quot; wie im obigen Code-Beispiel definiert.) und die Parameter vergeben:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    device: &amp;lt;fhem-Name-des-fhem-devices&amp;gt; (in diesem Fall die Leselampe.sw)&lt;br /&gt;
    reading: state&lt;br /&gt;
    converter: OnOff&lt;br /&gt;
    cmd set: state&lt;br /&gt;
    write: ja (haken setzen)&lt;br /&gt;
    read: ja (haken setzen)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
: &amp;quot;state&amp;quot; immer klein schreiben und speichern nicht vergessen!&lt;br /&gt;
* Die Settings für das Device gelten für alle Endgeräte, aber die read/write Rechte müssen für jedes Endgerät separat gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
== Verbindung smartVISU mit Fhem ==&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>Bgewehr</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem_Installation&amp;diff=10503</id>
		<title>Fronthem Installation</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem_Installation&amp;diff=10503"/>
		<updated>2015-03-14T20:57:45Z</updated>

		<summary type="html">&lt;p&gt;Bgewehr: /* Eigenes smartVISU Projekt anlegen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Einen Überblick über Fronthem findet man auf der Seite zu [[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-cleaninstall /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: {{Randnotiz|RNTyp=y|RNText=Wenn ihr hier einen Fehler erhaltet und euch nicht die SmartVisu Seite angezeigt wird müsst ihr die Datei &amp;quot;config.ini.default&amp;quot; zu &amp;quot;config.ini&amp;quot; umbenennen, am besten erstellt ihr eine neue Kopie wie folgt:&lt;br /&gt;
&amp;lt;code&amp;gt;$ sudo cp /var/www/smartvisu/config.ini.default /var/www/smartvisu/config.ini&amp;lt;/code&amp;gt;&lt;br /&gt;
}}&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 anlegen ==&lt;br /&gt;
*  im Ordner &amp;quot;&#039;&#039;/var/www/smartVISU/pages&#039;&#039;&amp;quot; einen neuen Ordner &amp;quot;&#039;&#039;MeinHaus&amp;quot;&#039;&#039; anlegen.&lt;br /&gt;
*  aus dem Ordner &amp;quot;&#039;&#039;../pages/_template&#039;&#039;&amp;quot; alles in den neuen Ordner (&amp;quot;&#039;&#039;/var/www/smartVISU/pages/MeinHaus&amp;quot;&#039;&#039;) kopieren.&lt;br /&gt;
*  &amp;quot;&#039;&#039;rooms_menu.html&#039;&#039;&amp;quot; an eigene Gegebenheiten anpassen hierzu dienen die &amp;quot;_template-Dateien&amp;quot; als Orientierung.&lt;br /&gt;
* alle rooms anlegen durch Kopien des Beispielraumes (&#039;&#039;room_sleeping.html&#039;&#039;) und passende icons und Überschriften verteilen. ([http://www.smartvisu.de/docu/2.7/index.php?page=design/design_icons SmartVisu Icons])&lt;br /&gt;
* SmartVISU nutzt [http://twig.sensiolabs.org/ Twig] als Template engine und die Seiten bestehen aus Blöcken und Widgets, die immer in doppelten geschweiften Klammern stehen &amp;lt;nowiki&amp;gt;{{ ... }}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* Widget Syntax auf [http://www.smartvisu.de/docu/2.7/index.php SmartVISU Doku] nachschlagen und kopieren.&lt;br /&gt;
* innerhalb eines Raums zwischen {% block content %} und {% endblock %} als Beispiel folgenden Abschnitt einfügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;&amp;lt;img class=&amp;quot;icon&amp;quot; src=&#039;{{ icon0 }}scene_livingroom.png&#039;/&amp;gt;Wohnzimmer&amp;lt;/h1&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;preblock&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;block&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;set-2&amp;quot; data-role=&amp;quot;collapsible-set&amp;quot; data-theme=&amp;quot;c&amp;quot; data-content-theme=&amp;quot;a&amp;quot; data-mini=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div data-role=&amp;quot;collapsible&amp;quot; data-collapsed=&amp;quot;false&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;h3&amp;gt;Licht&amp;lt;/h3&amp;gt;&lt;br /&gt;
          &amp;lt;table width=&amp;quot;90%&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;tr&amp;gt;&amp;lt;td align=&amp;quot;left&amp;quot; width=&amp;quot;100px&amp;quot;&amp;gt;&amp;amp;nbsp;{{ basic.switch(&#039;Leselampe&#039;, &#039;Leselampe.sw&#039;, icon1~&#039;light_floor_lamp.png&#039;, icon0~&#039;light_floor_lamp.png&#039;) }}&amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;Leselampe&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/table&amp;gt;&lt;br /&gt;
        &amp;lt;/div&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;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Datei speichern und checken, dass die Rechte mindestens auf &amp;quot;755&amp;quot; stehen, ansonsten  mit &amp;quot;sudo chmod 755&amp;quot; korrigieren.&lt;br /&gt;
* smartVISU aufrufen, Zahnrad = configmenü, eigenes Haus auswählen (Ordnername!) und als Treiber DOMOTIGA (oder auch FHEM) mit Port 2121 mit der IP des FHEM-Servers&lt;br /&gt;
* speichern der Config nicht vergessen (Save ganz unten!)&lt;br /&gt;
* jetzt ist es wichtig, dass ihr einmal eure Seiten in Smartvisu aufruft damit im Hintergrund die GADs erstellt werden.&lt;br /&gt;
* In Fhem eure fronthemDevice Detailansicht öffnen&lt;br /&gt;
* Nun seht ihr eure GADs, aus der gadliste ein gad auswählen (hier: &amp;quot;Leselampe.sw&amp;quot; wie im obigen Code-Beispiel definiert.) und die Parameter vergeben:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    device: &amp;lt;fhem-Name-des-fhem-devices&amp;gt; (in diesem Fall die Leselampe.sw)&lt;br /&gt;
    reading: state&lt;br /&gt;
    converter: OnOff&lt;br /&gt;
    cmd set: state&lt;br /&gt;
    write: ja (haken setzen)&lt;br /&gt;
    read: ja (haken setzen)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
: &amp;quot;state&amp;quot; immer klein schreiben und speichern nicht vergessen!&lt;br /&gt;
* Die Settings für das Device gelten für alle Endgeräte, aber die read/write Rechte müssen für jedes Endgerät separat gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
== Verbindung smartVISU mit Fhem ==&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>Bgewehr</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=10006</id>
		<title>Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=10006"/>
		<updated>2015-02-10T20:59:12Z</updated>

		<summary type="html">&lt;p&gt;Bgewehr: /* 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>Bgewehr</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=9921</id>
		<title>Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=9921"/>
		<updated>2015-02-07T17:08:59Z</updated>

		<summary type="html">&lt;p&gt;Bgewehr: /* 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;
&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;
	  &lt;br /&gt;
	  fhem(&#039;delete wdt_&#039;.$device.&#039;_uzsu&#039;.$i);&lt;br /&gt;
	  fhem(&#039;define wdt_&#039;.$device.&#039;_uzsu&#039;.$i.&#039; WeekdayTimer &#039;.$device.&#039; en &#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;
	  if (($uzsu-&amp;gt;{active}) &amp;amp;&amp;amp; ($uzsu-&amp;gt;{list}[$i]-&amp;gt;{active})) {&lt;br /&gt;
  		fhem(&#039;attr wdt_&#039;.$device.&#039;_uzsu&#039;.$i.&#039; disable 0&#039;);&lt;br /&gt;
	  } else {&lt;br /&gt;
  		fhem(&#039;attr wdt_&#039;.$device.&#039;_uzsu&#039;.$i.&#039; disable 1&#039;);&lt;br /&gt;
  	  }&lt;br /&gt;
  }   &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>Bgewehr</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=9913</id>
		<title>Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=9913"/>
		<updated>2015-02-07T10:55:28Z</updated>

		<summary type="html">&lt;p&gt;Bgewehr: /* 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 setreading &amp;lt;device&amp;gt; uzsu &amp;quot;&amp;quot; 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;
&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;
	  &lt;br /&gt;
	  fhem(&#039;delete wdt_&#039;.$device.&#039;_uzsu&#039;.$i);&lt;br /&gt;
	  fhem(&#039;define wdt_&#039;.$device.&#039;_uzsu&#039;.$i.&#039; WeekdayTimer &#039;.$device.&#039; en &#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;
	  if (($uzsu-&amp;gt;{active}) &amp;amp;&amp;amp; ($uzsu-&amp;gt;{list}[$i]-&amp;gt;{active})) {&lt;br /&gt;
  		fhem(&#039;attr wdt_&#039;.$device.&#039;_uzsu&#039;.$i.&#039; disable 0&#039;);&lt;br /&gt;
	  } else {&lt;br /&gt;
  		fhem(&#039;attr wdt_&#039;.$device.&#039;_uzsu&#039;.$i.&#039; disable 1&#039;);&lt;br /&gt;
  	  }&lt;br /&gt;
  }   &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>Bgewehr</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=9912</id>
		<title>Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=9912"/>
		<updated>2015-02-07T10:15:31Z</updated>

		<summary type="html">&lt;p&gt;Bgewehr: /* 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;
1. je ein Reading uzsu an dem zu schaltenden Device, das man mit setreading &amp;lt;device&amp;gt; uzsu &amp;quot;&amp;quot; erzeugen kann.&lt;br /&gt;
&lt;br /&gt;
2. eine Anbindung des uzsu-GAD per UZSU Converter an das Reading uzsu read und write in fhem&lt;br /&gt;
&lt;br /&gt;
3. für 2) braucht man 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;
&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;
	  &lt;br /&gt;
	  fhem(&#039;delete wdt_&#039;.$device.&#039;_uzsu&#039;.$i);&lt;br /&gt;
	  fhem(&#039;define wdt_&#039;.$device.&#039;_uzsu&#039;.$i.&#039; WeekdayTimer &#039;.$device.&#039; en &#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;
	  if (($uzsu-&amp;gt;{active}) &amp;amp;&amp;amp; ($uzsu-&amp;gt;{list}[$i]-&amp;gt;{active})) {&lt;br /&gt;
  		fhem(&#039;attr wdt_&#039;.$device.&#039;_uzsu&#039;.$i.&#039; disable 0&#039;);&lt;br /&gt;
	  } else {&lt;br /&gt;
  		fhem(&#039;attr wdt_&#039;.$device.&#039;_uzsu&#039;.$i.&#039; disable 1&#039;);&lt;br /&gt;
  	  }&lt;br /&gt;
  }   &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;
###############################################################################&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>Bgewehr</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=9911</id>
		<title>Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=9911"/>
		<updated>2015-02-07T10:06:52Z</updated>

		<summary type="html">&lt;p&gt;Bgewehr: /* 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, 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;
Dieses kann in SmartVISU direkt 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})&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;
1. je ein Reading uzsu an dem zu schaltenden Device, das man mit setreading &amp;lt;device&amp;gt; uzsu &amp;quot;&amp;quot; erzeugen kann.&lt;br /&gt;
2. eine Anbindung des uzsu-GAD per UZSU Converter an das Reading uzsu read und write&lt;br /&gt;
3. für 2) braucht man 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;
&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;
	  &lt;br /&gt;
	  fhem(&#039;delete wdt_&#039;.$device.&#039;_uzsu&#039;.$i);&lt;br /&gt;
	  fhem(&#039;define wdt_&#039;.$device.&#039;_uzsu&#039;.$i.&#039; WeekdayTimer &#039;.$device.&#039; en &#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;
	  if (($uzsu-&amp;gt;{active}) &amp;amp;&amp;amp; ($uzsu-&amp;gt;{list}[$i]-&amp;gt;{active})) {&lt;br /&gt;
  		fhem(&#039;attr wdt_&#039;.$device.&#039;_uzsu&#039;.$i.&#039; disable 0&#039;);&lt;br /&gt;
	  } else {&lt;br /&gt;
  		fhem(&#039;attr wdt_&#039;.$device.&#039;_uzsu&#039;.$i.&#039; disable 1&#039;);&lt;br /&gt;
  	  }&lt;br /&gt;
  }   &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;
###############################################################################&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>Bgewehr</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=9892</id>
		<title>Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=9892"/>
		<updated>2015-02-05T14:38:22Z</updated>

		<summary type="html">&lt;p&gt;Bgewehr: /* 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, 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;
Dieses kann in SmartVISU direkt 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})&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;
1. je ein Reading uzsu an dem zu schaltenden Device, das man mit setreading &amp;lt;device&amp;gt; uzsu &amp;quot;&amp;quot; erzeugen kann.&lt;br /&gt;
2. eine Anbindung des uzsu-GAD per UZSU Converter an das Reading uzsu read und write&lt;br /&gt;
3. für 2) braucht man 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;
#&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;
&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;
	  &lt;br /&gt;
	  fhem(&#039;delete wdt_&#039;.$device.&#039;_uzsu&#039;.$i);&lt;br /&gt;
	  fhem(&#039;define wdt_&#039;.$device.&#039;_uzsu&#039;.$i.&#039; WeekdayTimer &#039;.$device.&#039; en &#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;
	  if (($uzsu-&amp;gt;{active}) &amp;amp;&amp;amp; ($uzsu-&amp;gt;{list}[$i]-&amp;gt;{active})) {&lt;br /&gt;
  		fhem(&#039;attr wdt_&#039;.$device.&#039;_uzsu&#039;.$i.&#039; disable 0&#039;);&lt;br /&gt;
	  } else {&lt;br /&gt;
  		fhem(&#039;attr wdt_&#039;.$device.&#039;_uzsu&#039;.$i.&#039; disable 1&#039;);&lt;br /&gt;
  	  }&lt;br /&gt;
  }   &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Package fronthem:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&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>Bgewehr</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=9891</id>
		<title>Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=9891"/>
		<updated>2015-02-05T14:35:07Z</updated>

		<summary type="html">&lt;p&gt;Bgewehr: /* 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 das uzsu_widget.html, die visu.js und ide visu.css in seine Installation integrieren (Achtung, wenn die beiden Dateien schon bestehen, dann muss man manuell zusammenkopieren!)&lt;br /&gt;
&lt;br /&gt;
Dieses kann in SmartVISU direkt eingebunden werden:&lt;br /&gt;
&lt;br /&gt;
(für ein Ergebnis {&#039;on&#039;,&#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;, &#039;on&#039;, &#039;off&#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})&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;
1. je ein Reading uzsu an dem zu schaltenden Device, das man mit setreading &amp;lt;device&amp;gt; uzsu &amp;quot;&amp;quot; erzeugen kann.&lt;br /&gt;
2. eine Anbindung per UZSU Converter an das uzsu-GAD an das Reading uzsu read und write&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;
#&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;
&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;
	  &lt;br /&gt;
	  fhem(&#039;delete wdt_&#039;.$device.&#039;_uzsu&#039;.$i);&lt;br /&gt;
	  fhem(&#039;define wdt_&#039;.$device.&#039;_uzsu&#039;.$i.&#039; WeekdayTimer &#039;.$device.&#039; en &#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;
	  if (($uzsu-&amp;gt;{active}) &amp;amp;&amp;amp; ($uzsu-&amp;gt;{list}[$i]-&amp;gt;{active})) {&lt;br /&gt;
  		fhem(&#039;attr wdt_&#039;.$device.&#039;_uzsu&#039;.$i.&#039; disable 0&#039;);&lt;br /&gt;
	  } else {&lt;br /&gt;
  		fhem(&#039;attr wdt_&#039;.$device.&#039;_uzsu&#039;.$i.&#039; disable 1&#039;);&lt;br /&gt;
  	  }&lt;br /&gt;
  }   &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Package fronthem:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&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.&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>Bgewehr</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=9890</id>
		<title>Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=9890"/>
		<updated>2015-02-05T14:34:33Z</updated>

		<summary type="html">&lt;p&gt;Bgewehr: /* 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 das uzsu_widget.html, die visu.js und ide visu.css in seine Installation integrieren (Achtung, wenn die beiden Dateien schon bestehen, dann muss man manuell zusammenkopieren!)&lt;br /&gt;
&lt;br /&gt;
Dieses kann in SmartVISU direkt eingebunden werden:&lt;br /&gt;
&lt;br /&gt;
(für ein Ergebnis {&#039;on&#039;,&#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;, &#039;on&#039;, &#039;off&#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})&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;
1. je ein Reading uzsu an dem zu schaltenden Device, das man mit setreading &amp;lt;device&amp;gt; uzsu &amp;quot;&amp;quot; erzeugen kann.&lt;br /&gt;
2. eine Anbindung per UZSU Converter an das uzsu-GAD an das Reading uzsu read und write&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;
#&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;
&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;
	  &lt;br /&gt;
	  fhem(&#039;delete wdt_&#039;.$device.&#039;_uzsu&#039;.$i);&lt;br /&gt;
	  fhem(&#039;define wdt_&#039;.$device.&#039;_uzsu&#039;.$i.&#039; WeekdayTimer &#039;.$device.&#039; en &#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;
	  if (($uzsu-&amp;gt;{active}) &amp;amp;&amp;amp; ($uzsu-&amp;gt;{list}[$i]-&amp;gt;{active})) {&lt;br /&gt;
  		fhem(&#039;attr wdt_&#039;.$device.&#039;_uzsu&#039;.$i.&#039; disable 0&#039;);&lt;br /&gt;
	  } else {&lt;br /&gt;
  		fhem(&#039;attr wdt_&#039;.$device.&#039;_uzsu&#039;.$i.&#039; disable 1&#039;);&lt;br /&gt;
  	  }&lt;br /&gt;
  }   &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Package fronthem:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&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.&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>Bgewehr</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=9889</id>
		<title>Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=9889"/>
		<updated>2015-02-05T14:23:54Z</updated>

		<summary type="html">&lt;p&gt;Bgewehr: /* 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 das uzsu_widget.html, die visu.js und ide visu.css in seine Installation integrieren (Achtung, wenn die beiden Dateien schon bestehen, dann muss man manuell zusammenkopieren!)&lt;br /&gt;
&lt;br /&gt;
Dieses kann in SmartVISU direkt eingebunden werden:&lt;br /&gt;
&lt;br /&gt;
(für ein Ergebnis {&#039;on&#039;,&#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;, &#039;on&#039;, &#039;off&#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})&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;
1. je ein Reading uzsu an dem zu schaltenden Device, das man mit setreading &amp;lt;device&amp;gt; uzsu &amp;quot;&amp;quot; erzeugen kann.&lt;br /&gt;
2. eine Anbindung per UZSU Converter an das uzsu-GAD an das Reading uzsu read und write&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;
#&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;
&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;
	  &lt;br /&gt;
	  fhem(&#039;delete wdt_&#039;.$device.&#039;_uzsu&#039;.$i);&lt;br /&gt;
	  fhem(&#039;define wdt_&#039;.$device.&#039;_uzsu&#039;.$i.&#039; WeekdayTimer &#039;.$device.&#039; en &#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;
	  if (($uzsu-&amp;gt;{active}) &amp;amp;&amp;amp; ($uzsu-&amp;gt;{list}[$i]-&amp;gt;{active})) {&lt;br /&gt;
  		fhem(&#039;attr wdt_&#039;.$device.&#039;_uzsu&#039;.$i.&#039; disable 0&#039;);&lt;br /&gt;
	  } else {&lt;br /&gt;
  		fhem(&#039;attr wdt_&#039;.$device.&#039;_uzsu&#039;.$i.&#039; disable 1&#039;);&lt;br /&gt;
  	  }&lt;br /&gt;
  }   &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Package fronthem:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&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.&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>Bgewehr</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=9888</id>
		<title>Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=9888"/>
		<updated>2015-02-05T14:16:05Z</updated>

		<summary type="html">&lt;p&gt;Bgewehr: /* 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;
Dieses kann in SmartVISU direkt eingebunden werden:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
{{ visu.uzsu_icon(id~&#039;UZSU&#039;, gad_uzsu, &#039;&#039;, &#039;&#039;, &#039;&#039;, &#039;&#039;, &#039;text&#039;, &#039;on&#039;, &#039;off&#039;) }}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die Antwort des Widgets in fhem zu verarbeiten, benötigt man &lt;br /&gt;
1. je ein Reading uzsu an dem zu schaltenden Device, das man mit setreading &amp;lt;device&amp;gt; uzsu &amp;quot;&amp;quot; erzeugen kann.&lt;br /&gt;
2. eine Anbindung per UZSU Converter an das uzsu-GAD an das Reading uzsu read und write&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;
#&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;
&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;
	  &lt;br /&gt;
	  fhem(&#039;delete wdt_&#039;.$device.&#039;_uzsu&#039;.$i);&lt;br /&gt;
	  fhem(&#039;define wdt_&#039;.$device.&#039;_uzsu&#039;.$i.&#039; WeekdayTimer &#039;.$device.&#039; en &#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;
	  if (($uzsu-&amp;gt;{active}) &amp;amp;&amp;amp; ($uzsu-&amp;gt;{list}[$i]-&amp;gt;{active})) {&lt;br /&gt;
  		fhem(&#039;attr wdt_&#039;.$device.&#039;_uzsu&#039;.$i.&#039; disable 0&#039;);&lt;br /&gt;
	  } else {&lt;br /&gt;
  		fhem(&#039;attr wdt_&#039;.$device.&#039;_uzsu&#039;.$i.&#039; disable 1&#039;);&lt;br /&gt;
  	  }&lt;br /&gt;
  }   &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Package fronthem:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&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.&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>Bgewehr</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=9887</id>
		<title>Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=9887"/>
		<updated>2015-02-05T14:08:02Z</updated>

		<summary type="html">&lt;p&gt;Bgewehr: /* 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;
Dieses kann in SmartVISU direkt eingebunden werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{ visu.uzsu_icon(id~&#039;UZSU&#039;, gad_uzsu, &#039;&#039;, &#039;&#039;, &#039;&#039;, &#039;&#039;, &#039;text&#039;, &#039;on&#039;, &#039;off&#039;) }}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die Antwort des Widgets in fhem zu verarbeiten, benötigt man &lt;br /&gt;
1. je ein Reading uzsu an dem zu schaltenden Device, das man mit setreading &amp;lt;device&amp;gt; uzsu &amp;quot;&amp;quot; erzeugen kann.&lt;br /&gt;
2. eine Anbindung per UZSU Converter an das uzsu-GAD an das Reading uzsu read und write&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;
###############################################################################&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;
&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;
	  &lt;br /&gt;
	  fhem(&#039;delete wdt_&#039;.$device.&#039;_uzsu&#039;.$i);&lt;br /&gt;
	  fhem(&#039;define wdt_&#039;.$device.&#039;_uzsu&#039;.$i.&#039; WeekdayTimer &#039;.$device.&#039; en &#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;
	  if (($uzsu-&amp;gt;{active}) &amp;amp;&amp;amp; ($uzsu-&amp;gt;{list}[$i]-&amp;gt;{active})) {&lt;br /&gt;
  		fhem(&#039;attr wdt_&#039;.$device.&#039;_uzsu&#039;.$i.&#039; disable 0&#039;);&lt;br /&gt;
	  } else {&lt;br /&gt;
  		fhem(&#039;attr wdt_&#039;.$device.&#039;_uzsu&#039;.$i.&#039; disable 1&#039;);&lt;br /&gt;
  	  }&lt;br /&gt;
  }   &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Im Package fronthem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;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;
&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.&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;
define UZSU notify .*:uzsu:.* { UZSU_execute($NAME, $EVTPART1) }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Voila!&lt;/div&gt;</summary>
		<author><name>Bgewehr</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=9886</id>
		<title>Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=9886"/>
		<updated>2015-02-05T14:01:00Z</updated>

		<summary type="html">&lt;p&gt;Bgewehr: /* 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;
Dieses kann in SmartVISU direkt eingebunden werden:&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
{{ visu.uzsu_icon(id~&#039;UZSU&#039;, gad_uzsu, &#039;&#039;, &#039;&#039;, &#039;&#039;, &#039;&#039;, &#039;text&#039;, &#039;on&#039;, &#039;off&#039;) }}&lt;br /&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;
1. je ein Reading uzsu an dem zu schaltenden Device, das man mit setreading &amp;lt;device&amp;gt; uzsu &amp;quot;&amp;quot; erzeugen kann.&lt;br /&gt;
2. eine Anbindung per UZSU Converter an das uzsu-GAD an das Reading uzsu read und write&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;
----&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;
&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;
	  &lt;br /&gt;
	  fhem(&#039;delete wdt_&#039;.$device.&#039;_uzsu&#039;.$i);&lt;br /&gt;
	  fhem(&#039;define wdt_&#039;.$device.&#039;_uzsu&#039;.$i.&#039; WeekdayTimer &#039;.$device.&#039; en &#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;
	  if (($uzsu-&amp;gt;{active}) &amp;amp;&amp;amp; ($uzsu-&amp;gt;{list}[$i]-&amp;gt;{active})) {&lt;br /&gt;
  		fhem(&#039;attr wdt_&#039;.$device.&#039;_uzsu&#039;.$i.&#039; disable 0&#039;);&lt;br /&gt;
	  } else {&lt;br /&gt;
  		fhem(&#039;attr wdt_&#039;.$device.&#039;_uzsu&#039;.$i.&#039; disable 1&#039;);&lt;br /&gt;
  	  }&lt;br /&gt;
  }   &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Im Package fronthem:&lt;br /&gt;
&lt;br /&gt;
----&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;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieser Code erzeugt aus den Einstellungen im Widget entsprechende WeekdayTimer in fhem.&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;
----&lt;br /&gt;
&lt;br /&gt;
define UZSU notify .*:uzsu:.* { UZSU_execute($NAME, $EVTPART1) }&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Voila!&lt;/div&gt;</summary>
		<author><name>Bgewehr</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=9885</id>
		<title>Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=9885"/>
		<updated>2015-02-05T13:52:09Z</updated>

		<summary type="html">&lt;p&gt;Bgewehr: UZSU hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Anbindung von externen Frontends an FHEM (befindet sich in der Alpha-Phase)&lt;br /&gt;
|ModType=x&lt;br /&gt;
&amp;lt;!-- |ModCategory= (noch?) nicht verwendet --&amp;gt;&lt;br /&gt;
&amp;lt;!-- |ModCmdRef=   wird automatisch generiert --&amp;gt;&lt;br /&gt;
|ModForumArea=Sonstige Systeme&lt;br /&gt;
|ModTechName=01_fronthem.pm&lt;br /&gt;
|ModOwner=[http://forum.fhem.de/index.php?action=profile;u=769 Jörg alias herrmannj]&lt;br /&gt;
}}&lt;br /&gt;
Fronthem ist ein Projekt von herrmannj und wurde im fhem-Forum erstmalig angekündigt: http://forum.fhem.de/index.php/topic,27291.0.html&lt;br /&gt;
&lt;br /&gt;
Fronthem verfolgt die Idee, ein externes Web-Frontend (z. B. smartVISU 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;
Dieses kann in SmartVISU direkt eingebunden werden:&lt;br /&gt;
&lt;br /&gt;
{{ visu.uzsu_icon(id~&#039;UZSU&#039;, gad_uzsu, &#039;&#039;, &#039;&#039;, &#039;&#039;, &#039;&#039;, &#039;text&#039;, &#039;on&#039;, &#039;off&#039;) }}&lt;br /&gt;
&lt;br /&gt;
Um die Antwort des Widgets in fhem zu verarbeiten, benötigt man &lt;br /&gt;
1. je ein Reading uzsu an dem zu schaltenden Device, das man mit setreading &amp;lt;device&amp;gt; uzsu &amp;quot;&amp;quot; erzeugen kann.&lt;br /&gt;
2. eine Anbindung per UZSU Converter an das uzsu-GAD an das Reading uzsu read und write&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;
###############################################################################&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;
&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;
	  &lt;br /&gt;
	  fhem(&#039;delete wdt_&#039;.$device.&#039;_uzsu&#039;.$i);&lt;br /&gt;
	  fhem(&#039;define wdt_&#039;.$device.&#039;_uzsu&#039;.$i.&#039; WeekdayTimer &#039;.$device.&#039; en &#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;
	  if (($uzsu-&amp;gt;{active}) &amp;amp;&amp;amp; ($uzsu-&amp;gt;{list}[$i]-&amp;gt;{active})) {&lt;br /&gt;
  		fhem(&#039;attr wdt_&#039;.$device.&#039;_uzsu&#039;.$i.&#039; disable 0&#039;);&lt;br /&gt;
	  } else {&lt;br /&gt;
  		fhem(&#039;attr wdt_&#039;.$device.&#039;_uzsu&#039;.$i.&#039; disable 1&#039;);&lt;br /&gt;
  	  }&lt;br /&gt;
  }   &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Im Package fronthem:&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;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieser Code erzeugt aus den Einstellungen im Widget entsprechende WeekdayTimer in fhem.&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;
define UZSU notify .*:uzsu:.* { UZSU_execute($NAME, $EVTPART1) }&lt;br /&gt;
&lt;br /&gt;
Voila!&lt;/div&gt;</summary>
		<author><name>Bgewehr</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem_Installation&amp;diff=9518</id>
		<title>Fronthem Installation</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem_Installation&amp;diff=9518"/>
		<updated>2015-01-24T10:45:26Z</updated>

		<summary type="html">&lt;p&gt;Bgewehr: /* Installation Fronthem */&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;
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 von https://www.domotiga.nl/projects/domotiga/wiki/SmartVISU&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;
 $ wget http://smartvisu.de/download/smartVISU_2.7.zip&lt;br /&gt;
 $ unzip smartVISU_2.7.zip&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/smartvisu&lt;br /&gt;
 $ sudo chown -R www-data:www-data /var/www/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;
== Verbindung smartVISU mit Fhem ==&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
TODO&lt;/div&gt;</summary>
		<author><name>Bgewehr</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Volkszaehler&amp;diff=9111</id>
		<title>Volkszaehler</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Volkszaehler&amp;diff=9111"/>
		<updated>2014-12-30T11:49:56Z</updated>

		<summary type="html">&lt;p&gt;Bgewehr: /* fhem-Modul */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:volkszaehler.png|right]]&lt;br /&gt;
&lt;br /&gt;
Volkszaehler.org ist ein freies SmartMeter Projekt für den Selbstbau ([http://www.volkszaehler.org siehe volkszaehler.org]) Der Nutzer behält dabei die vollständige Kontrolle über die anfallenden Daten seiner Strom-, Wasser- und Gaszähler.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* 100% Open-Source&lt;br /&gt;
* kostenlos&lt;br /&gt;
* offene Protokolle&lt;br /&gt;
* erweiterbar&lt;br /&gt;
* minmale Anforderungen (LAMP-Stack)&lt;br /&gt;
* flexibele Verwaltungsmöglichkeiten&lt;br /&gt;
* Verbrauchs &amp;amp; Kostenprognose&lt;br /&gt;
* verschiedenste Messgrößen&lt;br /&gt;
** Strom&lt;br /&gt;
** Wasser&lt;br /&gt;
** Gas&lt;br /&gt;
** Betriebsstunden&lt;br /&gt;
** Temperatur&lt;br /&gt;
* Läuft u. a. auf Raspberry Pi ([http://wiki.volkszaehler.org/howto/raspberry_pi_image Installationsbeschreibung)]&lt;br /&gt;
&lt;br /&gt;
== Volkszaehler in fhem einbinden ==&lt;br /&gt;
&lt;br /&gt;
Das fhem-Modul für Volkszaehler.org bindet diese Daten in fhem ein. Das Modul 23_volkszaehler.pm greift per http auf den Volkszaehler zu und interpretiert die JSON-Antwort in fhem-device-Readings. Daraus können Logs und Plots gebildet werden oder devices mit Kennzahlen aus den Volkszaehler-Daten. &lt;br /&gt;
&lt;br /&gt;
Es ist z. B. für Solarstrom-Anlagenbesitzer denkbar, bei hoher verfügbarer Sonnenenergie mit fhem Verbraucher einzuschalten, um die Eigenverbrauchsrate zu erhöhen, was die Energiekosten reduziert.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Für die Installation müssen einige Files heruntergeladen und in die richtigen Verzeichnisse kopiert werden.&lt;br /&gt;
&lt;br /&gt;
=== fhem-Modul ===&lt;br /&gt;
&lt;br /&gt;
Meine aktuellen Versionen liegen hier: &amp;lt;code&amp;gt;https://github.com/bgewehr/fhem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Datei &amp;lt;code&amp;gt;23_VOLKSZAEHLER.pm&amp;lt;/code&amp;gt; kommt ins Verzeichnis &amp;lt;code&amp;gt;../fhem/FHEM&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Datei &amp;lt;code&amp;gt;volkszaehler.gplot&amp;lt;/code&amp;gt; kommt ins Verzeichnis &amp;lt;code&amp;gt;../fhem/www/gplot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nur zur Sicherheit: Um die Dateien auf einem Windows-Rechner lokal zu erstellen, bitte den Text aus der &amp;quot;raw&amp;quot; Ansicht aus Github kopieren und bitte nicht in Notepad, sondern in z. B. [http://www.heise.de/download/notepad.html Notepad++] einfügen und dann unter dem richtigen Dateinamen speichern. Mit Notepad von Microsoft werden falsche Zeilenenden erzeugt, die dann unter Linux nicht funktionieren.&lt;br /&gt;
&lt;br /&gt;
=== JSON für Perl ===&lt;br /&gt;
Das Modul nutzt einen JSON-Interpreter, um die Antwort vom Volkszaehler in eine PERL-Variable zu wandeln. Dazu ist ein zusätzliches PERL Modul notwendig.&lt;br /&gt;
&lt;br /&gt;
#&amp;gt; cpan JSON&lt;br /&gt;
&lt;br /&gt;
sollte alle nötigen Dateien installieren. &lt;br /&gt;
&lt;br /&gt;
Hinweis zur Fritz!Box:&lt;br /&gt;
Da die Fritz!Box inzwischen nicht mehr für fhem taugt, habe ich die für diese Installation nötigen beonderen JSON files hier nicht mehr aufgelistet. Auch die aktuelle Version meines Moduls greift auf das aktuelle JSON Perl Modul zurück und wird so auf einer Fritz!Box nicht mehr laufen.&lt;br /&gt;
&lt;br /&gt;
== Definition der devices ==&lt;br /&gt;
Die Device Definitionen werden in einer Konfigurationsdatei (üblicherweise fhem.cfg) angelegt&lt;br /&gt;
&lt;br /&gt;
  define &amp;lt;name&amp;gt; VOLKSZAEHLER &amp;lt;ip-address&amp;gt; &amp;lt;port-nr&amp;gt; &amp;lt;channel&amp;gt; &amp;lt;state:last/min/max/average/consumption&amp;gt; &amp;lt;poll-delay&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;name&amp;gt;: Name des neuen fhem-devices&lt;br /&gt;
* &amp;lt;ip-address&amp;gt;: IP des Volkszaehlers&lt;br /&gt;
* &amp;lt;port-Nr&amp;gt;: Port, auf dem der Volkszaehler-http-Server erreichtbar ist&lt;br /&gt;
* &amp;lt;channel&amp;gt;: UUID des Volkszaehler-Frontend-Channels, der gelesen werden soll&lt;br /&gt;
* &amp;lt;state&amp;gt;: Das Reading, welches als state genommen werden soll, kann im define gewählt werden. Dabei besteht die Auswahl aus&lt;br /&gt;
** last (letzter geladener Wert, manchmal leer bei zu kleinem poll-delay)&lt;br /&gt;
** min (kleinster Wert innerhalb des poll-delay, manchmal leer bei zu kleinem poll-delay)&lt;br /&gt;
** max (größter Wert innerhalb des poll-delay, manchmal leer bei zu kleinem poll-delay)&lt;br /&gt;
** average (Durchschnitt der Werte im poll-delay, manchmal leer bei zu kleinem poll-delay)&lt;br /&gt;
** consumption (Verbrauch innerhalb des poll-delays, manchmal leer bei zu kleinem poll-delay)&lt;br /&gt;
* &amp;lt;poll-delay&amp;gt;: Zeitraum, der ausgelesen werden soll in Sekunden&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
Ein vollständiges Beispiel für die erforderlichen Definitionen und das daraus resultierende Ergebnis:&lt;br /&gt;
&lt;br /&gt;
=== Momentanverbrauch ===&lt;br /&gt;
Kanal im Volkszaehler, der den Momentanverbrauch per I/R-Lesekopf ermittelt (alle 60 Sekunden, daraus der Mittelwert)&lt;br /&gt;
&lt;br /&gt;
  define Verbrauch_aktuell VOLKSZAEHLER 192.168.178.45 80 635481a0-6fcd-11e2-8587-eda25228f8bf average 60&lt;br /&gt;
  attr Verbrauch_aktuell group Strom&lt;br /&gt;
  attr Verbrauch_aktuell room Volkszaehler&lt;br /&gt;
&lt;br /&gt;
=== Logdatei ===&lt;br /&gt;
Definition der Logdatei, aus der die Grafik erzeugt werden kann:&lt;br /&gt;
&lt;br /&gt;
  define FileLog_Verbrauch_aktuell FileLog ./log/Verbrauch_aktuell-%Y-%m.log Verbrauch_aktuell&lt;br /&gt;
  attr FileLog_Verbrauch_aktuell logtype text&lt;br /&gt;
  attr Verbrauch_aktuell room Volkszaehler&lt;br /&gt;
&lt;br /&gt;
=== Der Graph dazu ===&lt;br /&gt;
  define FilePlot_Verbrauch_aktuell weblink fileplot FileLog_Verbrauch_aktuell:Volkszaehler:CURRENT&lt;br /&gt;
  attr FilePlot_Verbrauch_aktuell label &amp;quot;Stromverbrauch: $data{currval1}&amp;quot;&lt;br /&gt;
  attr FilePlot_Verbrauch_aktuell room Volkszaehler&lt;br /&gt;
&lt;br /&gt;
=== Zählerstand ===&lt;br /&gt;
Kanal im Volkszaehler, der den Zählerstand per I/R-Lesekopf ermittelt, jede Stunde davon der letzte Wert.&lt;br /&gt;
&lt;br /&gt;
  define Zaehlerstand VOLKSZAEHLER 192.168.178.45 80 ebb9c9b0-7058-11e2-b5ed-d12ec87a3a7f last 1800&lt;br /&gt;
  attr Zaehlerstand group Strom&lt;br /&gt;
  attr Zaehlerstand room Volkszaehler&lt;br /&gt;
&lt;br /&gt;
=== Verbrauch ===&lt;br /&gt;
Kanal im Volkszaehler, der den Zählerstand per I/R-Lesekopf ermittelt, alle 24 Stunden davon der Verbrauch.&lt;br /&gt;
&lt;br /&gt;
  define Verbrauch_24h VOLKSZAEHLER 192.168.178.45 80 635481a0-6fcd-11e2-8587-eda25228f8bf consumption 86400&lt;br /&gt;
  attr Verbrauch_24h group Strom&lt;br /&gt;
  attr Verbrauch_24h room Volkszaehler&lt;br /&gt;
&lt;br /&gt;
=== Ergebnis ===&lt;br /&gt;
[[Datei:23_volkszaehler.JPG|mini|zentriert|hochkant=3.0|Strom- und Gasverbrauch aus Volkszählerdaten generiert - Beispieldarstellung]]&lt;br /&gt;
&lt;br /&gt;
== Daten mit Volkszaehler loggen ==&lt;br /&gt;
Hier eine Möglichkeit mit einem notify Temperaturen (oder andere Messwerte) an die Middelware vom Volkszaehler zu schicken um die Daten über ein Volkszaehler Frontend auswerten zu können:&lt;br /&gt;
   .*:temperature.* {&lt;br /&gt;
    # return &amp;quot;Heizung $NAME&amp;quot; if $NAME =~ /\A.{3}Heizung/; # [[MAX]] Geräte ausschließen. Workaround für aufgebrauchte credits.&lt;br /&gt;
    my $base_url = AttrVal(&#039;vz&#039;, &#039;vz_URL&#039;, undef);&lt;br /&gt;
    my $temp = ReadingsVal($NAME, &#039;temperature&#039;, undef);&lt;br /&gt;
    my $uuid = AttrVal($NAME, &#039;vz_UUID&#039;, undef);&lt;br /&gt;
    unless (defined($uuid)) {&lt;br /&gt;
      my $create_url = $base_url . &#039;/channel.json?type=temperature&amp;amp;title=&#039; . $NAME . &#039;&amp;amp;public=on&amp;amp;style=lines&amp;amp;operation=add&#039;;&lt;br /&gt;
      Log 5, $create_url;&lt;br /&gt;
      my $response = decode_json(get($create_url));&lt;br /&gt;
      $uuid = $response-&amp;gt;{entity}-&amp;gt;{uuid};&lt;br /&gt;
      $attr{$NAME}{&#039;vz_UUID&#039;} = $uuid;&lt;br /&gt;
      Log 4, &amp;quot;created $uuid for $NAME&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    my $update_url = $base_url . &#039;/data/&#039; . $uuid . &#039;.json?operation=add&amp;amp;value=&#039; . $temp;&lt;br /&gt;
    Log 5, $update_url;&lt;br /&gt;
    Log 4, get($update_url);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Volkszaehler URL wird in einem Attribut (vz_URL) eines dummies gespeichert, welches vorher angelegt werden muss.&lt;br /&gt;
&lt;br /&gt;
Jedes Thermometer, dass auch im Volkszaehler erscheinen soll, muss nun nur noch im Volkszaehler angelegt werden und die UUID als Attribut (vz_UUID) des Termometers gespeichert werden. Dieser Schritt kann auch ausgelassen werden. In diesem Fall wird ein neues Thermometer automatisch angelegt.&lt;br /&gt;
&lt;br /&gt;
  define vz dummy&lt;br /&gt;
  attr vz vz_URL http://localhost/volkszaehler.org/htdocs/middleware.php&lt;br /&gt;
  attr vz vz_UUID XXXXXXXXXXXXXXXXXXXXXXXXXXX&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Volkszähler [http://www.volkszaehler.org Homepage]&lt;br /&gt;
* [https://github.com/bgewehr/fhem FHEM Module] für Volkszähler von &amp;quot;bgewehr&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Other Components]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Energieverbrauchsmessung]]&lt;/div&gt;</summary>
		<author><name>Bgewehr</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Volkszaehler&amp;diff=9110</id>
		<title>Volkszaehler</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Volkszaehler&amp;diff=9110"/>
		<updated>2014-12-30T11:49:24Z</updated>

		<summary type="html">&lt;p&gt;Bgewehr: /* fhem-Modul */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:volkszaehler.png|right]]&lt;br /&gt;
&lt;br /&gt;
Volkszaehler.org ist ein freies SmartMeter Projekt für den Selbstbau ([http://www.volkszaehler.org siehe volkszaehler.org]) Der Nutzer behält dabei die vollständige Kontrolle über die anfallenden Daten seiner Strom-, Wasser- und Gaszähler.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* 100% Open-Source&lt;br /&gt;
* kostenlos&lt;br /&gt;
* offene Protokolle&lt;br /&gt;
* erweiterbar&lt;br /&gt;
* minmale Anforderungen (LAMP-Stack)&lt;br /&gt;
* flexibele Verwaltungsmöglichkeiten&lt;br /&gt;
* Verbrauchs &amp;amp; Kostenprognose&lt;br /&gt;
* verschiedenste Messgrößen&lt;br /&gt;
** Strom&lt;br /&gt;
** Wasser&lt;br /&gt;
** Gas&lt;br /&gt;
** Betriebsstunden&lt;br /&gt;
** Temperatur&lt;br /&gt;
* Läuft u. a. auf Raspberry Pi ([http://wiki.volkszaehler.org/howto/raspberry_pi_image Installationsbeschreibung)]&lt;br /&gt;
&lt;br /&gt;
== Volkszaehler in fhem einbinden ==&lt;br /&gt;
&lt;br /&gt;
Das fhem-Modul für Volkszaehler.org bindet diese Daten in fhem ein. Das Modul 23_volkszaehler.pm greift per http auf den Volkszaehler zu und interpretiert die JSON-Antwort in fhem-device-Readings. Daraus können Logs und Plots gebildet werden oder devices mit Kennzahlen aus den Volkszaehler-Daten. &lt;br /&gt;
&lt;br /&gt;
Es ist z. B. für Solarstrom-Anlagenbesitzer denkbar, bei hoher verfügbarer Sonnenenergie mit fhem Verbraucher einzuschalten, um die Eigenverbrauchsrate zu erhöhen, was die Energiekosten reduziert.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Für die Installation müssen einige Files heruntergeladen und in die richtigen Verzeichnisse kopiert werden.&lt;br /&gt;
&lt;br /&gt;
=== fhem-Modul ===&lt;br /&gt;
&lt;br /&gt;
Meine aktuellen Versionen liegen hier: &amp;lt;code&amp;gt;https://github.com/bgewehr/fhem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Datei &amp;lt;code&amp;gt;23_VOLKSZAEHLER.pm&amp;lt;/code&amp;gt; kommt ins Verzeichnis &amp;lt;code&amp;gt;..\fhem\FHEM\&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Datei &amp;lt;code&amp;gt;volkszaehler.gplot&amp;lt;/code&amp;gt; kommt ins Verzeichnis &amp;lt;code&amp;gt;..fhem\www\gplot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nur zur Sicherheit: Um die Dateien auf einem Windows-Rechner lokal zu erstellen, bitte den Text aus der &amp;quot;raw&amp;quot; Ansicht aus Github kopieren und bitte nicht in Notepad, sondern in z. B. [http://www.heise.de/download/notepad.html Notepad++] einfügen und dann unter dem richtigen Dateinamen speichern. Mit Notepad von Microsoft werden falsche Zeilenenden erzeugt, die dann unter Linux nicht funktionieren.&lt;br /&gt;
&lt;br /&gt;
=== JSON für Perl ===&lt;br /&gt;
Das Modul nutzt einen JSON-Interpreter, um die Antwort vom Volkszaehler in eine PERL-Variable zu wandeln. Dazu ist ein zusätzliches PERL Modul notwendig.&lt;br /&gt;
&lt;br /&gt;
#&amp;gt; cpan JSON&lt;br /&gt;
&lt;br /&gt;
sollte alle nötigen Dateien installieren. &lt;br /&gt;
&lt;br /&gt;
Hinweis zur Fritz!Box:&lt;br /&gt;
Da die Fritz!Box inzwischen nicht mehr für fhem taugt, habe ich die für diese Installation nötigen beonderen JSON files hier nicht mehr aufgelistet. Auch die aktuelle Version meines Moduls greift auf das aktuelle JSON Perl Modul zurück und wird so auf einer Fritz!Box nicht mehr laufen.&lt;br /&gt;
&lt;br /&gt;
== Definition der devices ==&lt;br /&gt;
Die Device Definitionen werden in einer Konfigurationsdatei (üblicherweise fhem.cfg) angelegt&lt;br /&gt;
&lt;br /&gt;
  define &amp;lt;name&amp;gt; VOLKSZAEHLER &amp;lt;ip-address&amp;gt; &amp;lt;port-nr&amp;gt; &amp;lt;channel&amp;gt; &amp;lt;state:last/min/max/average/consumption&amp;gt; &amp;lt;poll-delay&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;name&amp;gt;: Name des neuen fhem-devices&lt;br /&gt;
* &amp;lt;ip-address&amp;gt;: IP des Volkszaehlers&lt;br /&gt;
* &amp;lt;port-Nr&amp;gt;: Port, auf dem der Volkszaehler-http-Server erreichtbar ist&lt;br /&gt;
* &amp;lt;channel&amp;gt;: UUID des Volkszaehler-Frontend-Channels, der gelesen werden soll&lt;br /&gt;
* &amp;lt;state&amp;gt;: Das Reading, welches als state genommen werden soll, kann im define gewählt werden. Dabei besteht die Auswahl aus&lt;br /&gt;
** last (letzter geladener Wert, manchmal leer bei zu kleinem poll-delay)&lt;br /&gt;
** min (kleinster Wert innerhalb des poll-delay, manchmal leer bei zu kleinem poll-delay)&lt;br /&gt;
** max (größter Wert innerhalb des poll-delay, manchmal leer bei zu kleinem poll-delay)&lt;br /&gt;
** average (Durchschnitt der Werte im poll-delay, manchmal leer bei zu kleinem poll-delay)&lt;br /&gt;
** consumption (Verbrauch innerhalb des poll-delays, manchmal leer bei zu kleinem poll-delay)&lt;br /&gt;
* &amp;lt;poll-delay&amp;gt;: Zeitraum, der ausgelesen werden soll in Sekunden&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
Ein vollständiges Beispiel für die erforderlichen Definitionen und das daraus resultierende Ergebnis:&lt;br /&gt;
&lt;br /&gt;
=== Momentanverbrauch ===&lt;br /&gt;
Kanal im Volkszaehler, der den Momentanverbrauch per I/R-Lesekopf ermittelt (alle 60 Sekunden, daraus der Mittelwert)&lt;br /&gt;
&lt;br /&gt;
  define Verbrauch_aktuell VOLKSZAEHLER 192.168.178.45 80 635481a0-6fcd-11e2-8587-eda25228f8bf average 60&lt;br /&gt;
  attr Verbrauch_aktuell group Strom&lt;br /&gt;
  attr Verbrauch_aktuell room Volkszaehler&lt;br /&gt;
&lt;br /&gt;
=== Logdatei ===&lt;br /&gt;
Definition der Logdatei, aus der die Grafik erzeugt werden kann:&lt;br /&gt;
&lt;br /&gt;
  define FileLog_Verbrauch_aktuell FileLog ./log/Verbrauch_aktuell-%Y-%m.log Verbrauch_aktuell&lt;br /&gt;
  attr FileLog_Verbrauch_aktuell logtype text&lt;br /&gt;
  attr Verbrauch_aktuell room Volkszaehler&lt;br /&gt;
&lt;br /&gt;
=== Der Graph dazu ===&lt;br /&gt;
  define FilePlot_Verbrauch_aktuell weblink fileplot FileLog_Verbrauch_aktuell:Volkszaehler:CURRENT&lt;br /&gt;
  attr FilePlot_Verbrauch_aktuell label &amp;quot;Stromverbrauch: $data{currval1}&amp;quot;&lt;br /&gt;
  attr FilePlot_Verbrauch_aktuell room Volkszaehler&lt;br /&gt;
&lt;br /&gt;
=== Zählerstand ===&lt;br /&gt;
Kanal im Volkszaehler, der den Zählerstand per I/R-Lesekopf ermittelt, jede Stunde davon der letzte Wert.&lt;br /&gt;
&lt;br /&gt;
  define Zaehlerstand VOLKSZAEHLER 192.168.178.45 80 ebb9c9b0-7058-11e2-b5ed-d12ec87a3a7f last 1800&lt;br /&gt;
  attr Zaehlerstand group Strom&lt;br /&gt;
  attr Zaehlerstand room Volkszaehler&lt;br /&gt;
&lt;br /&gt;
=== Verbrauch ===&lt;br /&gt;
Kanal im Volkszaehler, der den Zählerstand per I/R-Lesekopf ermittelt, alle 24 Stunden davon der Verbrauch.&lt;br /&gt;
&lt;br /&gt;
  define Verbrauch_24h VOLKSZAEHLER 192.168.178.45 80 635481a0-6fcd-11e2-8587-eda25228f8bf consumption 86400&lt;br /&gt;
  attr Verbrauch_24h group Strom&lt;br /&gt;
  attr Verbrauch_24h room Volkszaehler&lt;br /&gt;
&lt;br /&gt;
=== Ergebnis ===&lt;br /&gt;
[[Datei:23_volkszaehler.JPG|mini|zentriert|hochkant=3.0|Strom- und Gasverbrauch aus Volkszählerdaten generiert - Beispieldarstellung]]&lt;br /&gt;
&lt;br /&gt;
== Daten mit Volkszaehler loggen ==&lt;br /&gt;
Hier eine Möglichkeit mit einem notify Temperaturen (oder andere Messwerte) an die Middelware vom Volkszaehler zu schicken um die Daten über ein Volkszaehler Frontend auswerten zu können:&lt;br /&gt;
   .*:temperature.* {&lt;br /&gt;
    # return &amp;quot;Heizung $NAME&amp;quot; if $NAME =~ /\A.{3}Heizung/; # [[MAX]] Geräte ausschließen. Workaround für aufgebrauchte credits.&lt;br /&gt;
    my $base_url = AttrVal(&#039;vz&#039;, &#039;vz_URL&#039;, undef);&lt;br /&gt;
    my $temp = ReadingsVal($NAME, &#039;temperature&#039;, undef);&lt;br /&gt;
    my $uuid = AttrVal($NAME, &#039;vz_UUID&#039;, undef);&lt;br /&gt;
    unless (defined($uuid)) {&lt;br /&gt;
      my $create_url = $base_url . &#039;/channel.json?type=temperature&amp;amp;title=&#039; . $NAME . &#039;&amp;amp;public=on&amp;amp;style=lines&amp;amp;operation=add&#039;;&lt;br /&gt;
      Log 5, $create_url;&lt;br /&gt;
      my $response = decode_json(get($create_url));&lt;br /&gt;
      $uuid = $response-&amp;gt;{entity}-&amp;gt;{uuid};&lt;br /&gt;
      $attr{$NAME}{&#039;vz_UUID&#039;} = $uuid;&lt;br /&gt;
      Log 4, &amp;quot;created $uuid for $NAME&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    my $update_url = $base_url . &#039;/data/&#039; . $uuid . &#039;.json?operation=add&amp;amp;value=&#039; . $temp;&lt;br /&gt;
    Log 5, $update_url;&lt;br /&gt;
    Log 4, get($update_url);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Volkszaehler URL wird in einem Attribut (vz_URL) eines dummies gespeichert, welches vorher angelegt werden muss.&lt;br /&gt;
&lt;br /&gt;
Jedes Thermometer, dass auch im Volkszaehler erscheinen soll, muss nun nur noch im Volkszaehler angelegt werden und die UUID als Attribut (vz_UUID) des Termometers gespeichert werden. Dieser Schritt kann auch ausgelassen werden. In diesem Fall wird ein neues Thermometer automatisch angelegt.&lt;br /&gt;
&lt;br /&gt;
  define vz dummy&lt;br /&gt;
  attr vz vz_URL http://localhost/volkszaehler.org/htdocs/middleware.php&lt;br /&gt;
  attr vz vz_UUID XXXXXXXXXXXXXXXXXXXXXXXXXXX&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Volkszähler [http://www.volkszaehler.org Homepage]&lt;br /&gt;
* [https://github.com/bgewehr/fhem FHEM Module] für Volkszähler von &amp;quot;bgewehr&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Other Components]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Energieverbrauchsmessung]]&lt;/div&gt;</summary>
		<author><name>Bgewehr</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Volkszaehler&amp;diff=9109</id>
		<title>Volkszaehler</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Volkszaehler&amp;diff=9109"/>
		<updated>2014-12-30T11:48:44Z</updated>

		<summary type="html">&lt;p&gt;Bgewehr: /* Daten mit Volkszaehler loggen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:volkszaehler.png|right]]&lt;br /&gt;
&lt;br /&gt;
Volkszaehler.org ist ein freies SmartMeter Projekt für den Selbstbau ([http://www.volkszaehler.org siehe volkszaehler.org]) Der Nutzer behält dabei die vollständige Kontrolle über die anfallenden Daten seiner Strom-, Wasser- und Gaszähler.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* 100% Open-Source&lt;br /&gt;
* kostenlos&lt;br /&gt;
* offene Protokolle&lt;br /&gt;
* erweiterbar&lt;br /&gt;
* minmale Anforderungen (LAMP-Stack)&lt;br /&gt;
* flexibele Verwaltungsmöglichkeiten&lt;br /&gt;
* Verbrauchs &amp;amp; Kostenprognose&lt;br /&gt;
* verschiedenste Messgrößen&lt;br /&gt;
** Strom&lt;br /&gt;
** Wasser&lt;br /&gt;
** Gas&lt;br /&gt;
** Betriebsstunden&lt;br /&gt;
** Temperatur&lt;br /&gt;
* Läuft u. a. auf Raspberry Pi ([http://wiki.volkszaehler.org/howto/raspberry_pi_image Installationsbeschreibung)]&lt;br /&gt;
&lt;br /&gt;
== Volkszaehler in fhem einbinden ==&lt;br /&gt;
&lt;br /&gt;
Das fhem-Modul für Volkszaehler.org bindet diese Daten in fhem ein. Das Modul 23_volkszaehler.pm greift per http auf den Volkszaehler zu und interpretiert die JSON-Antwort in fhem-device-Readings. Daraus können Logs und Plots gebildet werden oder devices mit Kennzahlen aus den Volkszaehler-Daten. &lt;br /&gt;
&lt;br /&gt;
Es ist z. B. für Solarstrom-Anlagenbesitzer denkbar, bei hoher verfügbarer Sonnenenergie mit fhem Verbraucher einzuschalten, um die Eigenverbrauchsrate zu erhöhen, was die Energiekosten reduziert.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Für die Installation müssen einige Files heruntergeladen und in die richtigen Verzeichnisse kopiert werden.&lt;br /&gt;
&lt;br /&gt;
=== fhem-Modul ===&lt;br /&gt;
&lt;br /&gt;
Meine aktuellen Versionen liegen hier: &amp;lt;code&amp;gt;https://github.com/bgewehr/fhem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Datei &amp;lt;code&amp;gt;23_VOLKSZAEHLER.pm&amp;lt;/code&amp;gt; kommt ins Verzeichnis &amp;lt;code&amp;gt;..\fhem\FHEM\&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Datei &amp;lt;code&amp;gt;volkszaehler.gplot&amp;lt;/code&amp;gt; kommt ins Verzeichnis &amp;lt;code&amp;gt;\..fhem\www\gplot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nur zur Sicherheit: Um die Dateien auf einem Windows-Rechner lokal zu erstellen, bitte den Text aus der &amp;quot;raw&amp;quot; Ansicht aus Github kopieren und bitte nicht in Notepad, sondern in z. B. [http://www.heise.de/download/notepad.html Notepad++] einfügen und dann unter dem richtigen Dateinamen speichern. Mit Notepad von Microsoft werden falsche Zeilenenden erzeugt, die dann unter Linux nicht funktionieren.&lt;br /&gt;
&lt;br /&gt;
=== JSON für Perl ===&lt;br /&gt;
Das Modul nutzt einen JSON-Interpreter, um die Antwort vom Volkszaehler in eine PERL-Variable zu wandeln. Dazu ist ein zusätzliches PERL Modul notwendig.&lt;br /&gt;
&lt;br /&gt;
#&amp;gt; cpan JSON&lt;br /&gt;
&lt;br /&gt;
sollte alle nötigen Dateien installieren. &lt;br /&gt;
&lt;br /&gt;
Hinweis zur Fritz!Box:&lt;br /&gt;
Da die Fritz!Box inzwischen nicht mehr für fhem taugt, habe ich die für diese Installation nötigen beonderen JSON files hier nicht mehr aufgelistet. Auch die aktuelle Version meines Moduls greift auf das aktuelle JSON Perl Modul zurück und wird so auf einer Fritz!Box nicht mehr laufen.&lt;br /&gt;
&lt;br /&gt;
== Definition der devices ==&lt;br /&gt;
Die Device Definitionen werden in einer Konfigurationsdatei (üblicherweise fhem.cfg) angelegt&lt;br /&gt;
&lt;br /&gt;
  define &amp;lt;name&amp;gt; VOLKSZAEHLER &amp;lt;ip-address&amp;gt; &amp;lt;port-nr&amp;gt; &amp;lt;channel&amp;gt; &amp;lt;state:last/min/max/average/consumption&amp;gt; &amp;lt;poll-delay&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;name&amp;gt;: Name des neuen fhem-devices&lt;br /&gt;
* &amp;lt;ip-address&amp;gt;: IP des Volkszaehlers&lt;br /&gt;
* &amp;lt;port-Nr&amp;gt;: Port, auf dem der Volkszaehler-http-Server erreichtbar ist&lt;br /&gt;
* &amp;lt;channel&amp;gt;: UUID des Volkszaehler-Frontend-Channels, der gelesen werden soll&lt;br /&gt;
* &amp;lt;state&amp;gt;: Das Reading, welches als state genommen werden soll, kann im define gewählt werden. Dabei besteht die Auswahl aus&lt;br /&gt;
** last (letzter geladener Wert, manchmal leer bei zu kleinem poll-delay)&lt;br /&gt;
** min (kleinster Wert innerhalb des poll-delay, manchmal leer bei zu kleinem poll-delay)&lt;br /&gt;
** max (größter Wert innerhalb des poll-delay, manchmal leer bei zu kleinem poll-delay)&lt;br /&gt;
** average (Durchschnitt der Werte im poll-delay, manchmal leer bei zu kleinem poll-delay)&lt;br /&gt;
** consumption (Verbrauch innerhalb des poll-delays, manchmal leer bei zu kleinem poll-delay)&lt;br /&gt;
* &amp;lt;poll-delay&amp;gt;: Zeitraum, der ausgelesen werden soll in Sekunden&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
Ein vollständiges Beispiel für die erforderlichen Definitionen und das daraus resultierende Ergebnis:&lt;br /&gt;
&lt;br /&gt;
=== Momentanverbrauch ===&lt;br /&gt;
Kanal im Volkszaehler, der den Momentanverbrauch per I/R-Lesekopf ermittelt (alle 60 Sekunden, daraus der Mittelwert)&lt;br /&gt;
&lt;br /&gt;
  define Verbrauch_aktuell VOLKSZAEHLER 192.168.178.45 80 635481a0-6fcd-11e2-8587-eda25228f8bf average 60&lt;br /&gt;
  attr Verbrauch_aktuell group Strom&lt;br /&gt;
  attr Verbrauch_aktuell room Volkszaehler&lt;br /&gt;
&lt;br /&gt;
=== Logdatei ===&lt;br /&gt;
Definition der Logdatei, aus der die Grafik erzeugt werden kann:&lt;br /&gt;
&lt;br /&gt;
  define FileLog_Verbrauch_aktuell FileLog ./log/Verbrauch_aktuell-%Y-%m.log Verbrauch_aktuell&lt;br /&gt;
  attr FileLog_Verbrauch_aktuell logtype text&lt;br /&gt;
  attr Verbrauch_aktuell room Volkszaehler&lt;br /&gt;
&lt;br /&gt;
=== Der Graph dazu ===&lt;br /&gt;
  define FilePlot_Verbrauch_aktuell weblink fileplot FileLog_Verbrauch_aktuell:Volkszaehler:CURRENT&lt;br /&gt;
  attr FilePlot_Verbrauch_aktuell label &amp;quot;Stromverbrauch: $data{currval1}&amp;quot;&lt;br /&gt;
  attr FilePlot_Verbrauch_aktuell room Volkszaehler&lt;br /&gt;
&lt;br /&gt;
=== Zählerstand ===&lt;br /&gt;
Kanal im Volkszaehler, der den Zählerstand per I/R-Lesekopf ermittelt, jede Stunde davon der letzte Wert.&lt;br /&gt;
&lt;br /&gt;
  define Zaehlerstand VOLKSZAEHLER 192.168.178.45 80 ebb9c9b0-7058-11e2-b5ed-d12ec87a3a7f last 1800&lt;br /&gt;
  attr Zaehlerstand group Strom&lt;br /&gt;
  attr Zaehlerstand room Volkszaehler&lt;br /&gt;
&lt;br /&gt;
=== Verbrauch ===&lt;br /&gt;
Kanal im Volkszaehler, der den Zählerstand per I/R-Lesekopf ermittelt, alle 24 Stunden davon der Verbrauch.&lt;br /&gt;
&lt;br /&gt;
  define Verbrauch_24h VOLKSZAEHLER 192.168.178.45 80 635481a0-6fcd-11e2-8587-eda25228f8bf consumption 86400&lt;br /&gt;
  attr Verbrauch_24h group Strom&lt;br /&gt;
  attr Verbrauch_24h room Volkszaehler&lt;br /&gt;
&lt;br /&gt;
=== Ergebnis ===&lt;br /&gt;
[[Datei:23_volkszaehler.JPG|mini|zentriert|hochkant=3.0|Strom- und Gasverbrauch aus Volkszählerdaten generiert - Beispieldarstellung]]&lt;br /&gt;
&lt;br /&gt;
== Daten mit Volkszaehler loggen ==&lt;br /&gt;
Hier eine Möglichkeit mit einem notify Temperaturen (oder andere Messwerte) an die Middelware vom Volkszaehler zu schicken um die Daten über ein Volkszaehler Frontend auswerten zu können:&lt;br /&gt;
   .*:temperature.* {&lt;br /&gt;
    # return &amp;quot;Heizung $NAME&amp;quot; if $NAME =~ /\A.{3}Heizung/; # [[MAX]] Geräte ausschließen. Workaround für aufgebrauchte credits.&lt;br /&gt;
    my $base_url = AttrVal(&#039;vz&#039;, &#039;vz_URL&#039;, undef);&lt;br /&gt;
    my $temp = ReadingsVal($NAME, &#039;temperature&#039;, undef);&lt;br /&gt;
    my $uuid = AttrVal($NAME, &#039;vz_UUID&#039;, undef);&lt;br /&gt;
    unless (defined($uuid)) {&lt;br /&gt;
      my $create_url = $base_url . &#039;/channel.json?type=temperature&amp;amp;title=&#039; . $NAME . &#039;&amp;amp;public=on&amp;amp;style=lines&amp;amp;operation=add&#039;;&lt;br /&gt;
      Log 5, $create_url;&lt;br /&gt;
      my $response = decode_json(get($create_url));&lt;br /&gt;
      $uuid = $response-&amp;gt;{entity}-&amp;gt;{uuid};&lt;br /&gt;
      $attr{$NAME}{&#039;vz_UUID&#039;} = $uuid;&lt;br /&gt;
      Log 4, &amp;quot;created $uuid for $NAME&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    my $update_url = $base_url . &#039;/data/&#039; . $uuid . &#039;.json?operation=add&amp;amp;value=&#039; . $temp;&lt;br /&gt;
    Log 5, $update_url;&lt;br /&gt;
    Log 4, get($update_url);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Volkszaehler URL wird in einem Attribut (vz_URL) eines dummies gespeichert, welches vorher angelegt werden muss.&lt;br /&gt;
&lt;br /&gt;
Jedes Thermometer, dass auch im Volkszaehler erscheinen soll, muss nun nur noch im Volkszaehler angelegt werden und die UUID als Attribut (vz_UUID) des Termometers gespeichert werden. Dieser Schritt kann auch ausgelassen werden. In diesem Fall wird ein neues Thermometer automatisch angelegt.&lt;br /&gt;
&lt;br /&gt;
  define vz dummy&lt;br /&gt;
  attr vz vz_URL http://localhost/volkszaehler.org/htdocs/middleware.php&lt;br /&gt;
  attr vz vz_UUID XXXXXXXXXXXXXXXXXXXXXXXXXXX&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Volkszähler [http://www.volkszaehler.org Homepage]&lt;br /&gt;
* [https://github.com/bgewehr/fhem FHEM Module] für Volkszähler von &amp;quot;bgewehr&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Other Components]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Energieverbrauchsmessung]]&lt;/div&gt;</summary>
		<author><name>Bgewehr</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Volkszaehler&amp;diff=9108</id>
		<title>Volkszaehler</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Volkszaehler&amp;diff=9108"/>
		<updated>2014-12-30T11:47:14Z</updated>

		<summary type="html">&lt;p&gt;Bgewehr: /* Daten mit Volkszaehler loggen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:volkszaehler.png|right]]&lt;br /&gt;
&lt;br /&gt;
Volkszaehler.org ist ein freies SmartMeter Projekt für den Selbstbau ([http://www.volkszaehler.org siehe volkszaehler.org]) Der Nutzer behält dabei die vollständige Kontrolle über die anfallenden Daten seiner Strom-, Wasser- und Gaszähler.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* 100% Open-Source&lt;br /&gt;
* kostenlos&lt;br /&gt;
* offene Protokolle&lt;br /&gt;
* erweiterbar&lt;br /&gt;
* minmale Anforderungen (LAMP-Stack)&lt;br /&gt;
* flexibele Verwaltungsmöglichkeiten&lt;br /&gt;
* Verbrauchs &amp;amp; Kostenprognose&lt;br /&gt;
* verschiedenste Messgrößen&lt;br /&gt;
** Strom&lt;br /&gt;
** Wasser&lt;br /&gt;
** Gas&lt;br /&gt;
** Betriebsstunden&lt;br /&gt;
** Temperatur&lt;br /&gt;
* Läuft u. a. auf Raspberry Pi ([http://wiki.volkszaehler.org/howto/raspberry_pi_image Installationsbeschreibung)]&lt;br /&gt;
&lt;br /&gt;
== Volkszaehler in fhem einbinden ==&lt;br /&gt;
&lt;br /&gt;
Das fhem-Modul für Volkszaehler.org bindet diese Daten in fhem ein. Das Modul 23_volkszaehler.pm greift per http auf den Volkszaehler zu und interpretiert die JSON-Antwort in fhem-device-Readings. Daraus können Logs und Plots gebildet werden oder devices mit Kennzahlen aus den Volkszaehler-Daten. &lt;br /&gt;
&lt;br /&gt;
Es ist z. B. für Solarstrom-Anlagenbesitzer denkbar, bei hoher verfügbarer Sonnenenergie mit fhem Verbraucher einzuschalten, um die Eigenverbrauchsrate zu erhöhen, was die Energiekosten reduziert.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Für die Installation müssen einige Files heruntergeladen und in die richtigen Verzeichnisse kopiert werden.&lt;br /&gt;
&lt;br /&gt;
=== fhem-Modul ===&lt;br /&gt;
&lt;br /&gt;
Meine aktuellen Versionen liegen hier: &amp;lt;code&amp;gt;https://github.com/bgewehr/fhem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Datei &amp;lt;code&amp;gt;23_VOLKSZAEHLER.pm&amp;lt;/code&amp;gt; kommt ins Verzeichnis &amp;lt;code&amp;gt;..\fhem\FHEM\&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Datei &amp;lt;code&amp;gt;volkszaehler.gplot&amp;lt;/code&amp;gt; kommt ins Verzeichnis &amp;lt;code&amp;gt;\..fhem\www\gplot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nur zur Sicherheit: Um die Dateien auf einem Windows-Rechner lokal zu erstellen, bitte den Text aus der &amp;quot;raw&amp;quot; Ansicht aus Github kopieren und bitte nicht in Notepad, sondern in z. B. [http://www.heise.de/download/notepad.html Notepad++] einfügen und dann unter dem richtigen Dateinamen speichern. Mit Notepad von Microsoft werden falsche Zeilenenden erzeugt, die dann unter Linux nicht funktionieren.&lt;br /&gt;
&lt;br /&gt;
=== JSON für Perl ===&lt;br /&gt;
Das Modul nutzt einen JSON-Interpreter, um die Antwort vom Volkszaehler in eine PERL-Variable zu wandeln. Dazu ist ein zusätzliches PERL Modul notwendig.&lt;br /&gt;
&lt;br /&gt;
#&amp;gt; cpan JSON&lt;br /&gt;
&lt;br /&gt;
sollte alle nötigen Dateien installieren. &lt;br /&gt;
&lt;br /&gt;
Hinweis zur Fritz!Box:&lt;br /&gt;
Da die Fritz!Box inzwischen nicht mehr für fhem taugt, habe ich die für diese Installation nötigen beonderen JSON files hier nicht mehr aufgelistet. Auch die aktuelle Version meines Moduls greift auf das aktuelle JSON Perl Modul zurück und wird so auf einer Fritz!Box nicht mehr laufen.&lt;br /&gt;
&lt;br /&gt;
== Definition der devices ==&lt;br /&gt;
Die Device Definitionen werden in einer Konfigurationsdatei (üblicherweise fhem.cfg) angelegt&lt;br /&gt;
&lt;br /&gt;
  define &amp;lt;name&amp;gt; VOLKSZAEHLER &amp;lt;ip-address&amp;gt; &amp;lt;port-nr&amp;gt; &amp;lt;channel&amp;gt; &amp;lt;state:last/min/max/average/consumption&amp;gt; &amp;lt;poll-delay&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;name&amp;gt;: Name des neuen fhem-devices&lt;br /&gt;
* &amp;lt;ip-address&amp;gt;: IP des Volkszaehlers&lt;br /&gt;
* &amp;lt;port-Nr&amp;gt;: Port, auf dem der Volkszaehler-http-Server erreichtbar ist&lt;br /&gt;
* &amp;lt;channel&amp;gt;: UUID des Volkszaehler-Frontend-Channels, der gelesen werden soll&lt;br /&gt;
* &amp;lt;state&amp;gt;: Das Reading, welches als state genommen werden soll, kann im define gewählt werden. Dabei besteht die Auswahl aus&lt;br /&gt;
** last (letzter geladener Wert, manchmal leer bei zu kleinem poll-delay)&lt;br /&gt;
** min (kleinster Wert innerhalb des poll-delay, manchmal leer bei zu kleinem poll-delay)&lt;br /&gt;
** max (größter Wert innerhalb des poll-delay, manchmal leer bei zu kleinem poll-delay)&lt;br /&gt;
** average (Durchschnitt der Werte im poll-delay, manchmal leer bei zu kleinem poll-delay)&lt;br /&gt;
** consumption (Verbrauch innerhalb des poll-delays, manchmal leer bei zu kleinem poll-delay)&lt;br /&gt;
* &amp;lt;poll-delay&amp;gt;: Zeitraum, der ausgelesen werden soll in Sekunden&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
Ein vollständiges Beispiel für die erforderlichen Definitionen und das daraus resultierende Ergebnis:&lt;br /&gt;
&lt;br /&gt;
=== Momentanverbrauch ===&lt;br /&gt;
Kanal im Volkszaehler, der den Momentanverbrauch per I/R-Lesekopf ermittelt (alle 60 Sekunden, daraus der Mittelwert)&lt;br /&gt;
&lt;br /&gt;
  define Verbrauch_aktuell VOLKSZAEHLER 192.168.178.45 80 635481a0-6fcd-11e2-8587-eda25228f8bf average 60&lt;br /&gt;
  attr Verbrauch_aktuell group Strom&lt;br /&gt;
  attr Verbrauch_aktuell room Volkszaehler&lt;br /&gt;
&lt;br /&gt;
=== Logdatei ===&lt;br /&gt;
Definition der Logdatei, aus der die Grafik erzeugt werden kann:&lt;br /&gt;
&lt;br /&gt;
  define FileLog_Verbrauch_aktuell FileLog ./log/Verbrauch_aktuell-%Y-%m.log Verbrauch_aktuell&lt;br /&gt;
  attr FileLog_Verbrauch_aktuell logtype text&lt;br /&gt;
  attr Verbrauch_aktuell room Volkszaehler&lt;br /&gt;
&lt;br /&gt;
=== Der Graph dazu ===&lt;br /&gt;
  define FilePlot_Verbrauch_aktuell weblink fileplot FileLog_Verbrauch_aktuell:Volkszaehler:CURRENT&lt;br /&gt;
  attr FilePlot_Verbrauch_aktuell label &amp;quot;Stromverbrauch: $data{currval1}&amp;quot;&lt;br /&gt;
  attr FilePlot_Verbrauch_aktuell room Volkszaehler&lt;br /&gt;
&lt;br /&gt;
=== Zählerstand ===&lt;br /&gt;
Kanal im Volkszaehler, der den Zählerstand per I/R-Lesekopf ermittelt, jede Stunde davon der letzte Wert.&lt;br /&gt;
&lt;br /&gt;
  define Zaehlerstand VOLKSZAEHLER 192.168.178.45 80 ebb9c9b0-7058-11e2-b5ed-d12ec87a3a7f last 1800&lt;br /&gt;
  attr Zaehlerstand group Strom&lt;br /&gt;
  attr Zaehlerstand room Volkszaehler&lt;br /&gt;
&lt;br /&gt;
=== Verbrauch ===&lt;br /&gt;
Kanal im Volkszaehler, der den Zählerstand per I/R-Lesekopf ermittelt, alle 24 Stunden davon der Verbrauch.&lt;br /&gt;
&lt;br /&gt;
  define Verbrauch_24h VOLKSZAEHLER 192.168.178.45 80 635481a0-6fcd-11e2-8587-eda25228f8bf consumption 86400&lt;br /&gt;
  attr Verbrauch_24h group Strom&lt;br /&gt;
  attr Verbrauch_24h room Volkszaehler&lt;br /&gt;
&lt;br /&gt;
=== Ergebnis ===&lt;br /&gt;
[[Datei:23_volkszaehler.JPG|mini|zentriert|hochkant=3.0|Strom- und Gasverbrauch aus Volkszählerdaten generiert - Beispieldarstellung]]&lt;br /&gt;
&lt;br /&gt;
== Daten mit Volkszaehler loggen ==&lt;br /&gt;
Hier eine Möglichkeit mit einem notify Temperaturen (oder andere Messwerte) an die Middelware vom Volkszaehler zu schicken um die Daten über ein Volkszaehler Frontend auswerten zu können:&lt;br /&gt;
   .*:temperature.* {&lt;br /&gt;
    # return &amp;quot;Heizung $NAME&amp;quot; if $NAME =~ /\A.{3}Heizung/; # [[MAX]] Geräte ausschließen. Wordaround für aufgebrauchte credits.&lt;br /&gt;
    my $base_url = AttrVal(&#039;vz&#039;, &#039;vz_URL&#039;, undef);&lt;br /&gt;
    my $temp = ReadingsVal($NAME, &#039;temperature&#039;, undef);&lt;br /&gt;
    my $uuid = AttrVal($NAME, &#039;vz_UUID&#039;, undef);&lt;br /&gt;
    unless (defined($uuid)) {&lt;br /&gt;
      my $create_url = $base_url . &#039;/channel.json?type=temperature&amp;amp;title=&#039; . $NAME . &#039;&amp;amp;public=on&amp;amp;style=lines&amp;amp;operation=add&#039;;&lt;br /&gt;
      Log 5, $create_url;&lt;br /&gt;
      my $response = decode_json(get($create_url));&lt;br /&gt;
      $uuid = $response-&amp;gt;{entity}-&amp;gt;{uuid};&lt;br /&gt;
      $attr{$NAME}{&#039;vz_UUID&#039;} = $uuid;&lt;br /&gt;
      Log 4, &amp;quot;created $uuid for $NAME&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    my $update_url = $base_url . &#039;/data/&#039; . $uuid . &#039;.json?operation=add&amp;amp;value=&#039; . $temp;&lt;br /&gt;
    Log 5, $update_url;&lt;br /&gt;
    Log 4, get($update_url);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Volkszaehler URL wird in einem Attribut (vz_URL) eines dummies gespeichert, welches vorher angelegt werden muss.&lt;br /&gt;
Jedes Termometer, dass auch im Volkszaehler erscheinen soll, muss nun nur noch im Volkszaehler angelegt werden und die UUID als Attribut (vz_UUID) des Termometers gespeichert werden. Dieser Schritt kann auch ausgelassen werden. In diesem Fall wird ein neues Termometer automatisch angelegt.&lt;br /&gt;
&lt;br /&gt;
  define vz dummy&lt;br /&gt;
  attr vz vz_URL http://localhost/volkszaehler.org/htdocs/middleware.php&lt;br /&gt;
  attr vz vz_UUID XXXXXXXXXXXXXXXXXXXXXXXXXXX&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Volkszähler [http://www.volkszaehler.org Homepage]&lt;br /&gt;
* [https://github.com/bgewehr/fhem FHEM Module] für Volkszähler von &amp;quot;bgewehr&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Other Components]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Energieverbrauchsmessung]]&lt;/div&gt;</summary>
		<author><name>Bgewehr</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Volkszaehler&amp;diff=9107</id>
		<title>Volkszaehler</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Volkszaehler&amp;diff=9107"/>
		<updated>2014-12-30T11:46:05Z</updated>

		<summary type="html">&lt;p&gt;Bgewehr: /* Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:volkszaehler.png|right]]&lt;br /&gt;
&lt;br /&gt;
Volkszaehler.org ist ein freies SmartMeter Projekt für den Selbstbau ([http://www.volkszaehler.org siehe volkszaehler.org]) Der Nutzer behält dabei die vollständige Kontrolle über die anfallenden Daten seiner Strom-, Wasser- und Gaszähler.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* 100% Open-Source&lt;br /&gt;
* kostenlos&lt;br /&gt;
* offene Protokolle&lt;br /&gt;
* erweiterbar&lt;br /&gt;
* minmale Anforderungen (LAMP-Stack)&lt;br /&gt;
* flexibele Verwaltungsmöglichkeiten&lt;br /&gt;
* Verbrauchs &amp;amp; Kostenprognose&lt;br /&gt;
* verschiedenste Messgrößen&lt;br /&gt;
** Strom&lt;br /&gt;
** Wasser&lt;br /&gt;
** Gas&lt;br /&gt;
** Betriebsstunden&lt;br /&gt;
** Temperatur&lt;br /&gt;
* Läuft u. a. auf Raspberry Pi ([http://wiki.volkszaehler.org/howto/raspberry_pi_image Installationsbeschreibung)]&lt;br /&gt;
&lt;br /&gt;
== Volkszaehler in fhem einbinden ==&lt;br /&gt;
&lt;br /&gt;
Das fhem-Modul für Volkszaehler.org bindet diese Daten in fhem ein. Das Modul 23_volkszaehler.pm greift per http auf den Volkszaehler zu und interpretiert die JSON-Antwort in fhem-device-Readings. Daraus können Logs und Plots gebildet werden oder devices mit Kennzahlen aus den Volkszaehler-Daten. &lt;br /&gt;
&lt;br /&gt;
Es ist z. B. für Solarstrom-Anlagenbesitzer denkbar, bei hoher verfügbarer Sonnenenergie mit fhem Verbraucher einzuschalten, um die Eigenverbrauchsrate zu erhöhen, was die Energiekosten reduziert.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Für die Installation müssen einige Files heruntergeladen und in die richtigen Verzeichnisse kopiert werden.&lt;br /&gt;
&lt;br /&gt;
=== fhem-Modul ===&lt;br /&gt;
&lt;br /&gt;
Meine aktuellen Versionen liegen hier: &amp;lt;code&amp;gt;https://github.com/bgewehr/fhem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Datei &amp;lt;code&amp;gt;23_VOLKSZAEHLER.pm&amp;lt;/code&amp;gt; kommt ins Verzeichnis &amp;lt;code&amp;gt;..\fhem\FHEM\&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Datei &amp;lt;code&amp;gt;volkszaehler.gplot&amp;lt;/code&amp;gt; kommt ins Verzeichnis &amp;lt;code&amp;gt;\..fhem\www\gplot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nur zur Sicherheit: Um die Dateien auf einem Windows-Rechner lokal zu erstellen, bitte den Text aus der &amp;quot;raw&amp;quot; Ansicht aus Github kopieren und bitte nicht in Notepad, sondern in z. B. [http://www.heise.de/download/notepad.html Notepad++] einfügen und dann unter dem richtigen Dateinamen speichern. Mit Notepad von Microsoft werden falsche Zeilenenden erzeugt, die dann unter Linux nicht funktionieren.&lt;br /&gt;
&lt;br /&gt;
=== JSON für Perl ===&lt;br /&gt;
Das Modul nutzt einen JSON-Interpreter, um die Antwort vom Volkszaehler in eine PERL-Variable zu wandeln. Dazu ist ein zusätzliches PERL Modul notwendig.&lt;br /&gt;
&lt;br /&gt;
#&amp;gt; cpan JSON&lt;br /&gt;
&lt;br /&gt;
sollte alle nötigen Dateien installieren. &lt;br /&gt;
&lt;br /&gt;
Hinweis zur Fritz!Box:&lt;br /&gt;
Da die Fritz!Box inzwischen nicht mehr für fhem taugt, habe ich die für diese Installation nötigen beonderen JSON files hier nicht mehr aufgelistet. Auch die aktuelle Version meines Moduls greift auf das aktuelle JSON Perl Modul zurück und wird so auf einer Fritz!Box nicht mehr laufen.&lt;br /&gt;
&lt;br /&gt;
== Definition der devices ==&lt;br /&gt;
Die Device Definitionen werden in einer Konfigurationsdatei (üblicherweise fhem.cfg) angelegt&lt;br /&gt;
&lt;br /&gt;
  define &amp;lt;name&amp;gt; VOLKSZAEHLER &amp;lt;ip-address&amp;gt; &amp;lt;port-nr&amp;gt; &amp;lt;channel&amp;gt; &amp;lt;state:last/min/max/average/consumption&amp;gt; &amp;lt;poll-delay&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;name&amp;gt;: Name des neuen fhem-devices&lt;br /&gt;
* &amp;lt;ip-address&amp;gt;: IP des Volkszaehlers&lt;br /&gt;
* &amp;lt;port-Nr&amp;gt;: Port, auf dem der Volkszaehler-http-Server erreichtbar ist&lt;br /&gt;
* &amp;lt;channel&amp;gt;: UUID des Volkszaehler-Frontend-Channels, der gelesen werden soll&lt;br /&gt;
* &amp;lt;state&amp;gt;: Das Reading, welches als state genommen werden soll, kann im define gewählt werden. Dabei besteht die Auswahl aus&lt;br /&gt;
** last (letzter geladener Wert, manchmal leer bei zu kleinem poll-delay)&lt;br /&gt;
** min (kleinster Wert innerhalb des poll-delay, manchmal leer bei zu kleinem poll-delay)&lt;br /&gt;
** max (größter Wert innerhalb des poll-delay, manchmal leer bei zu kleinem poll-delay)&lt;br /&gt;
** average (Durchschnitt der Werte im poll-delay, manchmal leer bei zu kleinem poll-delay)&lt;br /&gt;
** consumption (Verbrauch innerhalb des poll-delays, manchmal leer bei zu kleinem poll-delay)&lt;br /&gt;
* &amp;lt;poll-delay&amp;gt;: Zeitraum, der ausgelesen werden soll in Sekunden&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
Ein vollständiges Beispiel für die erforderlichen Definitionen und das daraus resultierende Ergebnis:&lt;br /&gt;
&lt;br /&gt;
=== Momentanverbrauch ===&lt;br /&gt;
Kanal im Volkszaehler, der den Momentanverbrauch per I/R-Lesekopf ermittelt (alle 60 Sekunden, daraus der Mittelwert)&lt;br /&gt;
&lt;br /&gt;
  define Verbrauch_aktuell VOLKSZAEHLER 192.168.178.45 80 635481a0-6fcd-11e2-8587-eda25228f8bf average 60&lt;br /&gt;
  attr Verbrauch_aktuell group Strom&lt;br /&gt;
  attr Verbrauch_aktuell room Volkszaehler&lt;br /&gt;
&lt;br /&gt;
=== Logdatei ===&lt;br /&gt;
Definition der Logdatei, aus der die Grafik erzeugt werden kann:&lt;br /&gt;
&lt;br /&gt;
  define FileLog_Verbrauch_aktuell FileLog ./log/Verbrauch_aktuell-%Y-%m.log Verbrauch_aktuell&lt;br /&gt;
  attr FileLog_Verbrauch_aktuell logtype text&lt;br /&gt;
  attr Verbrauch_aktuell room Volkszaehler&lt;br /&gt;
&lt;br /&gt;
=== Der Graph dazu ===&lt;br /&gt;
  define FilePlot_Verbrauch_aktuell weblink fileplot FileLog_Verbrauch_aktuell:Volkszaehler:CURRENT&lt;br /&gt;
  attr FilePlot_Verbrauch_aktuell label &amp;quot;Stromverbrauch: $data{currval1}&amp;quot;&lt;br /&gt;
  attr FilePlot_Verbrauch_aktuell room Volkszaehler&lt;br /&gt;
&lt;br /&gt;
=== Zählerstand ===&lt;br /&gt;
Kanal im Volkszaehler, der den Zählerstand per I/R-Lesekopf ermittelt, jede Stunde davon der letzte Wert.&lt;br /&gt;
&lt;br /&gt;
  define Zaehlerstand VOLKSZAEHLER 192.168.178.45 80 ebb9c9b0-7058-11e2-b5ed-d12ec87a3a7f last 1800&lt;br /&gt;
  attr Zaehlerstand group Strom&lt;br /&gt;
  attr Zaehlerstand room Volkszaehler&lt;br /&gt;
&lt;br /&gt;
=== Verbrauch ===&lt;br /&gt;
Kanal im Volkszaehler, der den Zählerstand per I/R-Lesekopf ermittelt, alle 24 Stunden davon der Verbrauch.&lt;br /&gt;
&lt;br /&gt;
  define Verbrauch_24h VOLKSZAEHLER 192.168.178.45 80 635481a0-6fcd-11e2-8587-eda25228f8bf consumption 86400&lt;br /&gt;
  attr Verbrauch_24h group Strom&lt;br /&gt;
  attr Verbrauch_24h room Volkszaehler&lt;br /&gt;
&lt;br /&gt;
=== Ergebnis ===&lt;br /&gt;
[[Datei:23_volkszaehler.JPG|mini|zentriert|hochkant=3.0|Strom- und Gasverbrauch aus Volkszählerdaten generiert - Beispieldarstellung]]&lt;br /&gt;
&lt;br /&gt;
== Daten mit Volkszaehler loggen ==&lt;br /&gt;
Hier eine Möglichkeit mit einem notify Temperaturen (oder andere Messwerte) an die Middelware vom Volkszaehler zu schicken um die Daten über ein Volkszaehler Frontend auswerten zu können:&lt;br /&gt;
   .*:temperature.* {&lt;br /&gt;
    # return &amp;quot;Heizung $NAME&amp;quot; if $NAME =~ /\A.{3}Heizung/; # [[MAX]] Geräte ausschließen. Wordaround für aufgebrauchte credits.&lt;br /&gt;
    my $base_url = AttrVal(&#039;vz&#039;, &#039;vz_URL&#039;, undef);&lt;br /&gt;
    my $temp = ReadingsVal($NAME, &#039;temperature&#039;, undef);&lt;br /&gt;
    my $uuid = AttrVal($NAME, &#039;vz_UUID&#039;, undef);&lt;br /&gt;
    unless (defined($uuid)) {&lt;br /&gt;
      my $create_url = $base_url . &#039;/channel.json?type=temperature&amp;amp;title=&#039; . $NAME . &#039;&amp;amp;public=on&amp;amp;style=lines&amp;amp;operation=add&#039;;&lt;br /&gt;
      Log 5, $create_url;&lt;br /&gt;
      my $response = decode_json(get($create_url));&lt;br /&gt;
      $uuid = $response-&amp;gt;{entity}-&amp;gt;{uuid};&lt;br /&gt;
      $attr{$NAME}{&#039;vz_UUID&#039;} = $uuid;&lt;br /&gt;
      Log 4, &amp;quot;created $uuid for $NAME&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    my $update_url = $base_url . &#039;/data/&#039; . $uuid . &#039;.json?operation=add&amp;amp;value=&#039; . $temp;&lt;br /&gt;
    Log 5, $update_url;&lt;br /&gt;
    Log 4, get($update_url);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Volkszaehler URL wird in einem Attribut (vz_URL) eines dummies gespeichert, welches vorher angelegt werden muss.&lt;br /&gt;
&lt;br /&gt;
  define vz dummy&lt;br /&gt;
  attr vz vz_URL http://localhost/volkszaehler.org/htdocs/middleware.php&lt;br /&gt;
&lt;br /&gt;
Jedes Termometer, dass auch im Volkszaehler erscheinen soll, muss nun nur noch im Volkszaehler angelegt werden und die UUID als Attribut (vz_UUID) des Termometers gespeichert werden. Dieser Schritt kann auch ausgelassen werden. In diesem Fall wird ein neues Termometer automatisch angelegt.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Volkszähler [http://www.volkszaehler.org Homepage]&lt;br /&gt;
* [https://github.com/bgewehr/fhem FHEM Module] für Volkszähler von &amp;quot;bgewehr&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Other Components]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Energieverbrauchsmessung]]&lt;/div&gt;</summary>
		<author><name>Bgewehr</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Volkszaehler&amp;diff=9106</id>
		<title>Volkszaehler</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Volkszaehler&amp;diff=9106"/>
		<updated>2014-12-30T11:45:10Z</updated>

		<summary type="html">&lt;p&gt;Bgewehr: /* Logdatei */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:volkszaehler.png|right]]&lt;br /&gt;
&lt;br /&gt;
Volkszaehler.org ist ein freies SmartMeter Projekt für den Selbstbau ([http://www.volkszaehler.org siehe volkszaehler.org]) Der Nutzer behält dabei die vollständige Kontrolle über die anfallenden Daten seiner Strom-, Wasser- und Gaszähler.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* 100% Open-Source&lt;br /&gt;
* kostenlos&lt;br /&gt;
* offene Protokolle&lt;br /&gt;
* erweiterbar&lt;br /&gt;
* minmale Anforderungen (LAMP-Stack)&lt;br /&gt;
* flexibele Verwaltungsmöglichkeiten&lt;br /&gt;
* Verbrauchs &amp;amp; Kostenprognose&lt;br /&gt;
* verschiedenste Messgrößen&lt;br /&gt;
** Strom&lt;br /&gt;
** Wasser&lt;br /&gt;
** Gas&lt;br /&gt;
** Betriebsstunden&lt;br /&gt;
** Temperatur&lt;br /&gt;
* Läuft u. a. auf Raspberry Pi ([http://wiki.volkszaehler.org/howto/raspberry_pi_image Installationsbeschreibung)]&lt;br /&gt;
&lt;br /&gt;
== Volkszaehler in fhem einbinden ==&lt;br /&gt;
&lt;br /&gt;
Das fhem-Modul für Volkszaehler.org bindet diese Daten in fhem ein. Das Modul 23_volkszaehler.pm greift per http auf den Volkszaehler zu und interpretiert die JSON-Antwort in fhem-device-Readings. Daraus können Logs und Plots gebildet werden oder devices mit Kennzahlen aus den Volkszaehler-Daten. &lt;br /&gt;
&lt;br /&gt;
Es ist z. B. für Solarstrom-Anlagenbesitzer denkbar, bei hoher verfügbarer Sonnenenergie mit fhem Verbraucher einzuschalten, um die Eigenverbrauchsrate zu erhöhen, was die Energiekosten reduziert.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Für die Installation müssen einige Files heruntergeladen und in die richtigen Verzeichnisse kopiert werden.&lt;br /&gt;
&lt;br /&gt;
=== fhem-Modul ===&lt;br /&gt;
&lt;br /&gt;
Meine aktuellen Versionen liegen hier: &amp;lt;code&amp;gt;https://github.com/bgewehr/fhem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Datei &amp;lt;code&amp;gt;23_VOLKSZAEHLER.pm&amp;lt;/code&amp;gt; kommt ins Verzeichnis &amp;lt;code&amp;gt;..\fhem\FHEM\&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Datei &amp;lt;code&amp;gt;volkszaehler.gplot&amp;lt;/code&amp;gt; kommt ins Verzeichnis &amp;lt;code&amp;gt;\..fhem\www\gplot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nur zur Sicherheit: Um die Dateien auf einem Windows-Rechner lokal zu erstellen, bitte den Text aus der &amp;quot;raw&amp;quot; Ansicht aus Github kopieren und bitte nicht in Notepad, sondern in z. B. [http://www.heise.de/download/notepad.html Notepad++] einfügen und dann unter dem richtigen Dateinamen speichern. Mit Notepad von Microsoft werden falsche Zeilenenden erzeugt, die dann unter Linux nicht funktionieren.&lt;br /&gt;
&lt;br /&gt;
=== JSON für Perl ===&lt;br /&gt;
Das Modul nutzt einen JSON-Interpreter, um die Antwort vom Volkszaehler in eine PERL-Variable zu wandeln. Dazu ist ein zusätzliches PERL Modul notwendig.&lt;br /&gt;
&lt;br /&gt;
#&amp;gt; cpan JSON&lt;br /&gt;
&lt;br /&gt;
sollte alle nötigen Dateien installieren. &lt;br /&gt;
&lt;br /&gt;
Hinweis zur Fritz!Box:&lt;br /&gt;
Da die Fritz!Box inzwischen nicht mehr für fhem taugt, habe ich die für diese Installation nötigen beonderen JSON files hier nicht mehr aufgelistet. Auch die aktuelle Version meines Moduls greift auf das aktuelle JSON Perl Modul zurück und wird so auf einer Fritz!Box nicht mehr laufen.&lt;br /&gt;
&lt;br /&gt;
== Definition der devices ==&lt;br /&gt;
Die Device Definitionen werden in einer Konfigurationsdatei (üblicherweise fhem.cfg) angelegt&lt;br /&gt;
&lt;br /&gt;
  define &amp;lt;name&amp;gt; VOLKSZAEHLER &amp;lt;ip-address&amp;gt; &amp;lt;port-nr&amp;gt; &amp;lt;channel&amp;gt; &amp;lt;state:last/min/max/average/consumption&amp;gt; &amp;lt;poll-delay&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;name&amp;gt;: Name des neuen fhem-devices&lt;br /&gt;
* &amp;lt;ip-address&amp;gt;: IP des Volkszaehlers&lt;br /&gt;
* &amp;lt;port-Nr&amp;gt;: Port, auf dem der Volkszaehler-http-Server erreichtbar ist&lt;br /&gt;
* &amp;lt;channel&amp;gt;: UUID des Volkszaehler-Frontend-Channels, der gelesen werden soll&lt;br /&gt;
* &amp;lt;state&amp;gt;: Das Reading, welches als state genommen werden soll, kann im define gewählt werden. Dabei besteht die Auswahl aus&lt;br /&gt;
** last (letzter geladener Wert, manchmal leer bei zu kleinem poll-delay)&lt;br /&gt;
** min (kleinster Wert innerhalb des poll-delay, manchmal leer bei zu kleinem poll-delay)&lt;br /&gt;
** max (größter Wert innerhalb des poll-delay, manchmal leer bei zu kleinem poll-delay)&lt;br /&gt;
** average (Durchschnitt der Werte im poll-delay, manchmal leer bei zu kleinem poll-delay)&lt;br /&gt;
** consumption (Verbrauch innerhalb des poll-delays, manchmal leer bei zu kleinem poll-delay)&lt;br /&gt;
* &amp;lt;poll-delay&amp;gt;: Zeitraum, der ausgelesen werden soll in Sekunden&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
Ein vollständiges Beispiel für die erforderlichen Definitionen und das daraus resultierende Ergebnis:&lt;br /&gt;
&lt;br /&gt;
=== Momentanverbrauch ===&lt;br /&gt;
Kanal im Volkszaehler, der den Momentanverbrauch per I/R-Lesekopf ermittelt (alle 60 Sekunden, daraus der Mittelwert)&lt;br /&gt;
&lt;br /&gt;
  define Verbrauch_aktuell VOLKSZAEHLER 192.168.178.45 80 635481a0-6fcd-11e2-8587-eda25228f8bf average 60&lt;br /&gt;
  attr Verbrauch_aktuell group Strom&lt;br /&gt;
  attr Verbrauch_aktuell room Volkszaehler&lt;br /&gt;
&lt;br /&gt;
=== Logdatei ===&lt;br /&gt;
Definition der Logdatei, aus der die Grafik erzeugt werden kann:&lt;br /&gt;
&lt;br /&gt;
  define FileLog_Verbrauch_aktuell FileLog ./log/Verbrauch_aktuell-%Y-%m.log Verbrauch_aktuell&lt;br /&gt;
  attr FileLog_Verbrauch_aktuell logtype text&lt;br /&gt;
  attr Verbrauch_aktuell room Volkszaehler&lt;br /&gt;
&lt;br /&gt;
=== Der Graph dazu ===&lt;br /&gt;
  define FilePlot_Verbrauch_aktuell weblink fileplot FileLog_Verbrauch_aktuell:Volkszaehler:CURRENT&lt;br /&gt;
  attr FilePlot_Verbrauch_aktuell label &amp;quot;Stromverbrauch: $data{currval1}&amp;quot;&lt;br /&gt;
  attr FilePlot_Verbrauch_aktuell room Volkszaehler&lt;br /&gt;
&lt;br /&gt;
=== Zählerstand ===&lt;br /&gt;
Kanal im Volkszaehler, der den Zählerstand per I/R-Lesekopf ermittelt, jede Stunde davon der letzte Wert.&lt;br /&gt;
&lt;br /&gt;
  define Zaehlerstand VOLKSZAEHLER 192.168.178.45 80 ebb9c9b0-7058-11e2-b5ed-d12ec87a3a7f last 1800&lt;br /&gt;
  attr Zaehlerstand group Strom&lt;br /&gt;
  attr Zaehlerstand room Volkszaehler&lt;br /&gt;
&lt;br /&gt;
=== Verbrauch ===&lt;br /&gt;
Kanal im Volkszaehler, der den Zählerstand per I/R-Lesekopf ermittelt, alle 24 Stunden davon der Verbrauch.&lt;br /&gt;
&lt;br /&gt;
  define Verbrauch_24h VOLKSZAEHLER 192.168.178.45 80 635481a0-6fcd-11e2-8587-eda25228f8bf consumption 86400&lt;br /&gt;
  attr Verbrauch_24h group Strom&lt;br /&gt;
  attr Verbrauch_24h room Volkszaehler&lt;br /&gt;
&lt;br /&gt;
=== Ergebnis ===&lt;br /&gt;
[[Datei:23_volkszaehler.JPG|mini|zentriert|hochkant=3.0|Strom- und Gasverbrauch aus Volkszählerdaten generiert - Beispieldarstellung]]&lt;br /&gt;
&lt;br /&gt;
== Daten mit Volkszaehler loggen ==&lt;br /&gt;
Hier eine Möglichkeit mit einem notify Temperaturen (oder andere Messwerte) an die Middelware vom Volkszaehler zu schicken um die Daten über ein Volkszaehler Frontend auswerten zu können:&lt;br /&gt;
   .*:temperature.* {&lt;br /&gt;
    # return &amp;quot;Heizung $NAME&amp;quot; if $NAME =~ /\A.{3}Heizung/; # [[MAX]] Geräte ausschließen. Wordaround für aufgebrauchte credits.&lt;br /&gt;
    my $base_url = AttrVal(&#039;vz&#039;, &#039;vz_URL&#039;, undef);&lt;br /&gt;
    my $temp = ReadingsVal($NAME, &#039;temperature&#039;, undef);&lt;br /&gt;
    my $uuid = AttrVal($NAME, &#039;vz_UUID&#039;, undef);&lt;br /&gt;
    unless (defined($uuid)) {&lt;br /&gt;
      my $create_url = $base_url . &#039;/channel.json?type=temperature&amp;amp;title=&#039; . $NAME . &#039;&amp;amp;public=on&amp;amp;style=lines&amp;amp;operation=add&#039;;&lt;br /&gt;
      Log 5, $create_url;&lt;br /&gt;
      my $response = decode_json(get($create_url));&lt;br /&gt;
      $uuid = $response-&amp;gt;{entity}-&amp;gt;{uuid};&lt;br /&gt;
      $attr{$NAME}{&#039;vz_UUID&#039;} = $uuid;&lt;br /&gt;
      Log 4, &amp;quot;created $uuid for $NAME&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    my $update_url = $base_url . &#039;/data/&#039; . $uuid . &#039;.json?operation=add&amp;amp;value=&#039; . $temp;&lt;br /&gt;
    Log 5, $update_url;&lt;br /&gt;
    Log 4, get($update_url);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Volkszaehler URL wird in einem Attribut (vz_URL) eines dummies gespeichert, welches vorher angelegt werden muss.&lt;br /&gt;
&lt;br /&gt;
  define vz dummy&lt;br /&gt;
  attr vz vz_URL http://localhost/volkszaehler.org/htdocs/middleware.php&lt;br /&gt;
&lt;br /&gt;
Jedes Termometer, dass auch im Volkszaehler erscheinen soll, muss nun nur noch im Volkszaehler angelegt werden und die UUID als Attribut (vz_UUID) des Termometers gespeichert werden. Dieser Schritt kann auch ausgelassen werden. In diesem Fall wird ein neues Termometer automatisch angelegt.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Volkszähler [http://www.volkszaehler.org Homepage]&lt;br /&gt;
* [https://github.com/bgewehr/fhem FHEM Module] für Volkszähler von &amp;quot;bgewehr&amp;quot;&lt;br /&gt;
* Quellen von JSON für Perl: [http://cpansearch.perl.org/src/MAKAMAKA/JSON-1.15/lib/JSON/ CPAN] / [https://github.com/makamaka/JSON/tree/master/lib github]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Other Components]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Energieverbrauchsmessung]]&lt;/div&gt;</summary>
		<author><name>Bgewehr</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Volkszaehler&amp;diff=9105</id>
		<title>Volkszaehler</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Volkszaehler&amp;diff=9105"/>
		<updated>2014-12-30T11:44:39Z</updated>

		<summary type="html">&lt;p&gt;Bgewehr: /* Logdatei */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:volkszaehler.png|right]]&lt;br /&gt;
&lt;br /&gt;
Volkszaehler.org ist ein freies SmartMeter Projekt für den Selbstbau ([http://www.volkszaehler.org siehe volkszaehler.org]) Der Nutzer behält dabei die vollständige Kontrolle über die anfallenden Daten seiner Strom-, Wasser- und Gaszähler.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* 100% Open-Source&lt;br /&gt;
* kostenlos&lt;br /&gt;
* offene Protokolle&lt;br /&gt;
* erweiterbar&lt;br /&gt;
* minmale Anforderungen (LAMP-Stack)&lt;br /&gt;
* flexibele Verwaltungsmöglichkeiten&lt;br /&gt;
* Verbrauchs &amp;amp; Kostenprognose&lt;br /&gt;
* verschiedenste Messgrößen&lt;br /&gt;
** Strom&lt;br /&gt;
** Wasser&lt;br /&gt;
** Gas&lt;br /&gt;
** Betriebsstunden&lt;br /&gt;
** Temperatur&lt;br /&gt;
* Läuft u. a. auf Raspberry Pi ([http://wiki.volkszaehler.org/howto/raspberry_pi_image Installationsbeschreibung)]&lt;br /&gt;
&lt;br /&gt;
== Volkszaehler in fhem einbinden ==&lt;br /&gt;
&lt;br /&gt;
Das fhem-Modul für Volkszaehler.org bindet diese Daten in fhem ein. Das Modul 23_volkszaehler.pm greift per http auf den Volkszaehler zu und interpretiert die JSON-Antwort in fhem-device-Readings. Daraus können Logs und Plots gebildet werden oder devices mit Kennzahlen aus den Volkszaehler-Daten. &lt;br /&gt;
&lt;br /&gt;
Es ist z. B. für Solarstrom-Anlagenbesitzer denkbar, bei hoher verfügbarer Sonnenenergie mit fhem Verbraucher einzuschalten, um die Eigenverbrauchsrate zu erhöhen, was die Energiekosten reduziert.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Für die Installation müssen einige Files heruntergeladen und in die richtigen Verzeichnisse kopiert werden.&lt;br /&gt;
&lt;br /&gt;
=== fhem-Modul ===&lt;br /&gt;
&lt;br /&gt;
Meine aktuellen Versionen liegen hier: &amp;lt;code&amp;gt;https://github.com/bgewehr/fhem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Datei &amp;lt;code&amp;gt;23_VOLKSZAEHLER.pm&amp;lt;/code&amp;gt; kommt ins Verzeichnis &amp;lt;code&amp;gt;..\fhem\FHEM\&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Datei &amp;lt;code&amp;gt;volkszaehler.gplot&amp;lt;/code&amp;gt; kommt ins Verzeichnis &amp;lt;code&amp;gt;\..fhem\www\gplot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nur zur Sicherheit: Um die Dateien auf einem Windows-Rechner lokal zu erstellen, bitte den Text aus der &amp;quot;raw&amp;quot; Ansicht aus Github kopieren und bitte nicht in Notepad, sondern in z. B. [http://www.heise.de/download/notepad.html Notepad++] einfügen und dann unter dem richtigen Dateinamen speichern. Mit Notepad von Microsoft werden falsche Zeilenenden erzeugt, die dann unter Linux nicht funktionieren.&lt;br /&gt;
&lt;br /&gt;
=== JSON für Perl ===&lt;br /&gt;
Das Modul nutzt einen JSON-Interpreter, um die Antwort vom Volkszaehler in eine PERL-Variable zu wandeln. Dazu ist ein zusätzliches PERL Modul notwendig.&lt;br /&gt;
&lt;br /&gt;
#&amp;gt; cpan JSON&lt;br /&gt;
&lt;br /&gt;
sollte alle nötigen Dateien installieren. &lt;br /&gt;
&lt;br /&gt;
Hinweis zur Fritz!Box:&lt;br /&gt;
Da die Fritz!Box inzwischen nicht mehr für fhem taugt, habe ich die für diese Installation nötigen beonderen JSON files hier nicht mehr aufgelistet. Auch die aktuelle Version meines Moduls greift auf das aktuelle JSON Perl Modul zurück und wird so auf einer Fritz!Box nicht mehr laufen.&lt;br /&gt;
&lt;br /&gt;
== Definition der devices ==&lt;br /&gt;
Die Device Definitionen werden in einer Konfigurationsdatei (üblicherweise fhem.cfg) angelegt&lt;br /&gt;
&lt;br /&gt;
  define &amp;lt;name&amp;gt; VOLKSZAEHLER &amp;lt;ip-address&amp;gt; &amp;lt;port-nr&amp;gt; &amp;lt;channel&amp;gt; &amp;lt;state:last/min/max/average/consumption&amp;gt; &amp;lt;poll-delay&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;name&amp;gt;: Name des neuen fhem-devices&lt;br /&gt;
* &amp;lt;ip-address&amp;gt;: IP des Volkszaehlers&lt;br /&gt;
* &amp;lt;port-Nr&amp;gt;: Port, auf dem der Volkszaehler-http-Server erreichtbar ist&lt;br /&gt;
* &amp;lt;channel&amp;gt;: UUID des Volkszaehler-Frontend-Channels, der gelesen werden soll&lt;br /&gt;
* &amp;lt;state&amp;gt;: Das Reading, welches als state genommen werden soll, kann im define gewählt werden. Dabei besteht die Auswahl aus&lt;br /&gt;
** last (letzter geladener Wert, manchmal leer bei zu kleinem poll-delay)&lt;br /&gt;
** min (kleinster Wert innerhalb des poll-delay, manchmal leer bei zu kleinem poll-delay)&lt;br /&gt;
** max (größter Wert innerhalb des poll-delay, manchmal leer bei zu kleinem poll-delay)&lt;br /&gt;
** average (Durchschnitt der Werte im poll-delay, manchmal leer bei zu kleinem poll-delay)&lt;br /&gt;
** consumption (Verbrauch innerhalb des poll-delays, manchmal leer bei zu kleinem poll-delay)&lt;br /&gt;
* &amp;lt;poll-delay&amp;gt;: Zeitraum, der ausgelesen werden soll in Sekunden&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
Ein vollständiges Beispiel für die erforderlichen Definitionen und das daraus resultierende Ergebnis:&lt;br /&gt;
&lt;br /&gt;
=== Momentanverbrauch ===&lt;br /&gt;
Kanal im Volkszaehler, der den Momentanverbrauch per I/R-Lesekopf ermittelt (alle 60 Sekunden, daraus der Mittelwert)&lt;br /&gt;
&lt;br /&gt;
  define Verbrauch_aktuell VOLKSZAEHLER 192.168.178.45 80 635481a0-6fcd-11e2-8587-eda25228f8bf average 60&lt;br /&gt;
  attr Verbrauch_aktuell group Strom&lt;br /&gt;
  attr Verbrauch_aktuell room Volkszaehler&lt;br /&gt;
&lt;br /&gt;
=== Logdatei ===&lt;br /&gt;
Definition der Logdatei, aus der die Grafik erzeugt werden kann:&lt;br /&gt;
&lt;br /&gt;
  define FileLog_Verbrauch_aktuell FileLog ./log/Verbrauch_aktuell-%Y-%m.log Verbrauch_aktuell&lt;br /&gt;
  attr FileLog_Verbrauch_aktuell logtype text&lt;br /&gt;
&lt;br /&gt;
=== Der Graph dazu ===&lt;br /&gt;
  define FilePlot_Verbrauch_aktuell weblink fileplot FileLog_Verbrauch_aktuell:Volkszaehler:CURRENT&lt;br /&gt;
  attr FilePlot_Verbrauch_aktuell label &amp;quot;Stromverbrauch: $data{currval1}&amp;quot;&lt;br /&gt;
  attr FilePlot_Verbrauch_aktuell room Volkszaehler&lt;br /&gt;
&lt;br /&gt;
=== Zählerstand ===&lt;br /&gt;
Kanal im Volkszaehler, der den Zählerstand per I/R-Lesekopf ermittelt, jede Stunde davon der letzte Wert.&lt;br /&gt;
&lt;br /&gt;
  define Zaehlerstand VOLKSZAEHLER 192.168.178.45 80 ebb9c9b0-7058-11e2-b5ed-d12ec87a3a7f last 1800&lt;br /&gt;
  attr Zaehlerstand group Strom&lt;br /&gt;
  attr Zaehlerstand room Volkszaehler&lt;br /&gt;
&lt;br /&gt;
=== Verbrauch ===&lt;br /&gt;
Kanal im Volkszaehler, der den Zählerstand per I/R-Lesekopf ermittelt, alle 24 Stunden davon der Verbrauch.&lt;br /&gt;
&lt;br /&gt;
  define Verbrauch_24h VOLKSZAEHLER 192.168.178.45 80 635481a0-6fcd-11e2-8587-eda25228f8bf consumption 86400&lt;br /&gt;
  attr Verbrauch_24h group Strom&lt;br /&gt;
  attr Verbrauch_24h room Volkszaehler&lt;br /&gt;
&lt;br /&gt;
=== Ergebnis ===&lt;br /&gt;
[[Datei:23_volkszaehler.JPG|mini|zentriert|hochkant=3.0|Strom- und Gasverbrauch aus Volkszählerdaten generiert - Beispieldarstellung]]&lt;br /&gt;
&lt;br /&gt;
== Daten mit Volkszaehler loggen ==&lt;br /&gt;
Hier eine Möglichkeit mit einem notify Temperaturen (oder andere Messwerte) an die Middelware vom Volkszaehler zu schicken um die Daten über ein Volkszaehler Frontend auswerten zu können:&lt;br /&gt;
   .*:temperature.* {&lt;br /&gt;
    # return &amp;quot;Heizung $NAME&amp;quot; if $NAME =~ /\A.{3}Heizung/; # [[MAX]] Geräte ausschließen. Wordaround für aufgebrauchte credits.&lt;br /&gt;
    my $base_url = AttrVal(&#039;vz&#039;, &#039;vz_URL&#039;, undef);&lt;br /&gt;
    my $temp = ReadingsVal($NAME, &#039;temperature&#039;, undef);&lt;br /&gt;
    my $uuid = AttrVal($NAME, &#039;vz_UUID&#039;, undef);&lt;br /&gt;
    unless (defined($uuid)) {&lt;br /&gt;
      my $create_url = $base_url . &#039;/channel.json?type=temperature&amp;amp;title=&#039; . $NAME . &#039;&amp;amp;public=on&amp;amp;style=lines&amp;amp;operation=add&#039;;&lt;br /&gt;
      Log 5, $create_url;&lt;br /&gt;
      my $response = decode_json(get($create_url));&lt;br /&gt;
      $uuid = $response-&amp;gt;{entity}-&amp;gt;{uuid};&lt;br /&gt;
      $attr{$NAME}{&#039;vz_UUID&#039;} = $uuid;&lt;br /&gt;
      Log 4, &amp;quot;created $uuid for $NAME&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    my $update_url = $base_url . &#039;/data/&#039; . $uuid . &#039;.json?operation=add&amp;amp;value=&#039; . $temp;&lt;br /&gt;
    Log 5, $update_url;&lt;br /&gt;
    Log 4, get($update_url);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Volkszaehler URL wird in einem Attribut (vz_URL) eines dummies gespeichert, welches vorher angelegt werden muss.&lt;br /&gt;
&lt;br /&gt;
  define vz dummy&lt;br /&gt;
  attr vz vz_URL http://localhost/volkszaehler.org/htdocs/middleware.php&lt;br /&gt;
&lt;br /&gt;
Jedes Termometer, dass auch im Volkszaehler erscheinen soll, muss nun nur noch im Volkszaehler angelegt werden und die UUID als Attribut (vz_UUID) des Termometers gespeichert werden. Dieser Schritt kann auch ausgelassen werden. In diesem Fall wird ein neues Termometer automatisch angelegt.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Volkszähler [http://www.volkszaehler.org Homepage]&lt;br /&gt;
* [https://github.com/bgewehr/fhem FHEM Module] für Volkszähler von &amp;quot;bgewehr&amp;quot;&lt;br /&gt;
* Quellen von JSON für Perl: [http://cpansearch.perl.org/src/MAKAMAKA/JSON-1.15/lib/JSON/ CPAN] / [https://github.com/makamaka/JSON/tree/master/lib github]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Other Components]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Energieverbrauchsmessung]]&lt;/div&gt;</summary>
		<author><name>Bgewehr</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Volkszaehler&amp;diff=9104</id>
		<title>Volkszaehler</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Volkszaehler&amp;diff=9104"/>
		<updated>2014-12-30T11:44:04Z</updated>

		<summary type="html">&lt;p&gt;Bgewehr: /* JSON für Perl */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:volkszaehler.png|right]]&lt;br /&gt;
&lt;br /&gt;
Volkszaehler.org ist ein freies SmartMeter Projekt für den Selbstbau ([http://www.volkszaehler.org siehe volkszaehler.org]) Der Nutzer behält dabei die vollständige Kontrolle über die anfallenden Daten seiner Strom-, Wasser- und Gaszähler.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* 100% Open-Source&lt;br /&gt;
* kostenlos&lt;br /&gt;
* offene Protokolle&lt;br /&gt;
* erweiterbar&lt;br /&gt;
* minmale Anforderungen (LAMP-Stack)&lt;br /&gt;
* flexibele Verwaltungsmöglichkeiten&lt;br /&gt;
* Verbrauchs &amp;amp; Kostenprognose&lt;br /&gt;
* verschiedenste Messgrößen&lt;br /&gt;
** Strom&lt;br /&gt;
** Wasser&lt;br /&gt;
** Gas&lt;br /&gt;
** Betriebsstunden&lt;br /&gt;
** Temperatur&lt;br /&gt;
* Läuft u. a. auf Raspberry Pi ([http://wiki.volkszaehler.org/howto/raspberry_pi_image Installationsbeschreibung)]&lt;br /&gt;
&lt;br /&gt;
== Volkszaehler in fhem einbinden ==&lt;br /&gt;
&lt;br /&gt;
Das fhem-Modul für Volkszaehler.org bindet diese Daten in fhem ein. Das Modul 23_volkszaehler.pm greift per http auf den Volkszaehler zu und interpretiert die JSON-Antwort in fhem-device-Readings. Daraus können Logs und Plots gebildet werden oder devices mit Kennzahlen aus den Volkszaehler-Daten. &lt;br /&gt;
&lt;br /&gt;
Es ist z. B. für Solarstrom-Anlagenbesitzer denkbar, bei hoher verfügbarer Sonnenenergie mit fhem Verbraucher einzuschalten, um die Eigenverbrauchsrate zu erhöhen, was die Energiekosten reduziert.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Für die Installation müssen einige Files heruntergeladen und in die richtigen Verzeichnisse kopiert werden.&lt;br /&gt;
&lt;br /&gt;
=== fhem-Modul ===&lt;br /&gt;
&lt;br /&gt;
Meine aktuellen Versionen liegen hier: &amp;lt;code&amp;gt;https://github.com/bgewehr/fhem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Datei &amp;lt;code&amp;gt;23_VOLKSZAEHLER.pm&amp;lt;/code&amp;gt; kommt ins Verzeichnis &amp;lt;code&amp;gt;..\fhem\FHEM\&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Datei &amp;lt;code&amp;gt;volkszaehler.gplot&amp;lt;/code&amp;gt; kommt ins Verzeichnis &amp;lt;code&amp;gt;\..fhem\www\gplot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nur zur Sicherheit: Um die Dateien auf einem Windows-Rechner lokal zu erstellen, bitte den Text aus der &amp;quot;raw&amp;quot; Ansicht aus Github kopieren und bitte nicht in Notepad, sondern in z. B. [http://www.heise.de/download/notepad.html Notepad++] einfügen und dann unter dem richtigen Dateinamen speichern. Mit Notepad von Microsoft werden falsche Zeilenenden erzeugt, die dann unter Linux nicht funktionieren.&lt;br /&gt;
&lt;br /&gt;
=== JSON für Perl ===&lt;br /&gt;
Das Modul nutzt einen JSON-Interpreter, um die Antwort vom Volkszaehler in eine PERL-Variable zu wandeln. Dazu ist ein zusätzliches PERL Modul notwendig.&lt;br /&gt;
&lt;br /&gt;
#&amp;gt; cpan JSON&lt;br /&gt;
&lt;br /&gt;
sollte alle nötigen Dateien installieren. &lt;br /&gt;
&lt;br /&gt;
Hinweis zur Fritz!Box:&lt;br /&gt;
Da die Fritz!Box inzwischen nicht mehr für fhem taugt, habe ich die für diese Installation nötigen beonderen JSON files hier nicht mehr aufgelistet. Auch die aktuelle Version meines Moduls greift auf das aktuelle JSON Perl Modul zurück und wird so auf einer Fritz!Box nicht mehr laufen.&lt;br /&gt;
&lt;br /&gt;
== Definition der devices ==&lt;br /&gt;
Die Device Definitionen werden in einer Konfigurationsdatei (üblicherweise fhem.cfg) angelegt&lt;br /&gt;
&lt;br /&gt;
  define &amp;lt;name&amp;gt; VOLKSZAEHLER &amp;lt;ip-address&amp;gt; &amp;lt;port-nr&amp;gt; &amp;lt;channel&amp;gt; &amp;lt;state:last/min/max/average/consumption&amp;gt; &amp;lt;poll-delay&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;name&amp;gt;: Name des neuen fhem-devices&lt;br /&gt;
* &amp;lt;ip-address&amp;gt;: IP des Volkszaehlers&lt;br /&gt;
* &amp;lt;port-Nr&amp;gt;: Port, auf dem der Volkszaehler-http-Server erreichtbar ist&lt;br /&gt;
* &amp;lt;channel&amp;gt;: UUID des Volkszaehler-Frontend-Channels, der gelesen werden soll&lt;br /&gt;
* &amp;lt;state&amp;gt;: Das Reading, welches als state genommen werden soll, kann im define gewählt werden. Dabei besteht die Auswahl aus&lt;br /&gt;
** last (letzter geladener Wert, manchmal leer bei zu kleinem poll-delay)&lt;br /&gt;
** min (kleinster Wert innerhalb des poll-delay, manchmal leer bei zu kleinem poll-delay)&lt;br /&gt;
** max (größter Wert innerhalb des poll-delay, manchmal leer bei zu kleinem poll-delay)&lt;br /&gt;
** average (Durchschnitt der Werte im poll-delay, manchmal leer bei zu kleinem poll-delay)&lt;br /&gt;
** consumption (Verbrauch innerhalb des poll-delays, manchmal leer bei zu kleinem poll-delay)&lt;br /&gt;
* &amp;lt;poll-delay&amp;gt;: Zeitraum, der ausgelesen werden soll in Sekunden&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
Ein vollständiges Beispiel für die erforderlichen Definitionen und das daraus resultierende Ergebnis:&lt;br /&gt;
&lt;br /&gt;
=== Momentanverbrauch ===&lt;br /&gt;
Kanal im Volkszaehler, der den Momentanverbrauch per I/R-Lesekopf ermittelt (alle 60 Sekunden, daraus der Mittelwert)&lt;br /&gt;
&lt;br /&gt;
  define Verbrauch_aktuell VOLKSZAEHLER 192.168.178.45 80 635481a0-6fcd-11e2-8587-eda25228f8bf average 60&lt;br /&gt;
  attr Verbrauch_aktuell group Strom&lt;br /&gt;
  attr Verbrauch_aktuell room Volkszaehler&lt;br /&gt;
&lt;br /&gt;
=== Logdatei ===&lt;br /&gt;
Definition der Logdatei, aus der die Grafik erzeugt werden kann:&lt;br /&gt;
&lt;br /&gt;
  define FileLog_Verbrauch_aktuell FileLog ./log/Verbrauch_aktuell-%Y-%m.log Verbrauch_aktuell&lt;br /&gt;
  attr FileLog_Verbrauch_aktuell group Volkszaehler&lt;br /&gt;
  attr FileLog_Verbrauch_aktuell logtype text&lt;br /&gt;
  attr FileLog_Verbrauch_aktuell room Z_Log&lt;br /&gt;
&lt;br /&gt;
=== Der Graph dazu ===&lt;br /&gt;
  define FilePlot_Verbrauch_aktuell weblink fileplot FileLog_Verbrauch_aktuell:Volkszaehler:CURRENT&lt;br /&gt;
  attr FilePlot_Verbrauch_aktuell label &amp;quot;Stromverbrauch: $data{currval1}&amp;quot;&lt;br /&gt;
  attr FilePlot_Verbrauch_aktuell room Volkszaehler&lt;br /&gt;
&lt;br /&gt;
=== Zählerstand ===&lt;br /&gt;
Kanal im Volkszaehler, der den Zählerstand per I/R-Lesekopf ermittelt, jede Stunde davon der letzte Wert.&lt;br /&gt;
&lt;br /&gt;
  define Zaehlerstand VOLKSZAEHLER 192.168.178.45 80 ebb9c9b0-7058-11e2-b5ed-d12ec87a3a7f last 1800&lt;br /&gt;
  attr Zaehlerstand group Strom&lt;br /&gt;
  attr Zaehlerstand room Volkszaehler&lt;br /&gt;
&lt;br /&gt;
=== Verbrauch ===&lt;br /&gt;
Kanal im Volkszaehler, der den Zählerstand per I/R-Lesekopf ermittelt, alle 24 Stunden davon der Verbrauch.&lt;br /&gt;
&lt;br /&gt;
  define Verbrauch_24h VOLKSZAEHLER 192.168.178.45 80 635481a0-6fcd-11e2-8587-eda25228f8bf consumption 86400&lt;br /&gt;
  attr Verbrauch_24h group Strom&lt;br /&gt;
  attr Verbrauch_24h room Volkszaehler&lt;br /&gt;
&lt;br /&gt;
=== Ergebnis ===&lt;br /&gt;
[[Datei:23_volkszaehler.JPG|mini|zentriert|hochkant=3.0|Strom- und Gasverbrauch aus Volkszählerdaten generiert - Beispieldarstellung]]&lt;br /&gt;
&lt;br /&gt;
== Daten mit Volkszaehler loggen ==&lt;br /&gt;
Hier eine Möglichkeit mit einem notify Temperaturen (oder andere Messwerte) an die Middelware vom Volkszaehler zu schicken um die Daten über ein Volkszaehler Frontend auswerten zu können:&lt;br /&gt;
   .*:temperature.* {&lt;br /&gt;
    # return &amp;quot;Heizung $NAME&amp;quot; if $NAME =~ /\A.{3}Heizung/; # [[MAX]] Geräte ausschließen. Wordaround für aufgebrauchte credits.&lt;br /&gt;
    my $base_url = AttrVal(&#039;vz&#039;, &#039;vz_URL&#039;, undef);&lt;br /&gt;
    my $temp = ReadingsVal($NAME, &#039;temperature&#039;, undef);&lt;br /&gt;
    my $uuid = AttrVal($NAME, &#039;vz_UUID&#039;, undef);&lt;br /&gt;
    unless (defined($uuid)) {&lt;br /&gt;
      my $create_url = $base_url . &#039;/channel.json?type=temperature&amp;amp;title=&#039; . $NAME . &#039;&amp;amp;public=on&amp;amp;style=lines&amp;amp;operation=add&#039;;&lt;br /&gt;
      Log 5, $create_url;&lt;br /&gt;
      my $response = decode_json(get($create_url));&lt;br /&gt;
      $uuid = $response-&amp;gt;{entity}-&amp;gt;{uuid};&lt;br /&gt;
      $attr{$NAME}{&#039;vz_UUID&#039;} = $uuid;&lt;br /&gt;
      Log 4, &amp;quot;created $uuid for $NAME&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    my $update_url = $base_url . &#039;/data/&#039; . $uuid . &#039;.json?operation=add&amp;amp;value=&#039; . $temp;&lt;br /&gt;
    Log 5, $update_url;&lt;br /&gt;
    Log 4, get($update_url);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Volkszaehler URL wird in einem Attribut (vz_URL) eines dummies gespeichert, welches vorher angelegt werden muss.&lt;br /&gt;
&lt;br /&gt;
  define vz dummy&lt;br /&gt;
  attr vz vz_URL http://localhost/volkszaehler.org/htdocs/middleware.php&lt;br /&gt;
&lt;br /&gt;
Jedes Termometer, dass auch im Volkszaehler erscheinen soll, muss nun nur noch im Volkszaehler angelegt werden und die UUID als Attribut (vz_UUID) des Termometers gespeichert werden. Dieser Schritt kann auch ausgelassen werden. In diesem Fall wird ein neues Termometer automatisch angelegt.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Volkszähler [http://www.volkszaehler.org Homepage]&lt;br /&gt;
* [https://github.com/bgewehr/fhem FHEM Module] für Volkszähler von &amp;quot;bgewehr&amp;quot;&lt;br /&gt;
* Quellen von JSON für Perl: [http://cpansearch.perl.org/src/MAKAMAKA/JSON-1.15/lib/JSON/ CPAN] / [https://github.com/makamaka/JSON/tree/master/lib github]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Other Components]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Energieverbrauchsmessung]]&lt;/div&gt;</summary>
		<author><name>Bgewehr</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Volkszaehler&amp;diff=9103</id>
		<title>Volkszaehler</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Volkszaehler&amp;diff=9103"/>
		<updated>2014-12-30T11:40:51Z</updated>

		<summary type="html">&lt;p&gt;Bgewehr: /* fhem-Modul */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:volkszaehler.png|right]]&lt;br /&gt;
&lt;br /&gt;
Volkszaehler.org ist ein freies SmartMeter Projekt für den Selbstbau ([http://www.volkszaehler.org siehe volkszaehler.org]) Der Nutzer behält dabei die vollständige Kontrolle über die anfallenden Daten seiner Strom-, Wasser- und Gaszähler.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* 100% Open-Source&lt;br /&gt;
* kostenlos&lt;br /&gt;
* offene Protokolle&lt;br /&gt;
* erweiterbar&lt;br /&gt;
* minmale Anforderungen (LAMP-Stack)&lt;br /&gt;
* flexibele Verwaltungsmöglichkeiten&lt;br /&gt;
* Verbrauchs &amp;amp; Kostenprognose&lt;br /&gt;
* verschiedenste Messgrößen&lt;br /&gt;
** Strom&lt;br /&gt;
** Wasser&lt;br /&gt;
** Gas&lt;br /&gt;
** Betriebsstunden&lt;br /&gt;
** Temperatur&lt;br /&gt;
* Läuft u. a. auf Raspberry Pi ([http://wiki.volkszaehler.org/howto/raspberry_pi_image Installationsbeschreibung)]&lt;br /&gt;
&lt;br /&gt;
== Volkszaehler in fhem einbinden ==&lt;br /&gt;
&lt;br /&gt;
Das fhem-Modul für Volkszaehler.org bindet diese Daten in fhem ein. Das Modul 23_volkszaehler.pm greift per http auf den Volkszaehler zu und interpretiert die JSON-Antwort in fhem-device-Readings. Daraus können Logs und Plots gebildet werden oder devices mit Kennzahlen aus den Volkszaehler-Daten. &lt;br /&gt;
&lt;br /&gt;
Es ist z. B. für Solarstrom-Anlagenbesitzer denkbar, bei hoher verfügbarer Sonnenenergie mit fhem Verbraucher einzuschalten, um die Eigenverbrauchsrate zu erhöhen, was die Energiekosten reduziert.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Für die Installation müssen einige Files heruntergeladen und in die richtigen Verzeichnisse kopiert werden.&lt;br /&gt;
&lt;br /&gt;
=== fhem-Modul ===&lt;br /&gt;
&lt;br /&gt;
Meine aktuellen Versionen liegen hier: &amp;lt;code&amp;gt;https://github.com/bgewehr/fhem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Datei &amp;lt;code&amp;gt;23_VOLKSZAEHLER.pm&amp;lt;/code&amp;gt; kommt ins Verzeichnis &amp;lt;code&amp;gt;..\fhem\FHEM\&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Datei &amp;lt;code&amp;gt;volkszaehler.gplot&amp;lt;/code&amp;gt; kommt ins Verzeichnis &amp;lt;code&amp;gt;\..fhem\www\gplot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nur zur Sicherheit: Um die Dateien auf einem Windows-Rechner lokal zu erstellen, bitte den Text aus der &amp;quot;raw&amp;quot; Ansicht aus Github kopieren und bitte nicht in Notepad, sondern in z. B. [http://www.heise.de/download/notepad.html Notepad++] einfügen und dann unter dem richtigen Dateinamen speichern. Mit Notepad von Microsoft werden falsche Zeilenenden erzeugt, die dann unter Linux nicht funktionieren.&lt;br /&gt;
&lt;br /&gt;
=== JSON für Perl ===&lt;br /&gt;
Das Modul nutzt einen JSON-Interpreter, um die Antwort vom Volkszaehler in eine PERL-Variable zu wandeln. Dazu sind einige zusätzliche PERL Module notwendig.&lt;br /&gt;
&lt;br /&gt;
JSON für PERL kann von hier geladen werden:&lt;br /&gt;
&lt;br /&gt;
   http://cpansearch.perl.org/src/MAKAMAKA/JSON-1.15/lib/JSON/&lt;br /&gt;
   oder&lt;br /&gt;
   https://github.com/makamaka/JSON/tree/master/lib&lt;br /&gt;
&lt;br /&gt;
Das File JSON.pm muss auf einer Fritzbox 7390 mit fhem im internen Speicher in das Verzeichnis &lt;br /&gt;
&lt;br /&gt;
    \\fritz.box\FRITZ.NAS\fhem\lib\perl5\site_perl\5.12.2\mips-linux\&lt;br /&gt;
&lt;br /&gt;
Für die Files Converter.pm und Parser.pm wird ein neues Verzeichnis angelegt:&lt;br /&gt;
&lt;br /&gt;
    \\fritz.box\FRITZ.NAS\fhem\lib\perl5\site_perl\5.12.2\mips-linux\JSON\&lt;br /&gt;
&lt;br /&gt;
und die files dann dort abgelegt.&lt;br /&gt;
&lt;br /&gt;
Auf anderen Plattformen müssen die Pfade ggf. entsprechend angepasst werden. Im Script startfhem werden die lib-Pfade mit&lt;br /&gt;
&lt;br /&gt;
   export xyz=pfad:pfad  &lt;br /&gt;
&lt;br /&gt;
angegeben, in die man die files ablegen kann, damit sie beim Aufruf gefunden werden.&lt;br /&gt;
&lt;br /&gt;
== Definition der devices ==&lt;br /&gt;
Die Device Definitionen werden in einer Konfigurationsdatei (üblicherweise fhem.cfg) angelegt&lt;br /&gt;
&lt;br /&gt;
  define &amp;lt;name&amp;gt; VOLKSZAEHLER &amp;lt;ip-address&amp;gt; &amp;lt;port-nr&amp;gt; &amp;lt;channel&amp;gt; &amp;lt;state:last/min/max/average/consumption&amp;gt; &amp;lt;poll-delay&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;name&amp;gt;: Name des neuen fhem-devices&lt;br /&gt;
* &amp;lt;ip-address&amp;gt;: IP des Volkszaehlers&lt;br /&gt;
* &amp;lt;port-Nr&amp;gt;: Port, auf dem der Volkszaehler-http-Server erreichtbar ist&lt;br /&gt;
* &amp;lt;channel&amp;gt;: UUID des Volkszaehler-Frontend-Channels, der gelesen werden soll&lt;br /&gt;
* &amp;lt;state&amp;gt;: Das Reading, welches als state genommen werden soll, kann im define gewählt werden. Dabei besteht die Auswahl aus&lt;br /&gt;
** last (letzter geladener Wert, manchmal leer bei zu kleinem poll-delay)&lt;br /&gt;
** min (kleinster Wert innerhalb des poll-delay, manchmal leer bei zu kleinem poll-delay)&lt;br /&gt;
** max (größter Wert innerhalb des poll-delay, manchmal leer bei zu kleinem poll-delay)&lt;br /&gt;
** average (Durchschnitt der Werte im poll-delay, manchmal leer bei zu kleinem poll-delay)&lt;br /&gt;
** consumption (Verbrauch innerhalb des poll-delays, manchmal leer bei zu kleinem poll-delay)&lt;br /&gt;
* &amp;lt;poll-delay&amp;gt;: Zeitraum, der ausgelesen werden soll in Sekunden&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
Ein vollständiges Beispiel für die erforderlichen Definitionen und das daraus resultierende Ergebnis:&lt;br /&gt;
&lt;br /&gt;
=== Momentanverbrauch ===&lt;br /&gt;
Kanal im Volkszaehler, der den Momentanverbrauch per I/R-Lesekopf ermittelt (alle 60 Sekunden, daraus der Mittelwert)&lt;br /&gt;
&lt;br /&gt;
  define Verbrauch_aktuell VOLKSZAEHLER 192.168.178.45 80 635481a0-6fcd-11e2-8587-eda25228f8bf average 60&lt;br /&gt;
  attr Verbrauch_aktuell group Strom&lt;br /&gt;
  attr Verbrauch_aktuell room Volkszaehler&lt;br /&gt;
&lt;br /&gt;
=== Logdatei ===&lt;br /&gt;
Definition der Logdatei, aus der die Grafik erzeugt werden kann:&lt;br /&gt;
&lt;br /&gt;
  define FileLog_Verbrauch_aktuell FileLog ./log/Verbrauch_aktuell-%Y-%m.log Verbrauch_aktuell&lt;br /&gt;
  attr FileLog_Verbrauch_aktuell group Volkszaehler&lt;br /&gt;
  attr FileLog_Verbrauch_aktuell logtype text&lt;br /&gt;
  attr FileLog_Verbrauch_aktuell room Z_Log&lt;br /&gt;
&lt;br /&gt;
=== Der Graph dazu ===&lt;br /&gt;
  define FilePlot_Verbrauch_aktuell weblink fileplot FileLog_Verbrauch_aktuell:Volkszaehler:CURRENT&lt;br /&gt;
  attr FilePlot_Verbrauch_aktuell label &amp;quot;Stromverbrauch: $data{currval1}&amp;quot;&lt;br /&gt;
  attr FilePlot_Verbrauch_aktuell room Volkszaehler&lt;br /&gt;
&lt;br /&gt;
=== Zählerstand ===&lt;br /&gt;
Kanal im Volkszaehler, der den Zählerstand per I/R-Lesekopf ermittelt, jede Stunde davon der letzte Wert.&lt;br /&gt;
&lt;br /&gt;
  define Zaehlerstand VOLKSZAEHLER 192.168.178.45 80 ebb9c9b0-7058-11e2-b5ed-d12ec87a3a7f last 1800&lt;br /&gt;
  attr Zaehlerstand group Strom&lt;br /&gt;
  attr Zaehlerstand room Volkszaehler&lt;br /&gt;
&lt;br /&gt;
=== Verbrauch ===&lt;br /&gt;
Kanal im Volkszaehler, der den Zählerstand per I/R-Lesekopf ermittelt, alle 24 Stunden davon der Verbrauch.&lt;br /&gt;
&lt;br /&gt;
  define Verbrauch_24h VOLKSZAEHLER 192.168.178.45 80 635481a0-6fcd-11e2-8587-eda25228f8bf consumption 86400&lt;br /&gt;
  attr Verbrauch_24h group Strom&lt;br /&gt;
  attr Verbrauch_24h room Volkszaehler&lt;br /&gt;
&lt;br /&gt;
=== Ergebnis ===&lt;br /&gt;
[[Datei:23_volkszaehler.JPG|mini|zentriert|hochkant=3.0|Strom- und Gasverbrauch aus Volkszählerdaten generiert - Beispieldarstellung]]&lt;br /&gt;
&lt;br /&gt;
== Daten mit Volkszaehler loggen ==&lt;br /&gt;
Hier eine Möglichkeit mit einem notify Temperaturen (oder andere Messwerte) an die Middelware vom Volkszaehler zu schicken um die Daten über ein Volkszaehler Frontend auswerten zu können:&lt;br /&gt;
   .*:temperature.* {&lt;br /&gt;
    # return &amp;quot;Heizung $NAME&amp;quot; if $NAME =~ /\A.{3}Heizung/; # [[MAX]] Geräte ausschließen. Wordaround für aufgebrauchte credits.&lt;br /&gt;
    my $base_url = AttrVal(&#039;vz&#039;, &#039;vz_URL&#039;, undef);&lt;br /&gt;
    my $temp = ReadingsVal($NAME, &#039;temperature&#039;, undef);&lt;br /&gt;
    my $uuid = AttrVal($NAME, &#039;vz_UUID&#039;, undef);&lt;br /&gt;
    unless (defined($uuid)) {&lt;br /&gt;
      my $create_url = $base_url . &#039;/channel.json?type=temperature&amp;amp;title=&#039; . $NAME . &#039;&amp;amp;public=on&amp;amp;style=lines&amp;amp;operation=add&#039;;&lt;br /&gt;
      Log 5, $create_url;&lt;br /&gt;
      my $response = decode_json(get($create_url));&lt;br /&gt;
      $uuid = $response-&amp;gt;{entity}-&amp;gt;{uuid};&lt;br /&gt;
      $attr{$NAME}{&#039;vz_UUID&#039;} = $uuid;&lt;br /&gt;
      Log 4, &amp;quot;created $uuid for $NAME&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    my $update_url = $base_url . &#039;/data/&#039; . $uuid . &#039;.json?operation=add&amp;amp;value=&#039; . $temp;&lt;br /&gt;
    Log 5, $update_url;&lt;br /&gt;
    Log 4, get($update_url);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Volkszaehler URL wird in einem Attribut (vz_URL) eines dummies gespeichert, welches vorher angelegt werden muss.&lt;br /&gt;
&lt;br /&gt;
  define vz dummy&lt;br /&gt;
  attr vz vz_URL http://localhost/volkszaehler.org/htdocs/middleware.php&lt;br /&gt;
&lt;br /&gt;
Jedes Termometer, dass auch im Volkszaehler erscheinen soll, muss nun nur noch im Volkszaehler angelegt werden und die UUID als Attribut (vz_UUID) des Termometers gespeichert werden. Dieser Schritt kann auch ausgelassen werden. In diesem Fall wird ein neues Termometer automatisch angelegt.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Volkszähler [http://www.volkszaehler.org Homepage]&lt;br /&gt;
* [https://github.com/bgewehr/fhem FHEM Module] für Volkszähler von &amp;quot;bgewehr&amp;quot;&lt;br /&gt;
* Quellen von JSON für Perl: [http://cpansearch.perl.org/src/MAKAMAKA/JSON-1.15/lib/JSON/ CPAN] / [https://github.com/makamaka/JSON/tree/master/lib github]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Other Components]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Energieverbrauchsmessung]]&lt;/div&gt;</summary>
		<author><name>Bgewehr</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=9065</id>
		<title>Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=9065"/>
		<updated>2014-12-29T09:52:11Z</updated>

		<summary type="html">&lt;p&gt;Bgewehr: /* Device Connector */&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;
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;/div&gt;</summary>
		<author><name>Bgewehr</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=9060</id>
		<title>Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=9060"/>
		<updated>2014-12-29T09:44:45Z</updated>

		<summary type="html">&lt;p&gt;Bgewehr: /* fronthemEditor */&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;
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 Device definiert ist, kann man über denn device connector 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;/div&gt;</summary>
		<author><name>Bgewehr</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=8945</id>
		<title>Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=8945"/>
		<updated>2014-12-22T19:54:16Z</updated>

		<summary type="html">&lt;p&gt;Bgewehr: /* device connector */&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;
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;
==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 Device definiert ist, kann man über denn device connector 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;/div&gt;</summary>
		<author><name>Bgewehr</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=8944</id>
		<title>Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=8944"/>
		<updated>2014-12-22T19:51:25Z</updated>

		<summary type="html">&lt;p&gt;Bgewehr: /* cmd set */&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;
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;
=== 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;
==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 Device definiert ist, kann man über denn device connector 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;/div&gt;</summary>
		<author><name>Bgewehr</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=8943</id>
		<title>Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=8943"/>
		<updated>2014-12-22T19:49:53Z</updated>

		<summary type="html">&lt;p&gt;Bgewehr: /* reading */&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;
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;
=== 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;
==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 Device definiert ist, kann man über denn device connector 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;
Bei cmd set 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. state&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;/div&gt;</summary>
		<author><name>Bgewehr</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=8942</id>
		<title>Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=8942"/>
		<updated>2014-12-22T19:49:22Z</updated>

		<summary type="html">&lt;p&gt;Bgewehr: /* device */&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;
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;
=== 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;
==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 Device definiert ist, kann man über denn device connector 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 das Item zu verwendende Reading des fhem Devices zum lesen, 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;
Bei cmd set 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. state&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;/div&gt;</summary>
		<author><name>Bgewehr</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=8941</id>
		<title>Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=8941"/>
		<updated>2014-12-22T19:49:01Z</updated>

		<summary type="html">&lt;p&gt;Bgewehr: /* device */&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;
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;
=== 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;
==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 Device definiert ist, kann man über denn device connector 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 dem 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 das Item zu verwendende Reading des fhem Devices zum lesen, 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;
Bei cmd set 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. state&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;/div&gt;</summary>
		<author><name>Bgewehr</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=8940</id>
		<title>Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=8940"/>
		<updated>2014-12-22T19:47:52Z</updated>

		<summary type="html">&lt;p&gt;Bgewehr: /* reading */&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;
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;
=== 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;
==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 Device definiert ist, kann man über denn device connector 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 dem die Befehle geschickt werden.&lt;br /&gt;
&lt;br /&gt;
Groß/Kleinschreibung muss beachtet werden!&lt;br /&gt;
&lt;br /&gt;
====reading====&lt;br /&gt;
Das für das Item zu verwendende Reading des fhem Devices zum lesen, 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;
Bei cmd set 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. state&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;/div&gt;</summary>
		<author><name>Bgewehr</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=8640</id>
		<title>Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=8640"/>
		<updated>2014-11-30T21:18:57Z</updated>

		<summary type="html">&lt;p&gt;Bgewehr: /* device connector */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== fronthem ==&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 Transformation von Befehlen und Parametern zu übernehmen.&lt;br /&gt;
Dazu besteht fronthem aus vier Bausteinen:&lt;br /&gt;
&lt;br /&gt;
* websocket&lt;br /&gt;
* device connector&lt;br /&gt;
* readings converter&lt;br /&gt;
* fronthemEditor &lt;br /&gt;
&lt;br /&gt;
&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 und mit folgendem Befehl definiert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define xyz fronthem&amp;lt;/code&amp;gt;&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.&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,  das im Ordner .../fhem/FHEM/ abgelegt wird und mit folgendem Befehl definiert:&lt;br /&gt;
&amp;lt;code&amp;gt;define meinHandy fronthemDevice 192.168.178.45&amp;lt;/code&amp;gt;&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;
=== readings converter ===&lt;br /&gt;
Die Readings von fhem müssen in die Form der möglichen Werte des Frontend 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;
* OnOff für Schalter, Übersetzung von On in 1 und Off in 0&lt;br /&gt;
* NumDisplay für Zahlenwerte aus fhem Readings, nur lesend&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;
&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;
to be continued...&lt;/div&gt;</summary>
		<author><name>Bgewehr</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=8639</id>
		<title>Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=8639"/>
		<updated>2014-11-30T21:18:45Z</updated>

		<summary type="html">&lt;p&gt;Bgewehr: /* websocket */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== fronthem ==&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 Transformation von Befehlen und Parametern zu übernehmen.&lt;br /&gt;
Dazu besteht fronthem aus vier Bausteinen:&lt;br /&gt;
&lt;br /&gt;
* websocket&lt;br /&gt;
* device connector&lt;br /&gt;
* readings converter&lt;br /&gt;
* fronthemEditor &lt;br /&gt;
&lt;br /&gt;
&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 und mit folgendem Befehl definiert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define xyz fronthem&amp;lt;/code&amp;gt;&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.&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,  das im Ordner .../fhem/FHEM/ abgelegt wird und mit folgendem Befehl definiert:&lt;br /&gt;
&amp;lt;nowiki&amp;gt;define meinHandy fronthemDevice 192.168.178.45&amp;lt;/nowiki&amp;gt;&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;
=== readings converter ===&lt;br /&gt;
Die Readings von fhem müssen in die Form der möglichen Werte des Frontend 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;
* OnOff für Schalter, Übersetzung von On in 1 und Off in 0&lt;br /&gt;
* NumDisplay für Zahlenwerte aus fhem Readings, nur lesend&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;
&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;
to be continued...&lt;/div&gt;</summary>
		<author><name>Bgewehr</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=8638</id>
		<title>Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=8638"/>
		<updated>2014-11-30T21:17:56Z</updated>

		<summary type="html">&lt;p&gt;Bgewehr: /* websocket */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== fronthem ==&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 Transformation von Befehlen und Parametern zu übernehmen.&lt;br /&gt;
Dazu besteht fronthem aus vier Bausteinen:&lt;br /&gt;
&lt;br /&gt;
* websocket&lt;br /&gt;
* device connector&lt;br /&gt;
* readings converter&lt;br /&gt;
* fronthemEditor &lt;br /&gt;
&lt;br /&gt;
&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 und mit folgendem Befehl definiert:&lt;br /&gt;
&amp;lt;nowiki&amp;gt;define xyz fronthem&amp;lt;/nowiki&amp;gt;&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.&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,  das im Ordner .../fhem/FHEM/ abgelegt wird und mit folgendem Befehl definiert:&lt;br /&gt;
&amp;lt;nowiki&amp;gt;define meinHandy fronthemDevice 192.168.178.45&amp;lt;/nowiki&amp;gt;&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;
=== readings converter ===&lt;br /&gt;
Die Readings von fhem müssen in die Form der möglichen Werte des Frontend 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;
* OnOff für Schalter, Übersetzung von On in 1 und Off in 0&lt;br /&gt;
* NumDisplay für Zahlenwerte aus fhem Readings, nur lesend&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;
&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;
to be continued...&lt;/div&gt;</summary>
		<author><name>Bgewehr</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=8637</id>
		<title>Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=8637"/>
		<updated>2014-11-30T21:17:33Z</updated>

		<summary type="html">&lt;p&gt;Bgewehr: /* device connector */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== fronthem ==&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 Transformation von Befehlen und Parametern zu übernehmen.&lt;br /&gt;
Dazu besteht fronthem aus vier Bausteinen:&lt;br /&gt;
&lt;br /&gt;
* websocket&lt;br /&gt;
* device connector&lt;br /&gt;
* readings converter&lt;br /&gt;
* fronthemEditor &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== websocket ===&lt;br /&gt;
Der Websocket ist eine generische http-Schnittstelle, die von einer Frontend-Seite 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 und mit folgendem Befehl definiert:&lt;br /&gt;
&amp;lt;nowiki&amp;gt;define xyz fronthem&amp;lt;/nowiki&amp;gt;&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.&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,  das im Ordner .../fhem/FHEM/ abgelegt wird und mit folgendem Befehl definiert:&lt;br /&gt;
&amp;lt;nowiki&amp;gt;define meinHandy fronthemDevice 192.168.178.45&amp;lt;/nowiki&amp;gt;&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;
=== readings converter ===&lt;br /&gt;
Die Readings von fhem müssen in die Form der möglichen Werte des Frontend 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;
* OnOff für Schalter, Übersetzung von On in 1 und Off in 0&lt;br /&gt;
* NumDisplay für Zahlenwerte aus fhem Readings, nur lesend&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;
&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;
to be continued...&lt;/div&gt;</summary>
		<author><name>Bgewehr</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=8636</id>
		<title>Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=8636"/>
		<updated>2014-11-30T21:17:24Z</updated>

		<summary type="html">&lt;p&gt;Bgewehr: /* websocket */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== fronthem ==&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 Transformation von Befehlen und Parametern zu übernehmen.&lt;br /&gt;
Dazu besteht fronthem aus vier Bausteinen:&lt;br /&gt;
&lt;br /&gt;
* websocket&lt;br /&gt;
* device connector&lt;br /&gt;
* readings converter&lt;br /&gt;
* fronthemEditor &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== websocket ===&lt;br /&gt;
Der Websocket ist eine generische http-Schnittstelle, die von einer Frontend-Seite 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 und mit folgendem Befehl definiert:&lt;br /&gt;
&amp;lt;nowiki&amp;gt;define xyz fronthem&amp;lt;/nowiki&amp;gt;&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.&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,  die im Ordner .../fhem/FHEM/ abgelegt wird und mit folgendem Befehl definiert:&lt;br /&gt;
&amp;lt;nowiki&amp;gt;define meinHandy fronthemDevice 192.168.178.45&amp;lt;/nowiki&amp;gt;&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;
=== readings converter ===&lt;br /&gt;
Die Readings von fhem müssen in die Form der möglichen Werte des Frontend 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;
* OnOff für Schalter, Übersetzung von On in 1 und Off in 0&lt;br /&gt;
* NumDisplay für Zahlenwerte aus fhem Readings, nur lesend&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;
&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;
to be continued...&lt;/div&gt;</summary>
		<author><name>Bgewehr</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=8635</id>
		<title>Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=8635"/>
		<updated>2014-11-30T21:17:08Z</updated>

		<summary type="html">&lt;p&gt;Bgewehr: /* device connector */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== fronthem ==&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 Transformation von Befehlen und Parametern zu übernehmen.&lt;br /&gt;
Dazu besteht fronthem aus vier Bausteinen:&lt;br /&gt;
&lt;br /&gt;
* websocket&lt;br /&gt;
* device connector&lt;br /&gt;
* readings converter&lt;br /&gt;
* fronthemEditor &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== websocket ===&lt;br /&gt;
Der Websocket ist eine generische http-Schnittstelle, die von einer Frontend-Seite aus angesprochen werden kann.&lt;br /&gt;
&lt;br /&gt;
Der Websocket wird durch ein fhem-Modul 01_fronthem.pm realisiert und mit folgendem Befehl definiert:&lt;br /&gt;
&amp;lt;nowiki&amp;gt;define xyz fronthem&amp;lt;/nowiki&amp;gt;&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.&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,  die im Ordner .../fhem/FHEM/ abgelegt wird und mit folgendem Befehl definiert:&lt;br /&gt;
&amp;lt;nowiki&amp;gt;define meinHandy fronthemDevice 192.168.178.45&amp;lt;/nowiki&amp;gt;&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;
=== readings converter ===&lt;br /&gt;
Die Readings von fhem müssen in die Form der möglichen Werte des Frontend 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;
* OnOff für Schalter, Übersetzung von On in 1 und Off in 0&lt;br /&gt;
* NumDisplay für Zahlenwerte aus fhem Readings, nur lesend&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;
&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;
to be continued...&lt;/div&gt;</summary>
		<author><name>Bgewehr</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=8634</id>
		<title>Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=8634"/>
		<updated>2014-11-30T21:16:42Z</updated>

		<summary type="html">&lt;p&gt;Bgewehr: /* readings converter */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== fronthem ==&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 Transformation von Befehlen und Parametern zu übernehmen.&lt;br /&gt;
Dazu besteht fronthem aus vier Bausteinen:&lt;br /&gt;
&lt;br /&gt;
* websocket&lt;br /&gt;
* device connector&lt;br /&gt;
* readings converter&lt;br /&gt;
* fronthemEditor &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== websocket ===&lt;br /&gt;
Der Websocket ist eine generische http-Schnittstelle, die von einer Frontend-Seite aus angesprochen werden kann.&lt;br /&gt;
&lt;br /&gt;
Der Websocket wird durch ein fhem-Modul 01_fronthem.pm realisiert und mit folgendem Befehl definiert:&lt;br /&gt;
&amp;lt;nowiki&amp;gt;define xyz fronthem&amp;lt;/nowiki&amp;gt;&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.&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 und mit folgendem Befehl definiert:&lt;br /&gt;
&amp;lt;nowiki&amp;gt;define meinHandy fronthemDevice 192.168.178.45&amp;lt;/nowiki&amp;gt;&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;
=== readings converter ===&lt;br /&gt;
Die Readings von fhem müssen in die Form der möglichen Werte des Frontend 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;
* OnOff für Schalter, Übersetzung von On in 1 und Off in 0&lt;br /&gt;
* NumDisplay für Zahlenwerte aus fhem Readings, nur lesend&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;
&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;
to be continued...&lt;/div&gt;</summary>
		<author><name>Bgewehr</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=8633</id>
		<title>Fronthem</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fronthem&amp;diff=8633"/>
		<updated>2014-11-30T21:16:01Z</updated>

		<summary type="html">&lt;p&gt;Bgewehr: /* fronthemEditor */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== fronthem ==&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 Transformation von Befehlen und Parametern zu übernehmen.&lt;br /&gt;
Dazu besteht fronthem aus vier Bausteinen:&lt;br /&gt;
&lt;br /&gt;
* websocket&lt;br /&gt;
* device connector&lt;br /&gt;
* readings converter&lt;br /&gt;
* fronthemEditor &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== websocket ===&lt;br /&gt;
Der Websocket ist eine generische http-Schnittstelle, die von einer Frontend-Seite aus angesprochen werden kann.&lt;br /&gt;
&lt;br /&gt;
Der Websocket wird durch ein fhem-Modul 01_fronthem.pm realisiert und mit folgendem Befehl definiert:&lt;br /&gt;
&amp;lt;nowiki&amp;gt;define xyz fronthem&amp;lt;/nowiki&amp;gt;&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.&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 und mit folgendem Befehl definiert:&lt;br /&gt;
&amp;lt;nowiki&amp;gt;define meinHandy fronthemDevice 192.168.178.45&amp;lt;/nowiki&amp;gt;&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;
=== readings converter ===&lt;br /&gt;
Die Readings von fhem müssen in die Form der möglichen Werte des Frontend 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. Bisher gibt es folgende Converter:&lt;br /&gt;
* OnOff für Schalter, Übersetzung von On in 1 und Off in 0&lt;br /&gt;
* NumDisplay für Zahlenwerte aus fhem Readings, nur lesend&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;
&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;
to be continued...&lt;/div&gt;</summary>
		<author><name>Bgewehr</name></author>
	</entry>
</feed>