<?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=Eki</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=Eki"/>
	<link rel="alternate" type="text/html" href="http://wiki.fhem.de/wiki/Spezial:Beitr%C3%A4ge/Eki"/>
	<updated>2026-04-26T21:28:06Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Chart&amp;diff=34809</id>
		<title>FTUI Widget Chart</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Chart&amp;diff=34809"/>
		<updated>2021-02-10T09:32:10Z</updated>

		<summary type="html">&lt;p&gt;Eki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das [[{{PAGENAME}}|Chart Widget]] ist ein Widget für [[FHEM Tablet UI]], mit dem sich verschiedenste Diagramme darstellen lassen. Die Aneinanderreihung mehrerer Werte eines Device-Readings zu einem zeitlichen Verlauf wird dabei als Graph bezeichnet.&lt;br /&gt;
&lt;br /&gt;
Es können beliebige Werte dargestellt und entsprechend der Sinnhaftigkeit, oder persönlichem Geschmack, formatiert werden. Farbe und Form der Linien sind je Graph einstellbar, auch wenn mehrere gleichzeitig in einem Diagramm angezeigt werden.&lt;br /&gt;
&lt;br /&gt;
Jedes Diagramm kann zwei Y-Achsen besitzen. Die primäre Y-Achse (primary) wird auf der linken Seite angezeigt, die sekundäre Y-Achse (secondary) auf der rechten Seite. Beide Achsen können unterschiedlich formatiert werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Chart_tabletUI.png&lt;br /&gt;
Datei:FTUI Widget Chart Stacked.png&lt;br /&gt;
Datei:FTUI Widget Chart-fc-Proplanta.png&lt;br /&gt;
Datei:Wetterchart2.png&lt;br /&gt;
Datei:PieChart.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Attribute==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:150px&amp;quot;|Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-device&#039;&#039;&#039;||Name des FHEM-Device, das die Aktualisierung des Charts triggert||||data-device=&amp;quot;WohnzimmerHeizung&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-get&#039;&#039;&#039;||Reading, das das Update des Diagramms triggert||&#039;STATE&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-logdevice&#039;&#039;&#039;||Name des Log-Device, das dargestellt werden soll, oder ein Array, um mehrere Werte in einem Diagramm darzustellen||||data-logdevice=&amp;quot;FileLog_WohnzimmerHeizung&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-logfile&#039;&#039;&#039;|| Name des Log-Files, aus dem die Daten entnommen werden sollen (oder Array)||&#039;-&#039; = aktuelle Datei||data-logfile=&amp;quot;WohnzimmerHeizung-2015.log&amp;quot;&amp;lt;br&amp;gt;Beachte: Der Wert &amp;quot;CURRENT&amp;quot; ermöglicht die Navigation auch zu älterne Logfiles (Jahreswechsel)&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-columnspec&#039;&#039;&#039;||Ermittelt den Wert aus dem Log-File, der angezeigt werden soll (oder Array)||||data-columnspec=&amp;quot;4:meas.*&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-style&#039;&#039;&#039;||Stil, wie die Graph-Linien dargestellt werden sollen (z.B. &#039;SVGplot l0&#039; oder &#039;ftui l0dash&#039;), oder ein Array, wenn mehrere Linien unterschiedlich dargestellt werden sollen (siehe [[#Aussehen_der_Linien|Hinweise]])||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-ptype&#039;&#039;&#039;||Form, wie die Graphen dargestellt werden sollen (z.B. &#039;lines&#039;, &#039;cubic&#039; oder &#039;fa-cog&#039;), oder ein Array (siehe [[#Form_der_Linien|Hinweise]])||&#039;lines&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-uaxis&#039;&#039;&#039;||Name der Achse, die verwendet werden soll (&#039;primary&#039; = links, oder &#039;secondary&#039; = rechts), oder ein Array||&#039;primary&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-legend&#039;&#039;&#039;||Bezeichnung des Graphen (wird in Legende und am Cursor angezeigt), oder ein Array||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-minvalue&#039;&#039;&#039;||Minimaler Wert, der auf der linken Y-Achse (&#039;primary&#039;) angezeigt werden soll. &#039;auto&#039; = automatische Berechnung||&#039;10&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-maxvalue&#039;&#039;&#039;||Maximaler Wert, der auf der linken Y-Achse (&#039;primary&#039;) angezeigt werden soll. &#039;auto&#039; = automatische Berechnung||&#039;30&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-minvalue_sec&#039;&#039;&#039;||Minimaler Wert, der auf der rechten Y-Achse (&#039;secondary&#039;) angezeigt werden soll. &#039;auto&#039; = automatische Berechnung||&#039;auto&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-maxvalue_sec&#039;&#039;&#039;||Maximaler Wert, der auf der rechten Y-Achse (&#039;secondary&#039;) angezeigt werden soll. &#039;auto&#039; = automatische Berechnung||&#039;auto&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-xticks&#039;&#039;&#039;||Abstand zwischen den vertikalen Hilfslinien (bezogen auf die X-Achse) in Minuten. &#039;auto&#039; = automatische Berechnung||&#039;auto&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yticks&#039;&#039;&#039;||Abstand zwischen den horizontalen Hilfslinien (bezogen auf die linke Y-Achse). Kann auch ein Array mit Werte-Paaren enthalten, um die Linien mit Text zu beschriften.||&#039;auto&#039;||data-yticks=&#039;[[0,&amp;quot;open&amp;quot;],[1,&amp;quot;closed&amp;quot;]]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yticks_format&#039;&#039;&#039;||Dient zur Formatierung der Ticks der Y-Achse. Die Formatierung geschieht über Platzhalter, Trenner und einen beliebigen durch &#039; &#039; getrennten Text. Als Platzhalter dient ein oder mehrere &#039;#&#039;, als Trenner können &#039;.&#039;, &#039;,&#039; und &#039;:&#039; verwendet werden. Ist ein Trenner enthalten (z.B. &#039;#.##&#039;) dann bedeutet das in dem Beispiel, dass der Ytick mit 2 Nachkommastellen versehen wird und vorne Platz für eine Stelle vor dem Komma vorgehalten wird (führende Nullen werden nicht dargestellt, aber de Platz wird reserviert so dass das ganze rechtsbündig immer passt). Ist kein Trenner vorhanden, dann wird der Ytick auf die Summe der Platzhalter mit einer festen Gesamtbreite gesetzt (#### würde also bedeuten, dass immer 4 Stellen (ohne Trenner) verwendet werden. aus 0.4 würde 0.400 aus 10.437 würde 10.44). Als Trenner kann man z.B. für Zeiten auch einen &#039;:&#039; verwenden und dadurch auch so etwas wie &amp;quot;12:00 Uhr&amp;quot; realisieren (in dem Beispiel wäre data-yticks_format=&amp;quot;##:## Uhr&amp;quot; und kein data-yunit oder data-yticks=&amp;quot;##:##&amp;quot; und data-yunit=&amp;quot;Uhr&amp;quot;).||||data-yticks_format=&amp;quot;#.##&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yticks_sec&#039;&#039;&#039;||Abstand zwischen den horizontalen Hilfslinien (bezogen auf die rechte Y-Achse). Kann auch ein Array mit Werte-Paaren enthalten, um die Linien mit Text zu beschriften.||&#039;auto&#039;||data-yticks=&#039;[[0,&amp;quot;open&amp;quot;],[1,&amp;quot;closed&amp;quot;]]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yticks_format_sec&#039;&#039;&#039;||Dient zur Formatierung der Ticks der Y-Achse. Die Formatierung geschieht über Platzhalter, Trenner und einen beliebigen durch &#039; &#039; getrennten Text. Als Platzhalter dient ein oder mehrere &#039;#&#039;, als Trenner können &#039;.&#039;, &#039;,&#039; und &#039;:&#039; verwendet werden. Ist ein Trenner enthalten (z.B. &#039;#.##&#039;) dann bedeutet das in dem Beispiel, dass der Ytick mit 2 Nachkommastellen versehen wird und vorne Platz für eine Stelle vor dem Komma vorgehalten wird (führende Nullen werden nicht dargestellt, aber de Platz wird reserviert so dass das ganze rechtsbündig immer passt). Ist kein Trenner vorhanden, dann wird der Ytick auf die Summe der Platzhalter mit einer festen Gesamtbreite gesetzt (#### würde also bedeuten, dass immer 4 Stellen (ohne Trenner) verwendet werden. aus 0.4 würde 0.400 aus 10.437 würde 10.44). Als Trenner kann man z.B. für Zeiten auch einen &#039;:&#039; verwenden und dadurch auch so etwas wie &amp;quot;12:00 Uhr&amp;quot; realisieren (in dem Beispiel wäre data-yticks_format=&amp;quot;##:## Uhr&amp;quot; und kein data-yunit oder data-yticks=&amp;quot;##:##&amp;quot; und data-yunit=&amp;quot;Uhr&amp;quot;).||||data-yticks_format_sec=&amp;quot;#.##&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yticks_prio&#039;&#039;&#039;||Legt fest, ob die horizontalen Hilfslinien der linken (primary) oder der rechten (secondary) Y-Achse zugeordnet werden sollen||||data-yticks_prio=&#039;secondary&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-ytype&#039;&#039;&#039;||Legt fest, ob die primäre y Achse logarithmisch sein soll (wert &amp;quot;log&amp;quot;)||||data-ytype=&amp;quot;log&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-ytype_sec&#039;&#039;&#039;||Legt fest, ob die sekundäre y Achse logarithmisch sein soll (wert &amp;quot;log&amp;quot;)||||data-ytype_sec=&amp;quot;log&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-margin&#039;&#039;&#039;|||Abstand zwischen Buttons und Chart (Einheit Pixel). ||&amp;quot;0&amp;quot;|||data-margin=&amp;quot;10&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-y_margin&#039;&#039;&#039;|||Gibt die Möglichkeit, Abstände zwischen den Graphen und dem oberen Rand des Plots zu definieren (Einheit Pixel). Falls der Wert skalar ist, werden oben und unten die gleichen Abstände eingehalten. Falls ein 2D Array angegeben wird, können die Werte unten (erster Wert im Array) und oben (zweiter Wert im Array) getrennt festgelegt werden||&amp;quot;0&amp;quot;|||data-y_margin=&#039;[&amp;quot;10&amp;quot;,&amp;quot;20&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-y_margin_sec&#039;&#039;&#039;|||Gibt die Möglichkeit, Abstände zwischen den Graphen und dem oberen Rand des Plots zu definieren (Einheit Pixel). Falls der Wert skalar ist, werden oben und unten die gleichen Abstände eingehalten. Falls ein 2D Array angegeben wird, können die Werte unten (erster Wert im Array) und oben (zweiter Wert im Array) getrennt festgelegt werden||&amp;quot;0&amp;quot;|||data-y_margin=&#039;[&amp;quot;10&amp;quot;,&amp;quot;20&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-daysago_start&#039;&#039;&#039;||Anzahl der vergangenen Tage, wo das Diagramm beginnen soll. &#039;0&#039; = Beginn heute 0:00 Uhr. (siehe [[#Zeitstrahl_.2F_Start_.26_Ende_auf_der_X-Achse|Hinweise]])||&#039;0&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-daysago_end&#039;&#039;&#039;||Anzahl der vergangenen Tage, wo das Diagramm enden soll. &#039;-1&#039; = Ende heute 24:00 Uhr. (siehe [[#Zeitstrahl_.2F_Start_.26_Ende_auf_der_X-Achse|Hinweise]])||&#039;-1&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-xticks_round&#039;&#039;&#039;||Wenn vorhanden und entweder &#039;h&#039;, &#039;d&#039;, &#039;w&#039;, wird auf Stunde, Tag oder Woche bei den xticks gerundet (also die Tickmarks und die Gridlines bei den entsprechend gerundeten Zeiten gesetzt). Es kann auch &#039;auto&#039; angegeben werden, um eine autmoatische Rundung durchzuführen||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-nofulldays&#039;&#039;&#039;||Aktiviert/deaktiviert die Rundung der X-Achse auf ganze Tage. Binärwert (&#039;true&#039; oder &#039;false&#039;)||&#039;false&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-timeformat&#039;&#039;&#039;||Zeitformat für die Anzeige an der X-Achse (siehe [[#Zeitformat_der_X-Achse|Hinweise]])||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-timeranges&#039;&#039;&#039;||Hierdurch können vordefinierte Zeiträume für die X-Achse festgelegt werden, die dann durch eine pulldown menu (neuer Button oben neben dem &amp;quot;-&amp;quot; Button) direkt ausgewählt werden können. Der Parameter ist ein Array aus Array Einträgen, welche jeweils [&amp;lt;Name&amp;gt;,&amp;lt;daysago_start&amp;gt;,&amp;lt;daysago_end&amp;gt;] enthalten)||&lt;br /&gt;
||data-timeranges=&#039;[&amp;lt;br&amp;gt;&lt;br /&gt;
[&amp;quot;Actual Year&amp;quot;,&amp;quot;0Y&amp;quot;,&amp;quot;-1Y&amp;quot;],&amp;lt;br&amp;gt;&lt;br /&gt;
[&amp;quot;Last Year&amp;quot;,&amp;quot;1Y&amp;quot;,&amp;quot;0Y&amp;quot;],&amp;lt;br&amp;gt;&lt;br /&gt;
[&amp;quot;Actual Month&amp;quot;,&amp;quot;0M&amp;quot;,&amp;quot;-1M&amp;quot;],&amp;lt;br&amp;gt;&lt;br /&gt;
[&amp;quot;Last Month&amp;quot;,&amp;quot;1M&amp;quot;,&amp;quot;0M&amp;quot;],&amp;lt;br&amp;gt;&lt;br /&gt;
[&amp;quot;Actual Week&amp;quot;,&amp;quot;0W&amp;quot;,&amp;quot;-1W&amp;quot;],&amp;lt;br&amp;gt;&lt;br /&gt;
[&amp;quot;Last Week&amp;quot;,&amp;quot;1W&amp;quot;,&amp;quot;0W&amp;quot;],&amp;lt;br&amp;gt;&lt;br /&gt;
[&amp;quot;Today&amp;quot;,&amp;quot;0D&amp;quot;,&amp;quot;-1D&amp;quot;],&amp;lt;br&amp;gt;&lt;br /&gt;
[&amp;quot;Yesterday&amp;quot;,&amp;quot;1D&amp;quot;,&amp;quot;0D&amp;quot;]&amp;lt;br&amp;gt;&lt;br /&gt;
]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-ytext&#039;&#039;&#039;||Text, der neben der linken Y-Achse angezeigt wird||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-ytext_sec&#039;&#039;&#039;||Text, der neben der rechten Y-Achse angezeigt wird||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yunit&#039;&#039;&#039;||Einheit, die an der linken Y-Achse angezeigt wird||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yunit_sec&#039;&#039;&#039;||Einheit, die an der rechten Y-Achse angezeigt wird||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-show_both_axes&#039;&#039;&#039;||Legt fest ob beide Y-Achsen Linien gezeichnet werden sollen||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-crosshair&#039;&#039;&#039;||Aktiviert/deaktiviert den Fadenkreuz-Cursor. Binärwert (&#039;true&#039; oder &#039;false&#039;)||&#039;false&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-cursorgroup&#039;&#039;&#039;||Zahl zur Gruppierung der Werte am Fadenkreuz-Cursor ([[#Fadenkreuz-Cursor|Hinweise]])||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-scrollgroup&#039;&#039;&#039;||Zahl zur Gruppierung der Graphen beim Bewegen und Zoomen. Alle Linien mit der selben Zahl werden miteinander gekoppelt und bewegen sich gemeinsam.||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-showlegend&#039;&#039;&#039;||Aktiviert/deaktiviert die Anzeige der Legene. Binärwert (&#039;true&#039; oder &#039;false&#039;)||&#039;false&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-legendpos&#039;&#039;&#039;||Array von zwei Werten, die die horizontale und vertikale Position der Legende festlegen ([[#Legende|Hinweise]])||&#039;[&amp;quot;right&amp;quot;,&amp;quot;top&amp;quot;]&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-legend_horiz&#039;&#039;&#039;||legt fest, dass die Legendeneinträge horizontal angeordnet sind (anstatt vertikal wie im default Fall)||false||data-legend_horiz=&amp;quot;true&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-width&#039;&#039;&#039;||Breite des Diagramms (in % oder px)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-height&#039;&#039;&#039;||Höhe des Diagramms (in % oder px)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-graphsshown&#039;&#039;&#039;||Aktiviert/deaktiviert die initiale Anzeige von Graphen. Binärwert (&#039;true&#039; oder &#039;false&#039;). Array, wenn mehrere Linien angezeigt werden sollen.||||data-graphsshown=&#039;[true,false,true]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-ddd&#039;&#039;&#039;||Einstellung für die 3D-Drehung ([[#3-dimensionale_Drehung|Hinweise]])||||data-ddd=&#039;[&amp;quot;40&amp;quot;,&amp;quot;60&amp;quot;,&amp;quot;0&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-dddspace&#039;&#039;&#039;||Abstand zwischen zwei Graphen, wenn die 3D-Anzeige aktiviert wurde (px)||&#039;15&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-dddwidth&#039;&#039;&#039;||Breite, bzw. Tiefe der Graphen, wenn diese 3-dimensional angezeigt werden (px)||&#039;10&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-title&#039;&#039;&#039;||Titel, der über dem Diagramm angezeigt werden soll. Der Inhalt kann auch dynamisch erzeugt werden ([[#Diagrammtitel|Hinweise]])||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-title_class&#039;&#039;&#039;||Klassenname für die Formatierung des Titels. Die Eigenschaften müssen dann entsprechend in einem CSS File angegeben werden (z.B. in fhem-tablet-ui-user.css)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-prefetch&#039;&#039;&#039;||Legt fest, ob zusätzliche Daten rechts und links des Plots im Hintergrund vom Server geholt werden sollen||false||data-prefetch=&amp;quot;true&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
Einige Parameter (style, maxvalue, minvalue, maxvalue_sec, minvalue_sec) können auch aus Readings dynamisch gesetzt werden wenn &amp;quot;&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;&amp;quot; als Parameter gesetzt wird. Damit kann man z.B. in FHEM über notify etc. die Linientypen dynamisch anpassen (z.B. wenn der Wert eines Devices in einem bestimmten Bereich liegt, ändert sich die Farbe des Graphen).&lt;br /&gt;
&lt;br /&gt;
==CSS Klassen==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Klasse!!Beschreibung&lt;br /&gt;
{{FTUI Klasse|fullsize}}{{FTUI Klasse|noticks}}{{FTUI Klasse|nobuttons}}{{FTUI Klasse|small}}{{FTUI Klasse|normal}}{{FTUI Klasse|big}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Folgende Widget-spezifsche Klassen können zusätzlich in einer eigenen CSS-Datei definiert werden:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Klasse&lt;br /&gt;
!Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;chart-background&#039;&#039;&#039;||Hintergrundfarbe des Diagramms&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;buttons&#039;&#039;&#039;||Größe und Farbe der Buttons&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;text.axes&#039;&#039;&#039;||Generelle Schriftart und Farbe der Achsen&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;gridlines&#039;&#039;&#039;||Generelle Farbe und Größe der Gitternetzlinien&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;xaxis&#039;&#039;&#039;||Schriftart, Größe und Farbe der X-Achse&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;yaxis&#039;&#039;&#039;||Schriftart, Größe und Farbe der Y-Achse&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;xticks&#039;&#039;&#039;||Schriftart, Größe und Farbe der X-Achse (Zwischenlinien)&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;yticks&#039;&#039;&#039;||Schriftart, Größe und Farbe der Y-Achse (Zwischenlinien)&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;crosshair&#039;&#039;&#039;||Schriftart, Größe und Vordergrund/Hintergrundfarbe der Momentanwerte am Fadenkreuzcursor&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;caption&#039;&#039;&#039;||Schriftart, Größe und Farbe der Text-Buttons für Legende und Cursor&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;legend&#039;&#039;&#039;||Schriftart, Größe und Farbe der Legende&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Standardwerte sind in der Datei &amp;lt;code&amp;gt;css/ftui_chart.css&amp;lt;/code&amp;gt; zu finden.&lt;br /&gt;
&lt;br /&gt;
==Datenquellen==&lt;br /&gt;
Beim Chart-Widget können die gleichen Datenquellen genutzt werden, die auch für SVG-Plots verwendet werden können:&lt;br /&gt;
# [[FileLog]]: Verlaufsdaten einer Textdatei entnehmen&lt;br /&gt;
# [[DbLog]]: Verlaufsdaten einer Datenbank entnehmen&lt;br /&gt;
# [[LogProxy]]: Daten dynamisch berechnet&lt;br /&gt;
&lt;br /&gt;
===FileLog===&lt;br /&gt;
Um [[FileLog]] zu nutzen, wird als &#039;&#039;&#039;data-logdevice&#039;&#039;&#039; das FHEM-Device für das FileLog angegeben. In der Regel entstehen hier im Laufe der Zeit mehrere Log-Dateien. Name und Anzahl sind von der Definition abhängig - meist wird jeden Monat oder jedes Jahr eine neue Datei angelegt. Die gewünschte Datei kann mit &#039;&#039;&#039;data-logfile&#039;&#039;&#039; ausgewählt werden. Möchte man stets die aktuelle Datei verwenden (macht vor allem dann Sinn, wenn man die neusten Daten anzeigen will), kann das Attribut weggelassen, oder explizit &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt; eingetragen werden. Zuletzt wird &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; benötigt, um die gewünschten Daten zu in der Logdatei zu identifizieren. Hier wird die Spalte, in der die Daten stehen, gefolgt von Doppelpunkt und Readingname angegeben.&lt;br /&gt;
&lt;br /&gt;
Für ein Heizungsthermostat von Homematic mit dem Namen &#039;&#039;DG.wz.HZ.Heizungsventil&#039;&#039; ergibt sich somit beispielhaft folgende Definition, um gemessene Temperatur, Sollwert und Ventilstellung im Diagramm darzustellen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;DG.wz.HZ.Heizungsventil&amp;quot;&lt;br /&gt;
	 data-logdevice=&amp;quot;FileLog_DG.wz.HZ.Heizungsventil&amp;quot;&lt;br /&gt;
	 data-logfile=&amp;quot;-&amp;quot;&lt;br /&gt;
	 data-columnspec=&#039;[&amp;quot;4:measured-temp&amp;quot;,&amp;quot;4:desired-temp&amp;quot;,&amp;quot;4:actuator&amp;quot;]&#039;&lt;br /&gt;
	 ...&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollen Daten von unterschiedlichen Geräten in einem Diagramm angezeigt werden, muss &#039;&#039;&#039;data-logdevice&#039;&#039;&#039; als Array nach dem Schema &amp;lt;code&amp;gt;data-logdevice=&#039;[&amp;quot;&amp;lt;Logdatei_1&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Logdatei_2&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Logdatei_3&amp;gt;&amp;quot;]&#039;&amp;lt;/code&amp;gt; definiert werden. Für jeden Eintrag in &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; muss es auch den passenden Eintrag in &#039;&#039;&#039;data-logdevice&#039;&#039;&#039; geben (auch die Reihenfolge ist relevant).&lt;br /&gt;
&lt;br /&gt;
===DbLog===&lt;br /&gt;
Um die Daten aus [[DbLog]] anzeigen zu können, werden die gleichen Attribute verwendet und mit für die Datenbank angepassten Werten beschrieben. Bei &#039;&#039;&#039;data-logdevice&#039;&#039;&#039; das FHEM-Device für die Datenbank angegeben. Im nachfolgenden Beispiel heißt diese &amp;lt;code&amp;gt;logdb&amp;lt;/code&amp;gt; und besitzt wie üblich zwei Tabellen: &amp;lt;code&amp;gt;current&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;history&amp;lt;/code&amp;gt; (der zeitliche Verlauf liegt in letzterer). Der Tabellenname wird bei &#039;&#039;&#039;data-logfile&#039;&#039;&#039; eingetragen. Da die Daten in der Datenbank etwas anders abgelegt werden, muss auch &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; entsprechend angepasst werden. Statt der Spalte wird hier das FHEM-Device, gefolgt von Doppelpunkt und Readingname angegeben.&lt;br /&gt;
&lt;br /&gt;
Für das oben beschriebene Homematic-Heizungsthermostat ergibt sich dann folgende Definition, um die gleichen Daten aus einer Datenbank, statt einem LogFile zu lesen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;DG.wz.HZ.Heizungsventil&amp;quot;&lt;br /&gt;
         data-get=&amp;quot;measured-temp&amp;quot;&lt;br /&gt;
         data-style=&#039;[&amp;quot;ftui l0&amp;quot;]&#039;&lt;br /&gt;
	 data-logdevice=&amp;quot;logdb&amp;quot;&lt;br /&gt;
	 data-logfile=&amp;quot;HISTORY&amp;quot;&lt;br /&gt;
	 data-columnspec=&#039;[&amp;quot;DG.wz.HZ.Heizungsventil:measured-temp&amp;quot;,&amp;quot;DG.wz.HZ.Heizungsventil:desired-temp&amp;quot;,&amp;quot;DG.wz.HZ.Heizungsventil:actuator&amp;quot;]&#039;&lt;br /&gt;
	 ...&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die Anzeige von unterschiedlichen Geräten in einem Diagramm, muss nur &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; entsprechend angepasst werden, solange sich alle Daten in der Datenbank befinden.&lt;br /&gt;
&lt;br /&gt;
===LogProxy===&lt;br /&gt;
Um die Daten mittels [[LogProxy]] berechnen und anzeigen zu können, muss in FHEM ein LogProxy-Device definiert sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define myLogProxy logProxy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Einstellungen am LogProxy sind nicht nötig, die bloße Existenz reicht.&lt;br /&gt;
&lt;br /&gt;
Bei &#039;&#039;&#039;data-logdevice&#039;&#039;&#039; wird das FHEM-Device für den LogProxy angegeben. Im nachfolgenden Beispiel heißt dieses &amp;lt;code&amp;gt;myLogProxy&amp;lt;/code&amp;gt;. Das Attribut &#039;&#039;&#039;data-logfile&#039;&#039;&#039; wird für LogProxy nicht benötigt. Befinden sich nur LogProxy-Werte im Diagramm kann das Attribut komplett entfallen. Sollen weitere Werte angezeigt werden, bleibt die Definition im Array einfach leer.&lt;br /&gt;
&lt;br /&gt;
Im Attribut &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; wird eine Formel angegeben, wie die Werte berechnet werden sollen. Hier können die Formeln 1:1 von einem eventuell vorhandenen SVG-Plot übernommen werden. &#039;&#039;&#039;Dabei gibt es jedoch folgendes zu beachten:&#039;&#039;&#039; Befindet sich die Formel in einem Array, dürfen die Formeln keine Anführungszeichen (&amp;lt;code&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;) beinhalten. Stattdessen müssen sie als escapter Ascii-Code (&amp;lt;code&amp;gt;\\x22&amp;lt;/code&amp;gt;) eingefügt werden.&lt;br /&gt;
&lt;br /&gt;
Das nachfolgende Beispiel zeigt, wie Vorhersagewerte aus einem FHEM-Device vom Typ Proplanta (Name hier &amp;lt;code&amp;gt;AU.xx.WE.Proplanta&amp;lt;/code&amp;gt;) angezeigt werden können.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;AU.xx.WE.Proplanta&amp;quot;&lt;br /&gt;
	 data-logdevice=&#039;[&lt;br /&gt;
						&amp;quot;myLogProxy&amp;quot;,&lt;br /&gt;
						&amp;quot;myLogProxy&amp;quot;,&lt;br /&gt;
						&amp;quot;myLogProxy&amp;quot;,&lt;br /&gt;
						&amp;quot;myLogProxy&amp;quot;&lt;br /&gt;
					]&#039;&lt;br /&gt;
	 data-columnspec=&#039;[&lt;br /&gt;
						&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22temp_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
						&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22rain_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
						&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22chOfRain_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
						&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22cloud_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;&lt;br /&gt;
					]&#039;&lt;br /&gt;
	 ...&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Auch alle anderen Funktionen, die [[LogProxy]] bietet, können hier angewendet werden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Hinweise==&lt;br /&gt;
===Aktualisierung des Charts===&lt;br /&gt;
Damit der Refresh des Charts funktioniert, muss auch ein Device angegeben werden, der das Refresh triggert. Das Diagramm wird immer dann aktualisiert, wenn sich der Inhalt von &#039;&#039;&#039;data-get&#039;&#039;&#039; ändert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	data-device=&amp;quot;WohnzimmerHeizung&amp;quot;&lt;br /&gt;
	data-logdevice=&amp;quot;FileLog_WohnzimmerHeizung&amp;quot;&lt;br /&gt;
	...&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Aussehen der Linien===&lt;br /&gt;
Mit dem Attribut &#039;&#039;&#039;data-style&#039;&#039;&#039; kann das Aussehen der Linien des jeweiligen Graphen verändert werden. Hierfür können die Standard-FHEM-Styles verwendet werden. Dazu wird das Attribut mit &amp;lt;code&amp;gt;SVGplot&amp;lt;/code&amp;gt;, gefolgt von einem Leerzeichen und der gewünschten Farbe/Stil befüllt. Es existieren jedoch auch noch weitere, an FTUI angepasste Styles, zu finden in der CSS-Datei &amp;lt;code&amp;gt;css/ftui_chart.css&amp;lt;/code&amp;gt;. Um diese zu verwenden, wird das Attribut mit &amp;lt;code&amp;gt;ftui&amp;lt;/code&amp;gt;, gefolgt von einem Leerzeichen und der gewünschten Farbe/Stil befüllt. Eigene Styles können zum Beispiel in der Datei &amp;lt;code&amp;gt;css/fhem-table-ui-user.css&amp;lt;/code&amp;gt; definiert werden.&lt;br /&gt;
&lt;br /&gt;
Folgende Übersicht zeigt die im Standard verfügbaren &#039;&#039;&#039;Farben&#039;&#039;&#039;, alle Abbildungen sind mit im FTUI-Style entstanden:&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f0.png|thumb|none|150px|Farbe &amp;quot;l0&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f1.png|thumb|none|150px|Farbe &amp;quot;l1&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f2.png|thumb|none|150px|Farbe &amp;quot;l2&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f3.png|thumb|none|150px|Farbe &amp;quot;l3&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f4.png|thumb|none|150px|Farbe &amp;quot;l4&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f5.png|thumb|none|150px|Farbe &amp;quot;l5&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f6.png|thumb|none|150px|Farbe &amp;quot;l6&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Angabe zur Farbe kann dann mit der Linienart kombiniert werden. Dazu stehen folgende &#039;&#039;&#039;Stile&#039;&#039;&#039; zur Verfügung:&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-2D-normal.png|thumb|none|225px|Darstellung in 2D: Stil &amp;quot;normal&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-2D-dot.png|thumb|none|225px|Darstellung in 2D: Stil &amp;quot;dot&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-2D-dash.png|thumb|none|225px|Darstellung in 2D: Stil &amp;quot;dash&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-2D-fill.png|thumb|none|225px|Darstellung in 2D: Stil &amp;quot;fill&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-2D-sym.png|thumb|none|225px|Darstellung in 2D: Stil &amp;quot;sym&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-3D-normal.png|thumb|none|225px|Darstellung in 3D: Stil &amp;quot;normal&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-3D-dot.png|thumb|none|225px|Darstellung in 3D: Stil &amp;quot;dot&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-3D-dash.png|thumb|none|225px|Darstellung in 3D: Stil &amp;quot;dash&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-3D-fill.png|thumb|none|225px|Darstellung in 3D: Stil &amp;quot;fill&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-3D-sym.png|thumb|none|225px|Darstellung in 3D: Stil &amp;quot;sym&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Farbe und Stil werden kombiniert (zusammengeschrieben) beim Attribut &#039;&#039;&#039;data-style&#039;&#039;&#039; angegeben, sodass sich beispielsweise für eine graue Punktlinie folgendes ergibt: &amp;lt;code&amp;gt;data-style=&amp;quot;ftui l1dot&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
Um die Darstellung als normale Linie zu erhalten, darf im Gegensatz zu den anderen Linienformen der Stil &amp;lt;code&amp;gt;normal&amp;lt;/code&amp;gt; nicht angegeben werden. Für eine einfache graue Linie ist also die Angabe &amp;lt;code&amp;gt;data-style=&amp;quot;ftui l1&amp;quot;&amp;lt;/code&amp;gt; korrekt, wohingegen &amp;lt;code&amp;gt;data-style=&amp;quot;ftui l1normal&amp;quot;&amp;lt;/code&amp;gt; zu einer fehlerhaften Anzeige führt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Der Stil &#039;&#039;sym&#039;&#039; ist speziell dafür geeignet, Symbole statt Linien zu zeichnen. Dazu kann beim Attribut &#039;&#039;&#039;data-ptype&#039;&#039;&#039; als Linienform ein beliebiges Font-Awsome-, oder Open Automation-Icon angegeben werden. Alle in diesem Abschnitt enthaltenen Abbildungen sind mit &amp;lt;code&amp;gt;data-ptype=&amp;quot;lines&amp;quot;&amp;lt;/code&amp;gt; entstanden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Übergänge mit datenabhängigen Grenzen:&#039;&#039;&#039; Plotstile (data-style) können auch direkt als Gradienten auf Basis von Plot-Datenwerten definiert werden. Dazu muss der Plotstil als Array angegeben werden. Der erste Wert des Arrays gibt an, ob nur die Linie gezeichnet werden soll (Zahl angeben, die die Dicke der Linie definiert) oder gefüllt (&amp;quot;fill&amp;quot; eintragen). Alle danach folgenden Array Elemente sind beliebig viele Stopp Punkte für die Farbübergänge, welche wiederum aus Arrays mit 3 Parametern bestehen. Für jeden Stopp Punkt werden der Datenwert, die Farbe und die Durchsichtigkeit gesetzt. Hierdurch lassen sich z.B. Einfärbungen setzen, die für Temperaturplots immer negative Werte blau einfärben und positive Werte rot. Zwischen den Stop Punkten wird die Farbe interpoliert, also ein weicher Übergang generiert. Will man harte Übergänge muss man Zwei Stopp Punkte mit unterschiedlichen Farbwerten aber dem gleichen Datenwert erzeugen.&amp;lt;br&amp;gt;&lt;br /&gt;
Beispiel 1 für einen weichen Gradienten, der bei 0 von blau nach rot übergeht, bei diesem Übergang durchsichtig ist und von dort nach negativen bzw. positiven Werden immer deckender wird:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;data-style=&#039;[&amp;quot;fill&amp;quot;,[&amp;quot;-20&amp;quot;,&amp;quot;#0000ff&amp;quot;,&amp;quot;0.7&amp;quot;],[&amp;quot;0&amp;quot;,&amp;quot;#0000ff&amp;quot;,&amp;quot;0&amp;quot;],[&amp;quot;0&amp;quot;,&amp;quot;#ff0000&amp;quot;,&amp;quot;0&amp;quot;],[&amp;quot;302&amp;quot;,&amp;quot;#ff0000&amp;quot;,&amp;quot;0.7&amp;quot;]]&#039;&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Beispiel 2 mit einem harten Übergang von blau nach rot bei 0:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;data-style=&#039;[&amp;quot;fill&amp;quot;,[&amp;quot;-20&amp;quot;,&amp;quot;#0000ff&amp;quot;,&amp;quot;0.7&amp;quot;],[&amp;quot;0&amp;quot;,&amp;quot;#0000ff&amp;quot;,&amp;quot;0.7&amp;quot;],[&amp;quot;0&amp;quot;,&amp;quot;#ff0000&amp;quot;,&amp;quot;0.7&amp;quot;],[&amp;quot;50&amp;quot;,&amp;quot;#ff0000&amp;quot;,&amp;quot;0.7&amp;quot;]]&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
Es gibt auch die Möglichkeit den Bereich zwischen zwei Graphen einzufärben. Dazu muss ein Wert in Columnspec als Array angegeben werden. Ist dies der Fall, dann wird der zweite Graph umgekehrt an den ersten angehängt.&amp;lt;br&amp;gt;&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
data-columnspec=&#039;[&lt;br /&gt;
    &amp;quot;Func:logProxy_proplanta2Plot(\\x22AgroWeather\\x22,\\x22weatherIcon\\x22,$from,$to,12)&amp;quot;,&lt;br /&gt;
    [&lt;br /&gt;
        &amp;quot;Func:logProxy_proplanta2Plot(\\x22AgroWeather\\x22,\\x22tempMax\\x22,$from,$to,12)&amp;quot;,&lt;br /&gt;
        &amp;quot;Func:logProxy_proplanta2Plot(\\x22AgroWeather\\x22,\\x22tempMin\\x22,$from,$to,12)&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;Func:logProxy_proplanta2Plot(\\x22AgroWeather\\x22,\\x22rain\\x22,$from,$to,0,\\x22day\\x22)&amp;quot;&lt;br /&gt;
]&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:FTUI Widget Chart DynamicStyles.png|thumb|none|500px|dynamischer Übergang]]&lt;br /&gt;
&lt;br /&gt;
===Form der Linien===&lt;br /&gt;
Das Attribut &#039;&#039;&#039;data-ptype&#039;&#039;&#039; beeinflusst die Form der Linien. Hier sind folgende Werte möglich (in den Bildern sind zur Info zusätzlich auch immer points dargestellt):&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:Llines.png|thumb|none|350px|Darstellung in 2D: Stil &amp;quot;lines&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:Points.png|thumb|none|350px|Darstellung in 2D: Stil &amp;quot;points&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:Steps.png|thumb|none|350px|Darstellung in 2D: Stil &amp;quot;steps&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:Fsteps.png|thumb|none|350px|Darstellung in 2D: Stil &amp;quot;fsteps&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:Histeps.png|thumb|none|350px|Darstellung in 2D: Stil &amp;quot;histeps&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:Bars.png|thumb|none|350px|Darstellung in 2D: Stil &amp;quot;bars&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:Ibars.png|thumb|none|350px|Darstellung in 2D: Stil &amp;quot;ibars&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:Cubic.png|thumb|none|350px|Darstellung in 2D: Stil &amp;quot;cubic&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:Quadratic.png|thumb|none|350px|Darstellung in 2D: Stil &amp;quot;quadratic&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:QuadraticSmooth.png|thumb|none|350px|Darstellung in 2D: Stil &amp;quot;quadraticSmooth&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusätzlich ist es möglich, Symbole anzeigen zu lassen. Unterstützt werden Font-Awesome (&#039;fa-...&#039;), Open Automation (&#039;oa-...&#039;) und FHEM-Symbole (&#039;fs-...&#039;)). Damit die Symbole korrekt angezeigt werden, muss  im Attribut &#039;&#039;&#039;data-style&#039;&#039;&#039; der Stil &amp;lt;code&amp;gt;sym&amp;lt;/code&amp;gt; gewählt werden, da sonst nur Punkte, statt der Symbole gezeichnet werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;DG.wz.HZ.Heizungsventil&amp;quot;&lt;br /&gt;
	 data-logdevice=&amp;quot;FileLog_DG.wz.HZ.Heizungsventil&amp;quot;&lt;br /&gt;
	 ...&lt;br /&gt;
	 data-style=&amp;quot;ftui l1sym&amp;quot;&lt;br /&gt;
	 data-ptype=&amp;quot;fa-cloud&amp;quot;&lt;br /&gt;
	 ...&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:Ssymbols.png|thumb|none|500px|Darstellung in 2D: Stil &amp;quot;symbol fa-cloud&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Größe der Symbole ist in der Datei &amp;lt;code&amp;gt;css/ftui_chart.css&amp;lt;/code&amp;gt; auf 12px festgelegt. Dieser Wert kann in einer eigenen CSS-Datei durch Anpassung von &amp;lt;code&amp;gt;stroke-width&amp;lt;/code&amp;gt; überschrieben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.ftui.l0sym		{ stroke:#DDA400; stroke-width:12px; fill:none; }&lt;br /&gt;
.ftui.l1sym		{ stroke:#BBBBBB; stroke-width:12px; fill:none; }&lt;br /&gt;
.ftui.l2sym		{ stroke:#CC0000; stroke-width:12px; fill:none; }&lt;br /&gt;
.ftui.l3sym		{ stroke:#CCCC00; stroke-width:12px; fill:none; }&lt;br /&gt;
.ftui.l4sym		{ stroke:#33CC33; stroke-width:12px; fill:none; }&lt;br /&gt;
.ftui.l5sym		{ stroke:#33CCCC; stroke-width:12px; fill:none; }&lt;br /&gt;
.ftui.l6sym		{ stroke:#3333CC; stroke-width:12px; fill:none; }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;data-ptype&#039;&#039;&#039; kann auch Inhalt im Format &amp;lt;code&amp;gt;&#039;icon:1&#039;&amp;lt;/code&amp;gt; verarbeiten. Dann muss der zugehörige Wert in &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; den Pfad zu einem Icon (z.B. für Wettervorhersagen) beinhalten. Der Y-Wert wird dann vom ersten Graphen übernommen. Weitere Ausführungen hierzu im Beispiel [[#Darstellung der Wetter Icons im Diagramm]].&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:Wetterchart2.png|thumb|none|500px|Darstellung in 2D: Stil &amp;quot;Beispiel mit icons aus Readings&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Stapeln von Linien===&lt;br /&gt;
Über &#039;&#039;&#039;data-ptype&#039;&#039;&#039; kann zusätzlich festgelegt werden, ob Graphen übereinander gestapelt werden sollen. &amp;lt;code&amp;gt;data-ptype=&#039;lines:1&#039;&amp;lt;/code&amp;gt; bedeutet, dass der zugehörige Graph auf den Graph mit der Nummer 1 gestapelt werden soll. So etwas kann z.B. Sinn machen, wenn man den Stromverbrauch einzelner Devices darstellen und zusätzlich sehen will, wie hoch die Summe ist. Beispiel siehe unten.&lt;br /&gt;
&lt;br /&gt;
[[Datei:FTUI Widget Chart Stacked.png]]&lt;br /&gt;
&lt;br /&gt;
===Zeitstrahl / Start &amp;amp; Ende auf der X-Achse===&lt;br /&gt;
Die Attribute &#039;&#039;&#039;data-daysago_start&#039;&#039;&#039; und &#039;&#039;&#039;data-daysago_end&#039;&#039;&#039; dienen der Definition von Anfang und Ende der X-Achse. Im einfachsten Fall wird eine Anzahl an Tagen eingegeben, die sich auf das aktuelle Datum beziehen. Dabei gilt es zu beachten, dass es sich um &#039;&#039;vergangene Tage&#039;&#039; handelt. Das bedeutet, dass Tage in der Vergangenheit als positive Zahl angegeben werden, Tage in der Zukunft hingegen als negative Zahl. Es kann jeweils  auch ein fixes Datum (z.B. &#039;2013-10-23&#039;) angegeben werden. Uhrzeitangaben werden nur berücksichtigt, wenn &#039;&#039;&#039;data-nofulldays=&#039;true&#039; &#039;&#039;&#039; verwendet wird.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Relative Zeitangabe in Stunden/Tagen/Wochen/Monaten/Jahren&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Zur Ausgabe einer Anzahl an zurückliegenden Stunden bis zum aktuellen Zeitpunkt wird als Startzeitpunkt die Anzahl der Stunden/Tage/Wochen/Monate/Jahre angegeben, die angezeigt werden sollen, gefolgt vom Kleinbuchstaben &#039;&#039;&#039;h&#039;&#039;&#039; für Stunden, &#039;&#039;&#039;d&#039;&#039;&#039; für Tage, &#039;&#039;&#039;w&#039;&#039;&#039; für Wochen, &#039;&#039;&#039;m&#039;&#039;&#039; für Monate, &#039;&#039;&#039;y&#039;&#039;&#039; für Jahre, . Als Endzeitpunkt wird &#039;&#039;&#039;now&#039;&#039;&#039; gewählt.&amp;lt;br /&amp;gt;&lt;br /&gt;
Das nachfolgende Beispiel zeigt die Werte der vergangenen 3 Stunden an:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
data-nofulldays=&amp;quot;true&amp;quot;&lt;br /&gt;
data-daysago_start=&amp;quot;3h&amp;quot;&lt;br /&gt;
data-daysago_end=&amp;quot;now&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fester Zeitbereich des heutigen Tages (Stunden/Tage/Wochen/Monate/Jahre)&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Um ein festes Stunden/Tages/Wochen/Monats/Jahresfenster anzuzeigen, werden die absoluten Stunden/Tages/Wochen/Monats/Jahreszahlen mit negativem Vorzeichen, gefolgt vom Großbuchstaben &#039;&#039;&#039;H&#039;&#039;&#039; (entsprechend D/W/M/Y für Tage/Wochen/Monate/Jahre) angegeben. Wird &#039;&#039;&#039;data-daysago_start&#039;&#039;&#039; als positiver Wert angegeben, wird die Anzahl der Stunden/Tage/Wochen/Monate/Jahre von heute 0:00 Uhr subtrahiert (siehe Rechenweg weiter unten).&amp;lt;br /&amp;gt;&lt;br /&gt;
Das Beispiel zeigt den Zeitbereich von heute 5:00 Uhr bis heute 22:00 Uhr:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
data-nofulldays=&amp;quot;true&amp;quot;&lt;br /&gt;
data-daysago_start=&amp;quot;-5H&amp;quot;&lt;br /&gt;
data-daysago_end=&amp;quot;-22H&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fester Zeitbereich Tage-übergreifend&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Die Zeit in Tagen kann als Gleitkommazahl angegeben werden. Damit ist es möglich, Tage und Uhrzeiten zu kombinieren. Die Werte sind dann als Teil eines ganzen Tages, bezogen auf heute 0:00 Uhr zu errechnen und mit &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; als Teiler anzugeben.&amp;lt;br /&amp;gt;&lt;br /&gt;
Das nachfolgende Beispiel zeigt einen Zeitbereich von &#039;&#039;&#039;gestern 15:00 Uhr&#039;&#039;&#039; bis &#039;&#039;&#039;morgen 3:00 Uhr&#039;&#039;&#039;.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
data-nofulldays=&amp;quot;true&amp;quot;&lt;br /&gt;
data-daysago_start=&amp;quot;0.375&amp;quot;&lt;br /&gt;
data-daysago_end=&amp;quot;-1.125&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die nachfolgenden Rechenwege sind die Einheiten nur zur Verdeutlichung angegeben. Die Einheiten werden im Attribut nicht angegeben.&lt;br /&gt;
&lt;br /&gt;
Der Wert für &#039;&#039;&#039;GESTERN&#039;&#039;&#039; wird wie folgt ermittelt:&amp;lt;br /&amp;gt;&lt;br /&gt;
Ausgangspunkt ist heute 0:00 Uhr, gestern 15:00 Uhr liegt also 9 Stunden davor. Diese 9 Stunden sind ein &amp;lt;code&amp;gt;9/24 Tag&amp;lt;/code&amp;gt; und errechnet sich so:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1d / 24h = 0.0416666...d/h&lt;br /&gt;
0.0416d/h * 9h = 0.375d&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Wert für &#039;&#039;&#039;MORGEN&#039;&#039;&#039; wird wie folgt ermittelt:&amp;lt;br /&amp;gt;&lt;br /&gt;
Ausgangspunkt ist wieder heute 0:00 Uhr, morgen 3:00 Uhr liegt dann 27 Stunden dahinter. Der Einfachheit halber werden hier nur die 3 Stunden errechnet und dann ein ganzer Tag addiert:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1d / 24h = 0.0416666...d/h&lt;br /&gt;
0.0416d/h * 3h = 0.125d&lt;br /&gt;
&lt;br /&gt;
0.125d + 1d = 1.125d&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Da das Attribut Tage in der Vergangenheit erwartet, muss für einen Wert in der Zukunft wieder eine negative Zahl angegeben werden.&lt;br /&gt;
&lt;br /&gt;
===Zeitformat der X-Achse===&lt;br /&gt;
Die Zeitanzeige auf der X-Achse kann sehr flexibel eingestellt werden. Dafür stehen verschiedene Platzhalter zur Verfügung, die durch spezielle Zeichen (&amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt; &amp;lt;/code&amp;gt; (Leerzeichen), &amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;,&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;\&amp;lt;/code&amp;gt;) getrennt werden. Alle Zeichen werden trotz Escape-Zeichen (&amp;lt;code&amp;gt;\&amp;lt;/code&amp;gt;) in der Ausgabe angezeigt.&lt;br /&gt;
&lt;br /&gt;
Folgende Platzhalter werden unterstützt:&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;mm&#039;&amp;lt;/code&amp;gt;: Minuten als zweistellige Zahl&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;hh&#039;&amp;lt;/code&amp;gt;: Stunden als zweistellige Zahl&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;dd&#039;&amp;lt;/code&amp;gt;: Tag als zweistellige Zahl (Kalenderdatum)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;MM&#039;&amp;lt;/code&amp;gt;: Monat als zweistellige Zahl (z.B. 02 für Februar)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;MMM&#039;&amp;lt;/code&amp;gt;: Monat als dreistellige Abkürzung (z.B. Dec für Dezember)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;MMMM&#039;&amp;lt;/code&amp;gt;: Langname des Monats (z.B. March)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;ee&#039;&amp;lt;/code&amp;gt;: Wochentag als zweistellige Zahl (z.B. 00 für Sonntag)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;eee&#039;&amp;lt;/code&amp;gt;: Wochentag als dreistellige Abkürzung (z.B. Mon für Montag)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;eeee&#039;&amp;lt;/code&amp;gt;: Langname des Wochentags (z.B. Tuesday)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;yy&#039;&amp;lt;/code&amp;gt;: Jahr als zweistellige Zahl (z.B. 16 für 2016)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;yyyy&#039;&amp;lt;/code&amp;gt;: Jahr als vierstellige Zahl (z.B. 2016)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;LF&#039;&amp;lt;/code&amp;gt;: Fügt einen Zeilenumbruch hinzu&lt;br /&gt;
&lt;br /&gt;
Beispiel: Der String &amp;lt;code&amp;gt;&#039;MMM\LF\yyyy&#039;&amp;lt;/code&amp;gt; zeigt &amp;lt;code&amp;gt;&#039;Jan&#039;&amp;lt;/code&amp;gt; in der ersten, und &amp;lt;code&amp;gt;&#039;2016&#039;&amp;lt;/code&amp;gt; in der zweiten Zeile. &amp;lt;code&amp;gt;&#039;MM.dd 2016&#039;&amp;lt;/code&amp;gt; wird zu &amp;lt;code&amp;gt;&#039;03.05 2016&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Fadenkreuz-Cursor===&lt;br /&gt;
Der Fadenkreuz-Cursor zeigt die Momentanwerte, indem man ihn über die Graphen bewegt. In Desktop-Browsern reicht einfaches Bewegen des Maus. Unter iOS und Android kann der Cursor wird der Cursor durch einfaches Tippen auf die neue Position bewegt.&lt;br /&gt;
&lt;br /&gt;
Mit dem Attribut &#039;&#039;&#039;data-cursorgroup&#039;&#039;&#039; können Graphen gruppiert werden. Am Cursor werden dann die Momentanwerte aller Graphen gleichzeitig angezeigt, die die selbe Zahl besitzen, sobald man die Maus über einen aus der Gruppe bewegt.&lt;br /&gt;
&lt;br /&gt;
===Legende===&lt;br /&gt;
Mit dem Attribut &#039;&#039;&#039;data-legendpos&#039;&#039;&#039; kann die Position der Legende innerhalb des Diagramms festgelegt werden. Die Position wird mit einem Array, bestehend aus zwei Werten im Format &amp;lt;code&amp;gt;&#039;[&amp;quot;&amp;lt;horizontal&amp;gt;&amp;quot;,&amp;quot;&amp;lt;vertikal&amp;gt;&amp;quot;]&#039;&amp;lt;/code&amp;gt; angegeben. Für die horizontale Positionierung sind &amp;lt;code&amp;gt;&#039;left&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&#039;right&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&#039;before&#039;&amp;lt;/code&amp;gt;, und &amp;lt;code&amp;gt;&#039;behind&#039;&amp;lt;/code&amp;gt;, die vertikale Positionierung &amp;lt;code&amp;gt;&#039;top&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&#039;bottom&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&#039;above&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&#039;below&#039;&amp;lt;/code&amp;gt; erlaubt (der Unterschied zwischen &amp;lt;code&amp;gt;&#039;left&#039;&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;&#039;before&#039;&amp;lt;/code&amp;gt; liegt darin, dass im zweiten Fall die Legende nicht in den Zeichenbereich gesetzt wird sondern vor das ganze Chart (entsprechend für &amp;lt;code&amp;gt;&#039;after&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&#039;above&#039;&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;&#039;below&#039;&amp;lt;/code&amp;gt;). Alternativ können auch Zahlen verwendet werden, die die Position in Prozent angeben. Durch verschieben mit der Maus oder durch verschieben mit dem Finger oder Stift auf Touch Devices kann die Legende auch an eine andere Position verschoben werden.&lt;br /&gt;
&lt;br /&gt;
Wenn die Legende eingeblendet ist, kann mittels Klick auf einen Legendeneintrag der zugehörige Graph ein- und ausgeblendet werden.&lt;br /&gt;
&lt;br /&gt;
===3-dimensionale Drehung===&lt;br /&gt;
&#039;&#039;&#039;data-ddd&#039;&#039;&#039; ermöglicht, den Graphen 3-dimensional zu drehen. Als Wert wird ein Array mit den 3 Winkeln für x, y und z erwartet, wobei z selbst bisher nicht unterstützt wird.&lt;br /&gt;
&lt;br /&gt;
Beispiel: &amp;lt;code&amp;gt;data-ddd=&#039;[&amp;quot;40&amp;quot;,&amp;quot;60&amp;quot;,&amp;quot;0&amp;quot;]&#039;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Wenn der 3D Modus aktiv ist (&#039;&#039;&#039;data-ddd&#039;&#039;&#039; gesetzt) sind 2 zusätzliche Parameter verfügbar um das Aussehen der Graphen zu beeinflussen. &#039;&#039;&#039;data-dddspace&#039;&#039;&#039; gibt an, wie viele pixel der Raum zwischen den einzelnen in z-Richtung hintereinander angeordneten Graphen betragen soll.&lt;br /&gt;
&#039;&#039;&#039;data-dddwidth&#039;&#039;&#039; legt fest, wie viele pixel die einzelnen Graphen tief (oder dick) sein sollen.&lt;br /&gt;
&lt;br /&gt;
Wenn das Array angegeben wird, erscheinen zwei zusätzliche Buttons im Diagramm, mit denen die Drehung in X- und Y-Richtung verändert werden kann.&lt;br /&gt;
&lt;br /&gt;
===Diagrammtitel===&lt;br /&gt;
Mit dem Attribut &#039;&#039;&#039;data-title&#039;&#039;&#039; kann dem Diagramm, ähnlich wie in FHEM-SVG-Plots, ein Titel hinzugefügt werden.&lt;br /&gt;
&lt;br /&gt;
Folgende Platzhalter werden unterstützt:&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;min1&#039;&amp;lt;/code&amp;gt;: Minimaler Y-Wert des ersten Graphs&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;max1&#039;&amp;lt;/code&amp;gt;: Maximaler Y-Wert des ersten Graphs&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;avg1&#039;&amp;lt;/code&amp;gt;: Mittlerer Y-Wert des ersten Graphs&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;cnt1&#039;&amp;lt;/code&amp;gt;: Anzahl der dargestellten Einzelwerte im ersten Graph&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;currval1&#039;&amp;lt;/code&amp;gt;: Letzter, bzw. aktuellster Y-Wert des ersten Graphs&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;mindate1&#039;&amp;lt;/code&amp;gt;: Niedrigster Wert auf der X-Achse des ersten Graphs&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;maxdate1&#039;&amp;lt;/code&amp;gt;: Höchster Wert auf der X-Achse vom ersten Graphs&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;currdate1&#039;&amp;lt;/code&amp;gt;: Letzter, bzw. aktuellster Wert auf der X-Achse des ersten Graphs&lt;br /&gt;
&lt;br /&gt;
Durch Einsetzen einer anderen Zahl statt &#039;1&#039; können auch die Werte der anderen Graphen angezeigt werden. Das Weglassen der Zahl bewirkt, dass der jeweils zutreffende Wert automatisch ermittelt wird. Bedeutet: &amp;lt;code&amp;gt;max&amp;lt;/code&amp;gt; führt dazu, dass der höchste Wert aller angezeigter Graphen verwendet wird.&lt;br /&gt;
Zusätzlich ist es möglich durch &amp;quot;$eval(&amp;lt;regexp&amp;gt;)&amp;quot; regular Expressions auszuwerten (also z.B. Berechnungen durchzuführen). In &amp;lt;regexp&amp;gt; können auch &amp;quot;$data()&amp;quot; vorkommen.&lt;br /&gt;
&lt;br /&gt;
Beispiel: &amp;lt;code&amp;gt;data-title=&amp;quot;Klima Wohnzimmer Average: $eval(parseInt($data{avg1}*10)/10)°C / Max: $eval(parseInt($data{max1}*10)/10)°C&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Buttons im Diagramm===&lt;br /&gt;
Es gibt mehrere Buttons, mit denen sich die Anzeige des Diagramms verändern lässt. &amp;lt;code&amp;gt;&amp;lt;-&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;-&amp;gt;&amp;lt;/code&amp;gt; bewegen die Graphen nach links und rechts. &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt; zoomen die Anzeige. &amp;lt;code&amp;gt;legend&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;cursor&amp;lt;/code&amp;gt; schalten die zugehörigen Anzeigen ein und aus. Falls der 3D Modus eingeschaltet ist, gibt es Buttons zum Drehen der Darstellung um die X- und Y-Achse. Falls &amp;lt;code&amp;gt;data-timeranges&amp;lt;/code&amp;gt; gesetzt ist, wird ein Pulldown Menü dargestellt, welches die Auswahl von dort definierten Zeiträumen für die X-Achse erlaubt.&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
===Einfaches Diagramm===&lt;br /&gt;
Das Beispiel zeigt ein einfaches Diagramm mit 4 unterschiedlich formatierten Graphen, Legende und Momentanwerten am Fadenkreuz-Cursor.&lt;br /&gt;
&lt;br /&gt;
[[File:Chart_tabletUI.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	data-logdevice=&#039;[&amp;quot;Log.Garden&amp;quot;,&amp;quot;Log.Garden&amp;quot;,&amp;quot;Log.Garden&amp;quot;,&amp;quot;Log.Predicted&amp;quot;]&#039;&lt;br /&gt;
	data-columnspec=&#039;[&amp;quot;4:Garden.T:15:&amp;quot;,&amp;quot;10:Garden.T:0:delta-h&amp;quot;,&amp;quot;10:Garden.T:0:delta-d&amp;quot;,&amp;quot;4:predicted.*:15:&amp;quot;]&#039;&lt;br /&gt;
	data-style=&#039;[&amp;quot;ftui l0fill&amp;quot;,&amp;quot;ftui l1fill&amp;quot;,&amp;quot;ftui l2&amp;quot;,&amp;quot;ftui l3dot&amp;quot;]&#039;&lt;br /&gt;
	data-ptype=&#039;[&amp;quot;lines&amp;quot;,&amp;quot;histeps&amp;quot;,&amp;quot;histeps&amp;quot;,&amp;quot;cubic&amp;quot;]&#039;&lt;br /&gt;
	data-uaxis=&#039;[&amp;quot;primary&amp;quot;,&amp;quot;secondary&amp;quot;,&amp;quot;secondary&amp;quot;,&amp;quot;primary&amp;quot;]&#039;&lt;br /&gt;
	data-legend=&#039;[&amp;quot;Temperature&amp;quot;,&amp;quot;Rain/hour&amp;quot;,&amp;quot;Rain/day&amp;quot;,&amp;quot;Predicted Temp.&amp;quot;]&#039;&lt;br /&gt;
	data-yunit=&amp;quot;°C&amp;quot;&lt;br /&gt;
	data-ytext=&amp;quot;Temperature&amp;quot;&lt;br /&gt;
	data-minvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	data-maxvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	data-yunit_sec=&amp;quot;mm&amp;quot;&lt;br /&gt;
	data-ytext_sec=&amp;quot;Rain (mm)&amp;quot;&lt;br /&gt;
	data-height=&amp;quot;250&amp;quot;&lt;br /&gt;
	data-yticks=&amp;quot;auto&amp;quot;&lt;br /&gt;
	data-minvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	data-maxvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	data-nofulldays=&amp;quot;true&amp;quot;&lt;br /&gt;
	data-daysago_start=&amp;quot;2013-08-13T00:00:00&amp;quot;&lt;br /&gt;
	data-daysago_end=&amp;quot;2013-08-14T00:00:00&amp;quot;&lt;br /&gt;
	data-cursorgroup=&amp;quot;1&amp;quot;&lt;br /&gt;
	data-scrollgroup=&amp;quot;1&amp;quot;&lt;br /&gt;
	data-xticks=&amp;quot;auto&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===7-Tage-Wettervorhersage mit Proplanta===&lt;br /&gt;
In diesem Beispiel wird gezeigt, wie die Vorhersagewerte von [[PROPLANTA]] in einem Diagramm dargestellt werden können. Da die Werte nicht in einer Datenbank oder einem FileLog vorliegen, müssen sie über [[LogProxy]] verarbeitet werden. Dafür sind einige Vorbereitungen in FHEM nötig.&lt;br /&gt;
&lt;br /&gt;
[[File:FTUI_Widget_Chart-fc-Proplanta.png|941px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.&#039;&#039;&#039; Ein LogProxy-Device muss vorhanden sein:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define myLogProxy logProxy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2.&#039;&#039;&#039; In der Datei &amp;lt;code&amp;gt;99_myUtils.pm&amp;lt;/code&amp;gt; muss folgende Routine hinzugefügt werden, die die Daten bereitstellt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#---------------------------------------&lt;br /&gt;
# Proplanta LogProxy-Funktion&lt;br /&gt;
#---------------------------------------&lt;br /&gt;
sub logProxy_proplanta2Plot($$$$;$$) {&lt;br /&gt;
	my ($device, $fcValue, $from, $to, $fcHour, $expMode) = @_;&lt;br /&gt;
    my $regex;&lt;br /&gt;
    my @rl;&lt;br /&gt;
    &lt;br /&gt;
	return undef if(!$device);&lt;br /&gt;
    &lt;br /&gt;
    if($fcValue =~ s/_$//) {&lt;br /&gt;
        $regex = &amp;quot;^fc[\\d]+_&amp;quot;.$fcValue.&amp;quot;[\\d]{2}\$&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
        $regex = &amp;quot;^fc[\\d]+_&amp;quot;.$fcValue.&amp;quot;\$&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    $fcHour = 12 if(!defined $fcHour);&lt;br /&gt;
    $expMode = &amp;quot;point&amp;quot; if(!defined $expMode);&lt;br /&gt;
&lt;br /&gt;
	if( defined($defs{$device}) ) {&lt;br /&gt;
		if( $defs{$device}{TYPE} eq &amp;quot;PROPLANTA&amp;quot; ) {&lt;br /&gt;
            @rl = sort{&lt;br /&gt;
                my ($an) = ($a =~ m/fc(\d+)_.*/);&lt;br /&gt;
                my ($bn) = ($b =~ m/fc(\d+)_.*/);&lt;br /&gt;
                $an &amp;lt;=&amp;gt; $bn or $a cmp $b;&lt;br /&gt;
                }( grep /${regex}/,keys %{$defs{$device}{READINGS}} );&lt;br /&gt;
			return undef if( !@rl );&lt;br /&gt;
		} else {&lt;br /&gt;
			Log3 undef, 2, &amp;quot;logProxy_proplanta2Plot: $device is not a PROPLANTA device&amp;quot;;&lt;br /&gt;
			return undef;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	my $fromsec = SVG_time_to_sec($from);&lt;br /&gt;
	my $tosec   = SVG_time_to_sec($to);&lt;br /&gt;
	my $sec = $fromsec;&lt;br /&gt;
	my ($h,$fcDay,$mday,$mon,$year);&lt;br /&gt;
	my $timestamp;&lt;br /&gt;
    &lt;br /&gt;
	my $reading;&lt;br /&gt;
	my $value;&lt;br /&gt;
	my $prev_value;&lt;br /&gt;
	my $min = 999999;&lt;br /&gt;
	my $max = -999999;&lt;br /&gt;
	my $ret = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	# while not end of plot range reached&lt;br /&gt;
	while(($sec &amp;lt; $tosec) &amp;amp;&amp;amp; @rl) {&lt;br /&gt;
		#remember previous value for start of plot range&lt;br /&gt;
		$prev_value = $value;&lt;br /&gt;
&lt;br /&gt;
		$reading = shift @rl;&lt;br /&gt;
        ($fcDay) = $reading =~ m/^fc(\d+).*/;&lt;br /&gt;
   		$h = ($reading =~ m/.*(\d\d)$/)?$1:$fcHour;&lt;br /&gt;
		$value = ReadingsVal($device,$reading,undef);&lt;br /&gt;
        &lt;br /&gt;
		($mday,$mon,$year) = split(&#039;\.&#039;,ReadingsVal($device,&amp;quot;fc&amp;quot;.$fcDay.&amp;quot;_date&amp;quot;,undef));&lt;br /&gt;
		$timestamp = sprintf(&amp;quot;%04d-%02d-%02d_%02d:%02d:%02d&amp;quot;, $year, $mon, $mday, $h, 0, 0);&lt;br /&gt;
		$sec = SVG_time_to_sec($timestamp);&lt;br /&gt;
        &lt;br /&gt;
		# skip all values before start of plot range&lt;br /&gt;
		next if( SVG_time_to_sec($timestamp) &amp;lt; $fromsec );&lt;br /&gt;
&lt;br /&gt;
		# add first value at start of plot range&lt;br /&gt;
		if( !$ret &amp;amp;&amp;amp; $prev_value ) {&lt;br /&gt;
		  $min = $prev_value if( (looks_like_number($prev_value) &amp;amp;&amp;amp; ($prev_value &amp;lt; $min)) || ($prev_value lt $min) );&lt;br /&gt;
		  $max = $prev_value if( (looks_like_number($prev_value) &amp;amp;&amp;amp; ($prev_value &amp;gt; $max)) || ($prev_value gt $max) );&lt;br /&gt;
		  $ret .= &amp;quot;$from $prev_value\n&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		# done if after end of plot range&lt;br /&gt;
		last if($sec &amp;gt; $tosec);&lt;br /&gt;
&lt;br /&gt;
		$min = $value if( (looks_like_number($value) &amp;amp;&amp;amp; ($value &amp;lt; $min )) || ($value lt $min) );&lt;br /&gt;
		$max = $value if( (looks_like_number($value) &amp;amp;&amp;amp; ($value &amp;gt; $max )) || ($value gt $max) );&lt;br /&gt;
&lt;br /&gt;
		# add actual controll point&lt;br /&gt;
		$ret .= &amp;quot;$timestamp $value\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#		Log 1, &amp;quot;$timestamp $value -0- $reading&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
    if(($sec &amp;lt; $tosec) &amp;amp;&amp;amp; !@rl &amp;amp;&amp;amp; ($expMode eq &amp;quot;day&amp;quot;)) {&lt;br /&gt;
    	$timestamp = sprintf(&amp;quot;%04d-%02d-%02d_%02d:%02d:%02d&amp;quot;, $year, $mon, $mday, 23, 59, 59);&lt;br /&gt;
    	if(SVG_time_to_sec($timestamp) &amp;lt; $tosec) {&lt;br /&gt;
        	$ret .= &amp;quot;$timestamp $value\n&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
			$ret .= &amp;quot;$to $value\n&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    elsif(($sec &amp;gt; $tosec) &amp;amp;&amp;amp; ($expMode eq &amp;quot;day&amp;quot;)) {&lt;br /&gt;
       	$value = $prev_value + ($value - $prev_value)*(86400 + ($tosec - $sec))/86400;&lt;br /&gt;
       	$ret .= &amp;quot;$to $value\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
	return ($ret,$min,$max,$prev_value);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend können die Daten im Chart-Widget angezeigt werden. Der Device-Name von Proplanta heißt hier im Beispiel &amp;lt;code&amp;gt;AU.xx.WE.Proplanta&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;AU.xx.WE.Proplanta&amp;quot;&lt;br /&gt;
	 data-logdevice=&#039;[&lt;br /&gt;
	 					&amp;quot;myLogProxy&amp;quot;,&lt;br /&gt;
	 					&amp;quot;myLogProxy&amp;quot;,&lt;br /&gt;
	 					&amp;quot;myLogProxy&amp;quot;&lt;br /&gt;
	 				]&#039;&lt;br /&gt;
	 data-columnspec=&#039;[&lt;br /&gt;
	 					&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22rain_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
	 					&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22chOfRain_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
	 					&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22cloud_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;&lt;br /&gt;
	 				]&#039;&lt;br /&gt;
	 data-style=&#039;[&lt;br /&gt;
	 					&amp;quot;ftui l6fill&amp;quot;,&lt;br /&gt;
	 					&amp;quot;ftui l5fill&amp;quot;,&lt;br /&gt;
	 					&amp;quot;ftui l1fill&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-ptype=&#039;[&lt;br /&gt;
	 					&amp;quot;steps&amp;quot;,&lt;br /&gt;
	 					&amp;quot;quadraticSmooth&amp;quot;,&lt;br /&gt;
	 					&amp;quot;quadraticSmooth&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-uaxis=&#039;[&lt;br /&gt;
	 					&amp;quot;primary&amp;quot;,&lt;br /&gt;
	 					&amp;quot;secondary&amp;quot;,&lt;br /&gt;
	 					&amp;quot;secondary&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-legend=&#039;[&lt;br /&gt;
	 					&amp;quot;Regen&amp;quot;,&lt;br /&gt;
	 					&amp;quot;Regenwahrscheinlichkeit&amp;quot;,&lt;br /&gt;
	 					&amp;quot;Wolken&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-yunit=&amp;quot;mm&amp;quot;&lt;br /&gt;
	 data-ytext=&amp;quot;Regen&amp;quot;&lt;br /&gt;
	 data-yunit_sec=&amp;quot;%&amp;quot;&lt;br /&gt;
	 data-ytext_sec=&amp;quot;Chance auf Regen / Wolken&amp;quot;&lt;br /&gt;
	 data-timeformat=&amp;quot;eeee&amp;quot;&lt;br /&gt;
	 data-minvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-maxvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-minvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-maxvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-daysago_start = &amp;quot;0&amp;quot;&lt;br /&gt;
	 data-daysago_end = &amp;quot;-7&amp;quot;&lt;br /&gt;
	 data-xticks=&amp;quot;1440&amp;quot;&lt;br /&gt;
	 data-yticks=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-title=&amp;quot;7-Tage-Wettervorhersage&amp;quot;&lt;br /&gt;
	 data-showlegend=&amp;quot;true&amp;quot;&lt;br /&gt;
	 class=&amp;quot;nobuttons fullsize&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hilfreiche Links und Quellen zu diesem Beispiel:&#039;&#039;&#039;&lt;br /&gt;
*[[LogProxy|LogProxy im FHEM-Wiki]]&lt;br /&gt;
*{{Link2Forum|Topic=22967|Message=246973|LinkText=Stundengenaue Wettervorhersage (#1) im FHEM-Forum}}&lt;br /&gt;
*{{Link2Forum|Topic=22967|Message=334713|LinkText=Stundengenaue Wettervorhersage (#2) im FHEM-Forum}}&lt;br /&gt;
&lt;br /&gt;
===Darstellung der Wetter Icons im Diagramm===&lt;br /&gt;
&lt;br /&gt;
[[File:Wetterchart2.png]]&lt;br /&gt;
&lt;br /&gt;
Wie oben bereits beschrieben, gibt es beim Chart grundsätzlich die Möglichkeit, Icons, welche in Form von URLs in den Logs abgelegt sind oder welche per logProxy generiert werden, darzustellen. Die Icons werden auf genau dem gleichen Weg von FHEM gelesen, wie alle anderen Datenpunkte. Im Folgenden wird ein Beispiel gezeigt, mit dem die im Proplanta Modul als Readings abgelegten Icons per logProxy Funktion gelesen und in ein Chart eingebaut werden könnnen.&lt;br /&gt;
Da es beim Proplanta Modul für die ersten 7 Tage nicht das Reading &amp;lt;code&amp;gt;fc#_weatherIcon&amp;lt;/code&amp;gt; gibt, sondern mehrere Readings für unterschiedliche Tageszeiten wogegen für die zweiten 7 Tage ausschließlich das Reading &amp;lt;code&amp;gt;fc#_weatherIcon&amp;lt;/code&amp;gt; vorhanden ist, sollte per &amp;lt;code&amp;gt;attr device userReading&amp;lt;/code&amp;gt; mit folgendem Eintrag dafür gesorgt werden, dass für alle Tage ein Reading &amp;lt;code&amp;gt;fc#_weatherIcon&amp;lt;/code&amp;gt; vorhanden ist (alternativ könnten auch 2 Graphen gezeichnet werden, wobei der erste dann nur die ersten 7 Tage enthält und der zweite die letzen 7 Tage, will man nur die ersten 7 Tage darstellen braucht man das userReading nicht unbedingt).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
fc0_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc0_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);},&lt;br /&gt;
fc1_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc1_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);},&lt;br /&gt;
fc2_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc2_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);},&lt;br /&gt;
fc3_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc3_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);},&lt;br /&gt;
fc4_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc4_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);},&lt;br /&gt;
fc5_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc5_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);},&lt;br /&gt;
fc6_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc6_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Um die Icons darzustellen muss ein zusätzlicher Graph definiert werden. Dieser nutzt neben der Columnspec, die die URLs abruft den Parameter &amp;lt;code&amp;gt;data-ptype=&amp;quot;icons:#&amp;quot;&amp;lt;/code&amp;gt; (# ist eine Zahl und steht für die Nummer, beginnend bei 0 des Graphen, welcher für die y-Position der Icons verwendet werden soll) und den Stil &amp;lt;code&amp;gt;sym&amp;lt;/code&amp;gt;. Der Wert für die Symbolgröße sollte z.B. durch eine zusätzliche Definition im File fhem-tablet-ui-user.css in der Form:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* icon lines */&lt;br /&gt;
.ftui.l99icon	{ stroke:#DDA400; stroke-width:48px; fill:none; }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Im folgenden ein Beispiel, welches eine Linie für die Maximale Tagestemperatur zeichnet und auf dieser Linie die Wetter Icons darstellt.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;AU.xx.WE.Proplanta&amp;quot;&lt;br /&gt;
	 data-logdevice=&#039;[&lt;br /&gt;
	 					&amp;quot;myLogProxy&amp;quot;,&lt;br /&gt;
	 					&amp;quot;myLogProxy&amp;quot;&lt;br /&gt;
	 				]&#039;&lt;br /&gt;
	 data-columnspec=&#039;[&lt;br /&gt;
	 					&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22weatherIcon\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
	 					&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22tempMax\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;&lt;br /&gt;
	 				]&#039;&lt;br /&gt;
	 data-style=&#039;[&lt;br /&gt;
	 					&amp;quot;ftui l99icon&amp;quot;,&lt;br /&gt;
	 					&amp;quot;ftui l1fill&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-ptype=&#039;[&lt;br /&gt;
	 					&amp;quot;icons:1&amp;quot;,&lt;br /&gt;
	 					&amp;quot;quadraticSmooth&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-uaxis=&#039;[&lt;br /&gt;
	 					&amp;quot;primary&amp;quot;,&lt;br /&gt;
	 					&amp;quot;primary&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-legend=&#039;[&lt;br /&gt;
	 					&amp;quot;Wetterbedingung&amp;quot;,&lt;br /&gt;
	 					&amp;quot;Max. Temperature&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-yunit=&amp;quot;°C&amp;quot;&lt;br /&gt;
	 data-ytext=&amp;quot;Temperature (°C)&amp;quot;&lt;br /&gt;
	 data-timeformat=&amp;quot;ee\LF\dd.MM&amp;quot;&lt;br /&gt;
	 data-minvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-maxvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-minvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-maxvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-daysago_start=&amp;quot;-1w&amp;quot;&lt;br /&gt;
	 data-y_margin=&amp;quot;20&amp;quot;&lt;br /&gt;
	 data-daysago_end=&amp;quot;-3w&amp;quot;&lt;br /&gt;
	 data-xticks=&amp;quot;1440&amp;quot;&lt;br /&gt;
	 data-yticks=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-title=&amp;quot;14-Tage-Wettervorhersage&amp;quot;&lt;br /&gt;
	 data-showlegend=&amp;quot;true&amp;quot;&lt;br /&gt;
	 class=&amp;quot;nobuttons fullsize&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Kuchendiagramme===&lt;br /&gt;
In folgendem Beispiel wird gezeigt, wie man ein &amp;quot;Kuchendiagramm&amp;quot; darstellen kann.&lt;br /&gt;
&lt;br /&gt;
[[File:PieChart.png]]&lt;br /&gt;
&lt;br /&gt;
Ähnlich wie bei den Beispielen für die Wetter Darstellungen wird hierzu auch wieder logProxy benötigt. Zunächst muss die folgende zusätzliche Funktion in &amp;lt;code&amp;gt;99_myUtils.pm&amp;lt;/code&amp;gt; einfügen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#---------------------------------------&lt;br /&gt;
# Funktion zum Erzeugen der Inputs für Kuchendiagramme&lt;br /&gt;
#---------------------------------------&lt;br /&gt;
sub logProxy_values2PieChart($$$$;$$) {&lt;br /&gt;
	my ($device, $reading, $angle_start, $angle_dif, $inner_rad, $show_text) = @_;&lt;br /&gt;
	Log3 undef, 1, &amp;quot;$device, $reading, $angle_start, $angle_dif, $inner_rad, $show_text\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	use constant PI =&amp;gt; 4 * atan2(1,1);&lt;br /&gt;
	&lt;br /&gt;
	my $value=ReadingsVal($device,$reading,0);&lt;br /&gt;
&lt;br /&gt;
	my $angle_delta = $value/100*360;&lt;br /&gt;
	$angle_start = $angle_start/100*360;&lt;br /&gt;
	&lt;br /&gt;
	my $rad=10;&lt;br /&gt;
	my $irad=0;&lt;br /&gt;
	if ($inner_rad) {&lt;br /&gt;
		$irad = $rad*$inner_rad;&lt;br /&gt;
	}&lt;br /&gt;
	my $angle=$angle_start/360*2.0*PI;&lt;br /&gt;
	my $x=$irad*sin($angle);&lt;br /&gt;
	my $y=$irad*cos($angle);&lt;br /&gt;
	my $ret .= &amp;quot;;p &amp;quot;.$x.&amp;quot; &amp;quot;.$y.&amp;quot;\n&amp;quot;; # add segment at angle $angle&lt;br /&gt;
	&lt;br /&gt;
	for (my $i=$angle_start; $i&amp;lt;=$angle_start+$angle_delta; $i+=$angle_dif) {&lt;br /&gt;
		$angle = $i/360*2.0*PI;&lt;br /&gt;
		$x = $rad*sin($angle);&lt;br /&gt;
		$y = $rad*cos($angle);&lt;br /&gt;
		$ret .= &amp;quot;;p &amp;quot;.$x.&amp;quot; &amp;quot;.$y.&amp;quot;\n&amp;quot;; # add segment at angle $angle&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	$angle = ($angle_start+$angle_delta)/360*2.0*PI; # add last segment &lt;br /&gt;
	$ret .= &amp;quot;;p &amp;quot;.$rad*sin($angle).&amp;quot; &amp;quot;.$rad*cos($angle).&amp;quot;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	if ($inner_rad) {&lt;br /&gt;
		for (my $i=$angle_start; $i&amp;lt;$angle_start+$angle_delta; $i+=$angle_dif) {&lt;br /&gt;
			$angle = ($angle_start+$angle_start+$angle_delta-$i)/360*2.0*PI;&lt;br /&gt;
			$x = $irad*sin($angle);&lt;br /&gt;
			$y = $irad*cos($angle);&lt;br /&gt;
			$ret .= &amp;quot;;p &amp;quot;.$x.&amp;quot; &amp;quot;.$y.&amp;quot;\n&amp;quot;; # add segment at angle $angle&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$angle = ($angle_start)/360*2.0*PI; # add last segment &lt;br /&gt;
	$ret .= &amp;quot;;p &amp;quot;.$irad*sin($angle).&amp;quot; &amp;quot;.$irad*cos($angle).&amp;quot;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	if ($show_text) { # show text values&lt;br /&gt;
		$x = ($rad+$irad)/2*sin((2*$angle_start+$angle_delta)/2/360*2.0*PI);&lt;br /&gt;
		$y = ($rad+$irad)/2*cos((2*$angle_start+$angle_delta)/2/360*2.0*PI);&lt;br /&gt;
&lt;br /&gt;
		$ret .= &amp;quot;;t &amp;quot;.$x.&amp;quot; &amp;quot;.$y.&amp;quot; middle &amp;quot;.$show_text.&amp;quot;:&amp;quot;.$value.&amp;quot;%\n&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return($ret);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
In FHEM braucht man Readings, welche eine Zahl enthalten, die als Prozentwert interpretiert wird. Für jeden Prozentwert (also für jedes Reading) generiert die o.a. Funktion nun den Chart Input für ein Kuchenstück und liefert diesen als Antwort auf das GET, welches das Chart Widget auslöst. Dazu braucht die Funktion folgende Parameter: (Name des FHEM Devices, Name des Readings, Start Winkel des Kuchenstücks (Mathematisch gegen den Uhrzeigersinn in Grad), Delta Winkel zum Zeichnen (legt fest in welchen Schritten der Teilkreis des Kuchenstücks gezeichnet wird), Skalierungsfaktor für inneren Ring wenn ein Ring gezeichtnet werden soll (0 bedeutet komplette Kuchenstücke), optionaler Text der ins Kuchenstück vor die Prozentzahl geschrieben wird).&lt;br /&gt;
Im Folgenden eine Beispielkonfiguration für die Darstellung als Kuchendiagramm, die Readings heißen hier dPer1 bis dPer4. Der Startwinkel wird duch Aufsummierung der jeweils vorher schon gezeichneten Kuchenstücke gebildet, dadurch entstehen aneinander hängende Stücke.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
[[Datei:[[Datei:Beispiel.jpg]]]]&amp;lt;div class=&amp;quot;normal noaxes nobuttons&amp;quot;&lt;br /&gt;
        data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
        data-logdevice=&#039;[&amp;quot;lp&amp;quot;]&#039;&lt;br /&gt;
		data-logfile=&amp;quot;CURRENT&amp;quot;&lt;br /&gt;
        data-columnspec=&#039;[&lt;br /&gt;
			&amp;quot;Func:logProxy_values2PieChart(\&amp;quot;dPer1\&amp;quot;,\&amp;quot;state\&amp;quot;,ReadingsVal(\&amp;quot;dPer4\&amp;quot;,\&amp;quot;state\&amp;quot;,0)+ReadingsVal(\&amp;quot;dPer3\&amp;quot;,\&amp;quot;state\&amp;quot;,0),5,0,\&amp;quot;first\&amp;quot;)&amp;quot;,&lt;br /&gt;
			&amp;quot;Func:logProxy_values2PieChart(\&amp;quot;dPer2\&amp;quot;,\&amp;quot;state\&amp;quot;,ReadingsVal(\&amp;quot;dPer4\&amp;quot;,\&amp;quot;state\&amp;quot;,0)+ReadingsVal(\&amp;quot;dPer3\&amp;quot;,\&amp;quot;state\&amp;quot;,0)+ReadingsVal(\&amp;quot;dPer1\&amp;quot;,\&amp;quot;state\&amp;quot;,0),5,0,\&amp;quot;second\&amp;quot;)&amp;quot;,&lt;br /&gt;
			&amp;quot;Func:logProxy_values2PieChart(\&amp;quot;dPer3\&amp;quot;,\&amp;quot;state\&amp;quot;,ReadingsVal(\&amp;quot;dPer4\&amp;quot;,\&amp;quot;state\&amp;quot;,0),5,0,\&amp;quot;third\&amp;quot;)&amp;quot;,&lt;br /&gt;
			&amp;quot;Func:logProxy_values2PieChart(\&amp;quot;dPer4\&amp;quot;,\&amp;quot;state\&amp;quot;,0,5,0,\&amp;quot;fourth\&amp;quot;)&amp;quot;&lt;br /&gt;
		]&#039;&lt;br /&gt;
        data-style=&#039;[&amp;quot;ftui l0fill&amp;quot;,&amp;quot;ftui l1fill&amp;quot;,&amp;quot;ftui l2fill&amp;quot;,&amp;quot;ftui l3fill&amp;quot;]&#039;&lt;br /&gt;
        data-ptype=&#039;[&amp;quot;lines&amp;quot;]&#039;&lt;br /&gt;
        data-uaxis=&#039;[&amp;quot;primary&amp;quot;]&#039;&lt;br /&gt;
        data-legend=&#039;[&amp;quot;First&amp;quot;,&amp;quot;Second&amp;quot;,&amp;quot;Third&amp;quot;,&amp;quot;Fourth&amp;quot;]&#039;&lt;br /&gt;
		data-legendpos=&#039;[&amp;quot;left&amp;quot;,&amp;quot;top&amp;quot;]&#039;&lt;br /&gt;
        data-yunit=&amp;quot;&amp;quot;&lt;br /&gt;
        data-height=&amp;quot;300&amp;quot;&lt;br /&gt;
        data-width=&amp;quot;300&amp;quot;&lt;br /&gt;
		data-ddd=&#039;[&amp;quot;-40&amp;quot;,&amp;quot;0&amp;quot;,&amp;quot;0&amp;quot;]&#039;&lt;br /&gt;
		data-dddspace=&#039;[&amp;quot;-10&amp;quot;]&#039;&lt;br /&gt;
		data-dddwidth=&#039;[&amp;quot;10&amp;quot;]&#039;&lt;br /&gt;
		data-showlegend=&amp;quot;true&amp;quot;&lt;br /&gt;
		data-legend_horiz=&amp;quot;true&amp;quot;&lt;br /&gt;
        data-xticks=&amp;quot;auto&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Fensterstatus offen/geschlossen===&lt;br /&gt;
Dieses Beispiel zeigt, wie ein Fensterkontakt, dessen Reading die Werte &amp;lt;code&amp;gt;closed&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;open&amp;lt;/code&amp;gt; einnimmt, als Graph gezeichnet werden kann. Technisch gesehen werden hier die Werte &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; gezeichnet, indem über das Attribut &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; dem Zustand &amp;lt;code&amp;gt;open&amp;lt;/code&amp;gt; der Wert &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; und allen anderen Zuständen der Wert &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; zugeordnet wird. Über das Attribut &#039;&#039;&#039;data-yticks&#039;&#039;&#039; wird die Beschriftung an der Y-Achse (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;) gegen einen frei definierbaren Text ausgetauscht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	data-device=&amp;quot;wz_fensterstatus&amp;quot;&lt;br /&gt;
	data-logdevice=&#039;[&amp;quot;myDbLog&amp;quot;]&#039;&lt;br /&gt;
	data-logfile=&#039;[&amp;quot;HISTORY&amp;quot;]&#039;&lt;br /&gt;
	data-columnspec=&#039;[&amp;quot;wz_fensterstatus:state:0::$val=($val=~\\x22open\\x22?1:0)&amp;quot;]&#039;&lt;br /&gt;
	data-style=&#039;[&amp;quot;ftui l4fill&amp;quot;]&#039;&lt;br /&gt;
	data-ptype=&#039;[&amp;quot;steps&amp;quot;]&#039;&lt;br /&gt;
	data-height=&amp;quot;290&amp;quot;&lt;br /&gt;
	data-yticks=&#039;[[0,&amp;quot;geschlossen&amp;quot;],[1,&amp;quot;offen&amp;quot;]]&#039;&lt;br /&gt;
	data-minvalue=&amp;quot;0&amp;quot;&lt;br /&gt;
	data-maxvalue=&amp;quot;1.1&amp;quot;&lt;br /&gt;
	data-nofulldays=&amp;quot;true&amp;quot;&lt;br /&gt;
	data-daysago_start=&amp;quot;1&amp;quot;&lt;br /&gt;
	data-daysago_end=&amp;quot;-1&amp;quot;&lt;br /&gt;
	data-cursorgroup=&amp;quot;1&amp;quot;&lt;br /&gt;
	data-scrollgroup=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Das Beispiel funktioniert nur mit DbLog. Falls Logfiles verwendet werden muss statt &#039;$val&#039; &#039;$fld[&#039;&#039;num&#039;&#039;]&#039; verwendet werden. Hierbei steht &#039;&#039;num&#039;&#039; für die Spalte (beginnend bei 0) in der die Daten stehen.&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
{{Link2Forum|Topic= 48450 |Message=401006|LinkText=Thread im FHEM-Forum}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Tablet UI|Chart]]&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:Ssymbols.png&amp;diff=34808</id>
		<title>Datei:Ssymbols.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:Ssymbols.png&amp;diff=34808"/>
		<updated>2021-02-10T09:24:10Z</updated>

		<summary type="html">&lt;p&gt;Eki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:Points.png&amp;diff=34807</id>
		<title>Datei:Points.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:Points.png&amp;diff=34807"/>
		<updated>2021-02-10T09:16:32Z</updated>

		<summary type="html">&lt;p&gt;Eki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:Bars.png&amp;diff=34806</id>
		<title>Datei:Bars.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:Bars.png&amp;diff=34806"/>
		<updated>2021-02-10T09:12:45Z</updated>

		<summary type="html">&lt;p&gt;Eki: Eki lud eine neue Version von Datei:Bars.png hoch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:Llines.png&amp;diff=34804</id>
		<title>Datei:Llines.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:Llines.png&amp;diff=34804"/>
		<updated>2021-02-10T08:48:36Z</updated>

		<summary type="html">&lt;p&gt;Eki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:Steps.png&amp;diff=34803</id>
		<title>Datei:Steps.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:Steps.png&amp;diff=34803"/>
		<updated>2021-02-10T08:48:09Z</updated>

		<summary type="html">&lt;p&gt;Eki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:Fsteps.png&amp;diff=34802</id>
		<title>Datei:Fsteps.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:Fsteps.png&amp;diff=34802"/>
		<updated>2021-02-10T08:48:00Z</updated>

		<summary type="html">&lt;p&gt;Eki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:Histeps.png&amp;diff=34801</id>
		<title>Datei:Histeps.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:Histeps.png&amp;diff=34801"/>
		<updated>2021-02-10T08:47:51Z</updated>

		<summary type="html">&lt;p&gt;Eki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:Bars.png&amp;diff=34800</id>
		<title>Datei:Bars.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:Bars.png&amp;diff=34800"/>
		<updated>2021-02-10T08:47:41Z</updated>

		<summary type="html">&lt;p&gt;Eki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:Ibars.png&amp;diff=34799</id>
		<title>Datei:Ibars.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:Ibars.png&amp;diff=34799"/>
		<updated>2021-02-10T08:47:32Z</updated>

		<summary type="html">&lt;p&gt;Eki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:Cubic.png&amp;diff=34798</id>
		<title>Datei:Cubic.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:Cubic.png&amp;diff=34798"/>
		<updated>2021-02-10T08:47:23Z</updated>

		<summary type="html">&lt;p&gt;Eki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:Quadratic.png&amp;diff=34797</id>
		<title>Datei:Quadratic.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:Quadratic.png&amp;diff=34797"/>
		<updated>2021-02-10T08:47:12Z</updated>

		<summary type="html">&lt;p&gt;Eki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:QuadraticSmooth.png&amp;diff=34796</id>
		<title>Datei:QuadraticSmooth.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:QuadraticSmooth.png&amp;diff=34796"/>
		<updated>2021-02-10T08:46:44Z</updated>

		<summary type="html">&lt;p&gt;Eki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Maps&amp;diff=34014</id>
		<title>FTUI Widget Maps</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Maps&amp;diff=34014"/>
		<updated>2020-10-15T06:16:30Z</updated>

		<summary type="html">&lt;p&gt;Eki: Beschreibung des neuen Features &amp;quot;data-scrollgroup&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das [[{{PAGENAME}}|Map Widget]] ist ein Widget zur Darstellung von Karten mit Informationen aus FHEM oder auch anderern Quellen (z.B. GEOJSON Files). Das Modul wird aktuell (noch) nicht mit der normalen FTUI Installation verteilt und kann unter [https://forum.fhem.de/index.php/topic,91781.0.html] herunter geladen werden.&lt;br /&gt;
&lt;br /&gt;
Folgende Dinge werden berücksichtigt:&amp;lt;br&amp;gt;&lt;br /&gt;
FHEM Devices, welche eine Koordinate (longitude/latitude) als Reading/Attribut/Internal haben (z. B. Anwesenheiten auf Basis von ROOMMATE/RESIDENT/GUEST, oder das global Device als Standort von FHEM), werden als Punkt mit anpassbarem Aussehen an der entsprechenden Position auf der Karte dargestellt.&amp;lt;br&amp;gt;&lt;br /&gt;
Darüber hinaus ist es möglich, Fahrwege mit Fahrzeiten auf Basis des FHEM TRAFFIC Moduls als Pfade auf die Karte zu legen. Hierbei können die Routen eingefärbt als Linien dargestellt werden und entsprechend per InfoWindow dann Details (wie z.B. die normale Fahrzeit bzw. die Fahrzeit bei aktuellem Verkehr) dazu dargestellt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Existiert ein Reading &amp;quot;polygon&amp;quot; welches eine Liste von space separierten Koordinatenpaaren (X und Y Koordinaten jedes Paares durch &#039;,&#039; getrennt) als Wert enthält (z.B. mit &amp;quot;setreading &amp;lt;device&amp;gt; polygon 10.2488713,49.773172 10.2626042,49.7711765 10.278397,49.7682939 10.2986531,49.7671851&amp;quot; erzeugbar) so wird eine Linie auf der Karte mit den entsprechenden Koordinatenpunkten gezeichnet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die flexibelste Lösung ist die Verwendung von GEOJSON Files (müssen irgendwo per web erreichbar abgelegt werden). Diese Files können verschiedene geographische Objekte enthalten, die dann auf der Karte dargestellt werden. Das Aussehen und Verhalten der im GEOJSON File enthaltenen Objekte kann über den Parameter data-feature_style beeinflusst werden.&lt;br /&gt;
&lt;br /&gt;
Die Karte kann zusätzlich eine Darstellung der Verkehrslage als zuschaltbaren Layer enthalten (siehe unten).&lt;br /&gt;
&lt;br /&gt;
In der aktuellen Version (ab Oktober 2020) können auch Verkehrsüberwachungskameras des FHEM Moduls Blitzer (98_Blitzer.pm) dargestellt werden. Dazu muss das attribut data-blitzer auf ein gültiges Blitzer Device zeigen.&lt;br /&gt;
&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Datei:2018-03-05_11h55_51.png|thumb|none|Beispiel 1 (mit Google)]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Datei:FTUI_Maps_2.png|thumb|none|Beispiel 2 (mit Google)]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Datei:FTUI_Maps_3.png|thumb|none|Beispiel 3 (mit OSM)]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
==Voraussetzungen==&lt;br /&gt;
Die Darstellung im Widget basiert entweder auf dem Google Maps API oder auf Leaflet und der Nutzung von OpenStreetMap als Kartenbasis. Wenn Google Maps verwendet wird, muss zunächst ein API Key von Google beschafft werden. Wie man diesen beschafft, kann z.B. unter [https://developers.google.com/maps/api-key-best-practices] oder [[TRAFFIC]] nachgelesen werden. Dieser Key muss dann im HTML File (am Besten im Header) als meta Tag eingetragen werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;GoogleMapsApiKey&amp;quot; content=&amp;quot;&amp;lt;Key&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird die Leaflet/OSM Variante verwendet (data-map_type=&amp;quot;OSM&amp;quot;), so ist zunächst kein Schlüssel für die Kartendarstellung notwendig. Will man allerdings eine Route oder die Verkehrslage darstellen, so wird ein Map API Key von TomTom benötigt (bekommt man für private Zwecke auch ohne Hinterlegung einer Kreditkarte). Hinweise wie man den besorgt, siehe unter [https://developer.tomtom.com]. Auch dieser Key muss als meta Tag in das HTML File.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;TomTomApiKey&amp;quot; content=&amp;quot;&amp;lt;Key&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus muss in diesem Fall auch noch ein Plugin von TomTom herunter geladen und in das lib/ Verzeichnis abgelegt werden. Dazu das zip File von [https://api.tomtom.com/maps-sdk-js/4.36.2/jssdk-4.36.2-distribution.zip] herunter laden und alle darin enthaltenen Dateien unter einem neuen Verzeichnis lib/tomtom/ ablegen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Attribute==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-type&#039;&#039;&#039;||Type des Widgets muss auf &amp;quot;maps&amp;quot; gesetzt werden||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-device&#039;&#039;&#039;||FHEM-Device, dessen Readings dargestellt werden sollen||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-blitzer&#039;&#039;&#039;&lt;br /&gt;
|FHEM Blitzer Device, dessen Verkehrsüberwachungskamera Daten dargestellt werden sollen. Das Attribut createAllReadings muss hierzu im FHEM Blitzer device auf 1 gesetzt werden.&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-alias&#039;&#039;&#039;||Legt fest, aus welchem Reading der Name für die Anzeige genommen werden soll||alias||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-latitude&#039;&#039;&#039;||Legt fest, aus welchem Reading die geograpfische Breite genommen werden soll||latitude||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-longitude&#039;&#039;&#039;||Legt fest, aus welchem Reading die geograpfische Länge genommen werden soll||longitude||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-language&#039;&#039;&#039;||Kann &#039;de&#039; oder &#039;en&#039; sein und stellt die Sprache für die Ausgabe in den Info Windows ein||de||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-size&#039;&#039;&#039;||Gibt die Größe des Kartenausschnittes an (als String mit &#039;&amp;lt;Breite&amp;gt;,&amp;lt;Höhe&amp;gt;&#039;), kann auch weggelassen werden, wenn das Device ein Reading GoogleMapsSize besitzt (z. B. TRAFFIC Device), dann wird der Wert aus dem GoogleMapsSize Reading genommen oder, falls das auch nicht vorhanden ist, wird die Größe aus der Ausdehnung der Route(n) ermittelt.||auto||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-center&#039;&#039;&#039;||Gibt das Zentrum der Karte an (als String mit &#039;&amp;lt;Latitude&amp;gt;,&amp;lt;Longitude&amp;gt;&#039;), kann auch weggelassen werden, wenn das Device ein Reading GoogleMapsCenter besitzt (z. B. TRAFFIC Device), dann wird der Wert aus GoogleMapsCenter Reading genommen oder, falls das auch nicht vorhanden ist, wird das Zentrum aus der Ausdehnung der Route(n) ermittelt.||auto||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-zoom&#039;&#039;&#039;||Gibt den Zoomwert der Karte an (als integer Wert, siehe Google Maps API), kann auch weggelassen werden, wenn das Device ein Reading GoogleMapsZoom besitzt (z. B. TRAFFIC Device), dann wird der Wert aus dem GoogleMapsZoom Reading genommen oder, falls das auch nicht vorhanden ist, wird der Zoom Wert aus der Ausdehnung der Route(n) ermittelt.||auto||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-mapgroup&#039;&#039;&#039;||Legt fest, ob jedes Widget in eine eigene Karte zeichnen soll oder ob mehrer Informationen in einer Karte landen. Alle Widgets vom Typ &#039;maps&#039; mit dem gleichen wert für data-mapgroup zeichnen in ein und die selbe Karte||0||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-scrollgroup&#039;&#039;&#039;&lt;br /&gt;
|Legt fest, ob mehrere Kartenfenster gekoppelt werden sollen. Werden verschiedene Fenster mit Karteninhalten definiert (mehrere divs mit unterschiedlichen Werten für data-mapgroup), so werden alle Karten mit dem gleichen data-scrollgroup Wert synchron gezoomt und verschoben.&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-travel_mode&#039;&#039;&#039;||Gibt an, wie die Route berechnet werden soll. Es gibt die Möglichkeiten &#039;DRIVING&#039;, &#039;WALKING&#039;, &#039;BICYCLING&#039;, &#039;TRANSIT&#039; (Details siehe TRAFFIC Modul von FHEM oder Google Maps API für den &#039;Directions&#039; Service), kann auch weggelassen werden, wenn es sich um ein TRAFFIC Device handelt, dann wird der Wert aus dem trafficMode Reading genommen.||DRIVING||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-traffic&#039;&#039;&#039;||Gibt an, ob die Verkehrslage auf der Karte dargestellt werden soll||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-showdetails&#039;&#039;&#039;||Gibt an ob per Default die Info Windows eingeblendet werden sollen||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-stroke&#039;&#039;&#039;||Gibt an, wie die Fahrstrecken oder Symbole dargestellt werden sollen. Besteht aus maximal 6 Werten (Farbe Hinweg, Breite Hinweg, Durchsichtigkeit Hinweg, Farbe Rückweg, Breite Rückweg, Durchsichtigkeit Rückweg), die Farbe wird per #rrggbb angegeben, die Breite in Pixel und die Durchsichtigkeit als Prozentwert zwischen 0% und 100%, siehe auch Details zum Modul TRAFFIC. Die Symbole zur Route werden in der doppelten angegebenen Breite des Pfades dargestellt||#ffffff,7,50,#ffffff,7,50||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-icon&#039;&#039;&#039;||Hiermit kann ein Icon angegeben werden, welches statt des standardmäßigen Pfeils verwendet werden soll, um die Position zu markieren. Kann eine URL auf eine icon Datei, die relativ zum Verzeichnis www/images/ liegt sein||||&#039;default/HOME_Status.1.png&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-label&#039;&#039;&#039;||Will man statt eines Icons ein FontAwesome/Openautomation/fhemSVG Font-Icon (z.B. &#039;fa-home&#039;, &#039;oa-weather_winter&#039;, &#039;fs-usb_stick&#039;) verwenden, wird das hiermit angegeben (es kann auch icon und Font-Icon zusammen verwendet werden (z.B. ein Kreis als Icon und darin ein Font-Icon.||||fa-home&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-nightmode&#039;&#039;&#039;||legt fest, ob die Karte im Nachtmodus (dunkel) dargestellt werden soll (geht bisher noch nicht mit OSM)||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-style&#039;&#039;&#039;||Möglichkeit zum Setzen eines Styles entsprechend der Map API Options (siehe Dokumentation zu den Map APIs von Google und Leaflet)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-geojson&#039;&#039;&#039;||gibt den Namen eines Files auf dem Server an, in dem Daten zur Darstellung im GEOJSON Format (siehe [www.geojson.org]) abgelegt sind. Die Angabe ist relativ zum Verzeichnis /opt/fhem/ftui/tablet der Standardinstallation.||||&amp;quot;data/firedata.geojson&amp;quot; für das unten genannte Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-feature_style&#039;&#039;&#039;||Legt fest, wie die GEOJSON Daten dargestllt werden bzw. was passiert, wenn man auf einzelne Features klickt bzw. sie mit der Maus überstreicht (Details siehe unten unter &amp;lt;&amp;gt;||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Details zu GEOJSON Files==&lt;br /&gt;
Die Datei muss auf dem Server (FHEM) liegen (also typischerweise im www/tablet Verzeichnis). Ich habe z.B. unter www/tablet ein Unterverzeichnis data erstellt und geben data-geojson=&amp;quot;data/file.geojson&amp;quot; an. In dem geojson file können beliebige Objekte definiert werden, das Format ist unter [www.geojson.org] nachzulesen&lt;br /&gt;
Über den Parameter data-feature_style kann man recht flexibel festlegen, wie die Objekte dargestellt werden sollen. Das Ganze ist ein js Objekt, wird also in &#039;{}&#039; eingeschlossen. Innerhalb des Objektes legen 3 Objekteigenschaften fest, wie die Darstellung aussehen soll.&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft &amp;quot;popup_properties_click&amp;quot; hat als Wert eine Leerzeichen getrennte Liste von Expressions, welche, falls sie auf Properties der Objekte im geojson File zutreffen, dazu führen, dass beim Klick auf die angezeigten Objekte ein Info Window geöffnet wird, welches die entsprechenden geojson Objekteigenschaften anzeigt.&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft &amp;quot;popup_properties_move&amp;quot; macht genau das Gleiche, allerdings sorgen die dort angegebenen Expressions dafür dass die dazu passenden geojson Objekte per Popup bei Überfahren mit der Maus und nicht bei Klick angezeigt werden und beim Verlassen mit der Maus dann auch wieder automatisch verschwinden.&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft &amp;quot;display_styles&amp;quot; legt genau fest, wie die verschiedenen geojson Objekte dargestellt werden sollen. Der Wert dieser Eigenschaft ist wiederum ein Objekt. Als Eigenschaftsname wird ein Verweis auf ein bestimmtes Objekt im geojson File verwendet. Der Verweis kann entweder eine Eigenschaft eines Objekts im geojson File sein oder eine Kombination aus Eigenschaft und Wert (also nicht alle Objekte des gleichen Typs sondern nur die, die eine auch den passenden Wert haben). Dahinter wird dann der zu verwendete Stil als weiteres Objekt angegeben, welches aus einer Menge aus Property:Value pairs besteht, bei dem die Property die Displayeigenschaft (also z.B. Farbe) und der Wert dann den dazugehörigen Wert (also z.B. rot) festlegt. Alles was nicht explizit hier festgelegt wird, wird aus den &amp;quot;globalen&amp;quot; Einstellungen (z.B. data-stroke) übernommen. Die folgende Definition generiert, wenn man das Beispielfile firedata.geojson ({{Link2Forum|Topic=78379|Message=776472|LinkText=Anhang am Foren-Beitrag}}) als GEOJSON abspeichert und dann in data-geojson den Speicherort angibt, die darunter dargestellte Karte.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
data-feature_style=&#039;{&lt;br /&gt;
	&amp;quot;popup_properties_click&amp;quot;:&amp;quot;name network operator fire.*&amp;quot;,&lt;br /&gt;
	&amp;quot;popup_properties_move&amp;quot;:&amp;quot;fire.*\\:diameter&amp;quot;,&lt;br /&gt;
	&amp;quot;display_styles&amp;quot;:{&lt;br /&gt;
		&amp;quot;emergency.fire_hydrant&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;fa-fire-extinguisher&amp;quot;,&amp;quot;strokeColor&amp;quot;:&amp;quot;red&amp;quot;},&lt;br /&gt;
		&amp;quot;public_transport.station&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;fa-train&amp;quot;,&amp;quot;strokeColor&amp;quot;:&amp;quot;black&amp;quot;}}&lt;br /&gt;
}&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2018-03-05_11h55_51.png|thumb|none|Mit obigem Beispielfile und gezeigtem data-feature_style erstellte Karte]]&lt;br /&gt;
&lt;br /&gt;
Noch etwas zusätzliches: Eine gute Möglichkeit sich geojson Files zu holen (von der auch das Beispiel stammt), ist die webseite [http://overpass-turbo.eu/]. Dort kann man sich für beliebige Gebiete per Wizard eine Abfrage basteln, die dann bestimmte Infos aus Open Street Maps herausfiltert und als geojson exportieren kann.&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
&lt;br /&gt;
=== Verkehrskamera Darstellung aus FHEM Blitzer Devices ===&lt;br /&gt;
Wird &amp;quot;data-blitzer&amp;quot; mit dem Namen eines FHEM Blitzer Devices gesetzt, so werden die im FHEM Device gefundenen Verkehrskameras als Objekte auf der Karte dargestellt (ohne weitere Angabe als rotes Rechteck mit Ausrufezeichen). Voraussetzung hierbei ist, dass beim Blitzer Device in FHEM das Attribut createAllReadings  auf &amp;quot;1&amp;quot; gesetzt wird. Die Darstellung kann genauso wie bei GEOJSON Files über das Attribut data-feature_style eingestellt werden. Hier müssen dann als properties die entsprechenden Readings der Blitzer ohne die vorangestellten Nummern angegeben werden. Im folgenden Beispiel werden die Blitzer in Form eines runden Geschwindigkeits Verkehrsschildes dargestellt, der Wert, der an der jeweiligen Stelle als Maximalgeschwindigkeit gilt, wird in das Verkehrsschild als Zahl eingetragen (das Verkehrsschild Bild muss als Bilddatei im &amp;quot;images&amp;quot; Ordner unter www/ liegen.&lt;br /&gt;
[[Datei:Blitzer2.png|ohne|mini|100x100px|Bild das für die Darstellung verwendet wird (muss unter www/images liegen)]]&lt;br /&gt;
&lt;br /&gt;
Mit folgender Definition:&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div&lt;br /&gt;
	style=&amp;quot;height:100%; width:100%&amp;quot;&lt;br /&gt;
	data-type=&amp;quot;maps&amp;quot;&lt;br /&gt;
	data-map_type=&amp;quot;OSMs&amp;quot;&lt;br /&gt;
	data-mapgroup=&amp;quot;1&amp;quot;&lt;br /&gt;
	data-center=&amp;quot;49,9&amp;quot;&lt;br /&gt;
	data-zoom=&amp;quot;10&amp;quot;&lt;br /&gt;
	data-stroke=&amp;quot;#FF0000,30,80&amp;quot;&lt;br /&gt;
	data-icon=&amp;quot;../images/blitzer2.png&amp;quot;&lt;br /&gt;
	data-blitzer=&amp;quot;blitztest&amp;quot;&lt;br /&gt;
	data-feature_style=&#039;{&lt;br /&gt;
		&amp;quot;popup_properties_click&amp;quot;:&amp;quot;display_name create_date&amp;quot;,&lt;br /&gt;
		&amp;quot;popup_properties_move&amp;quot;:&amp;quot;vmax street&amp;quot;,&lt;br /&gt;
		&amp;quot;display_styles&amp;quot;:{&lt;br /&gt;
			&amp;quot;vmax.10&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;10&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;},&lt;br /&gt;
			&amp;quot;vmax.20&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;20&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;},&lt;br /&gt;
			&amp;quot;vmax.30&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;30&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;},&lt;br /&gt;
			&amp;quot;vmax.40&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;40&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;},&lt;br /&gt;
			&amp;quot;vmax.50&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;50&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;},&lt;br /&gt;
			&amp;quot;vmax.60&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;60&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;},&lt;br /&gt;
			&amp;quot;vmax.70&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;70&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;},&lt;br /&gt;
			&amp;quot;vmax.80&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;80&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;},&lt;br /&gt;
			&amp;quot;vmax.90&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;90&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;},&lt;br /&gt;
			&amp;quot;vmax.100&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;100&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;},&lt;br /&gt;
			&amp;quot;vmax.110&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;110&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;},&lt;br /&gt;
			&amp;quot;vmax.120&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;120&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;},&lt;br /&gt;
			&amp;quot;vmax.130&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;130&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;}&lt;br /&gt;
		}&lt;br /&gt;
	}&#039;&lt;br /&gt;
&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Entsteht ein Bild ähnlich dem Folgenden:&lt;br /&gt;
[[Datei:2020-10-02.png|links|mini|Beispiel mit Verkehrskameras aus FHEM Blitzer Device]]&lt;br /&gt;
[[Kategorie:FHEM Tablet UI|Maps]]&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Maps&amp;diff=33990</id>
		<title>FTUI Widget Maps</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Maps&amp;diff=33990"/>
		<updated>2020-10-09T05:27:31Z</updated>

		<summary type="html">&lt;p&gt;Eki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das [[{{PAGENAME}}|Map Widget]] ist ein Widget zur Darstellung von Karten mit Informationen aus FHEM oder auch anderern Quellen (z.B. GEOJSON Files). Das Modul wird aktuell (noch) nicht mit der normalen FTUI Installation verteilt und kann unter [https://forum.fhem.de/index.php/topic,91781.0.html] herunter geladen werden.&lt;br /&gt;
&lt;br /&gt;
Folgende Dinge werden berücksichtigt:&amp;lt;br&amp;gt;&lt;br /&gt;
FHEM Devices, welche eine Koordinate (longitude/latitude) als Reading/Attribut/Internal haben (z. B. Anwesenheiten auf Basis von ROOMMATE/RESIDENT/GUEST, oder das global Device als Standort von FHEM), werden als Punkt mit anpassbarem Aussehen an der entsprechenden Position auf der Karte dargestellt.&amp;lt;br&amp;gt;&lt;br /&gt;
Darüber hinaus ist es möglich, Fahrwege mit Fahrzeiten auf Basis des FHEM TRAFFIC Moduls als Pfade auf die Karte zu legen. Hierbei können die Routen eingefärbt als Linien dargestellt werden und entsprechend per InfoWindow dann Details (wie z.B. die normale Fahrzeit bzw. die Fahrzeit bei aktuellem Verkehr) dazu dargestellt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Existiert ein Reading &amp;quot;polygon&amp;quot; welches eine Liste von space separierten Koordinatenpaaren (X und Y Koordinaten jedes Paares durch &#039;,&#039; getrennt) als Wert enthält (z.B. mit &amp;quot;setreading &amp;lt;device&amp;gt; polygon 10.2488713,49.773172 10.2626042,49.7711765 10.278397,49.7682939 10.2986531,49.7671851&amp;quot; erzeugbar) so wird eine Linie auf der Karte mit den entsprechenden Koordinatenpunkten gezeichnet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die flexibelste Lösung ist die Verwendung von GEOJSON Files (müssen irgendwo per web erreichbar abgelegt werden). Diese Files können verschiedene geographische Objekte enthalten, die dann auf der Karte dargestellt werden. Das Aussehen und Verhalten der im GEOJSON File enthaltenen Objekte kann über den Parameter data-feature_style beeinflusst werden.&lt;br /&gt;
&lt;br /&gt;
Die Karte kann zusätzlich eine Darstellung der Verkehrslage als zuschaltbaren Layer enthalten (siehe unten).&lt;br /&gt;
&lt;br /&gt;
In der aktuellen Version (ab Oktober 2020) können auch Verkehrsüberwachungskameras des FHEM Moduls Blitzer (98_Blitzer.pm) dargestellt werden. Dazu muss das attribut data-blitzer auf ein gültiges Blitzer Device zeigen.&lt;br /&gt;
&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Datei:2018-03-05_11h55_51.png|thumb|none|Beispiel 1 (mit Google)]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Datei:FTUI_Maps_2.png|thumb|none|Beispiel 2 (mit Google)]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Datei:FTUI_Maps_3.png|thumb|none|Beispiel 3 (mit OSM)]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
==Voraussetzungen==&lt;br /&gt;
Die Darstellung im Widget basiert entweder auf dem Google Maps API oder auf Leaflet und der Nutzung von OpenStreetMap als Kartenbasis. Wenn Google Maps verwendet wird, muss zunächst ein API Key von Google beschafft werden. Wie man diesen beschafft, kann z.B. unter [https://developers.google.com/maps/api-key-best-practices] oder [[TRAFFIC]] nachgelesen werden. Dieser Key muss dann im HTML File (am Besten im Header) als meta Tag eingetragen werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;GoogleMapsApiKey&amp;quot; content=&amp;quot;&amp;lt;Key&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird die Leaflet/OSM Variante verwendet (data-map_type=&amp;quot;OSM&amp;quot;), so ist zunächst kein Schlüssel für die Kartendarstellung notwendig. Will man allerdings eine Route oder die Verkehrslage darstellen, so wird ein Map API Key von TomTom benötigt (bekommt man für private Zwecke auch ohne Hinterlegung einer Kreditkarte). Hinweise wie man den besorgt, siehe unter [https://developer.tomtom.com]. Auch dieser Key muss als meta Tag in das HTML File.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;TomTomApiKey&amp;quot; content=&amp;quot;&amp;lt;Key&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus muss in diesem Fall auch noch ein Plugin von TomTom herunter geladen und in das lib/ Verzeichnis abgelegt werden. Dazu das zip File von [https://api.tomtom.com/maps-sdk-js/4.36.2/jssdk-4.36.2-distribution.zip] herunter laden und alle darin enthaltenen Dateien unter einem neuen Verzeichnis lib/tomtom/ ablegen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Attribute==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-type&#039;&#039;&#039;||Type des Widgets muss auf &amp;quot;maps&amp;quot; gesetzt werden||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-device&#039;&#039;&#039;||FHEM-Device, dessen Readings dargestellt werden sollen||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-blitzer&#039;&#039;&#039;&lt;br /&gt;
|FHEM Blitzer Device, dessen Verkehrsüberwachungskamera Daten dargestellt werden sollen. Das Attribut createAllReadings muss hierzu im FHEM Blitzer device auf 1 gesetzt werden.&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-alias&#039;&#039;&#039;||Legt fest, aus welchem Reading der Name für die Anzeige genommen werden soll||alias||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-latitude&#039;&#039;&#039;||Legt fest, aus welchem Reading die geograpfische Breite genommen werden soll||latitude||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-longitude&#039;&#039;&#039;||Legt fest, aus welchem Reading die geograpfische Länge genommen werden soll||longitude||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-language&#039;&#039;&#039;||Kann &#039;de&#039; oder &#039;en&#039; sein und stellt die Sprache für die Ausgabe in den Info Windows ein||de||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-size&#039;&#039;&#039;||Gibt die Größe des Kartenausschnittes an (als String mit &#039;&amp;lt;Breite&amp;gt;,&amp;lt;Höhe&amp;gt;&#039;), kann auch weggelassen werden, wenn das Device ein Reading GoogleMapsSize besitzt (z. B. TRAFFIC Device), dann wird der Wert aus dem GoogleMapsSize Reading genommen oder, falls das auch nicht vorhanden ist, wird die Größe aus der Ausdehnung der Route(n) ermittelt.||auto||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-center&#039;&#039;&#039;||Gibt das Zentrum der Karte an (als String mit &#039;&amp;lt;Latitude&amp;gt;,&amp;lt;Longitude&amp;gt;&#039;), kann auch weggelassen werden, wenn das Device ein Reading GoogleMapsCenter besitzt (z. B. TRAFFIC Device), dann wird der Wert aus GoogleMapsCenter Reading genommen oder, falls das auch nicht vorhanden ist, wird das Zentrum aus der Ausdehnung der Route(n) ermittelt.||auto||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-zoom&#039;&#039;&#039;||Gibt den Zoomwert der Karte an (als integer Wert, siehe Google Maps API), kann auch weggelassen werden, wenn das Device ein Reading GoogleMapsZoom besitzt (z. B. TRAFFIC Device), dann wird der Wert aus dem GoogleMapsZoom Reading genommen oder, falls das auch nicht vorhanden ist, wird der Zoom Wert aus der Ausdehnung der Route(n) ermittelt.||auto||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-mapgroup&#039;&#039;&#039;||Legt fest, ob jedes Widget in eine eigene Karte zeichnen soll oder ob mehrer Informationen in einer Karte landen. Alle Widgets vom Typ &#039;maps&#039; mit dem gleichen wert für data-mapgroup zeichnen in ein und die selbe Karte||0||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-travel_mode&#039;&#039;&#039;||Gibt an, wie die Route berechnet werden soll. Es gibt die Möglichkeiten &#039;DRIVING&#039;, &#039;WALKING&#039;, &#039;BICYCLING&#039;, &#039;TRANSIT&#039; (Details siehe TRAFFIC Modul von FHEM oder Google Maps API für den &#039;Directions&#039; Service), kann auch weggelassen werden, wenn es sich um ein TRAFFIC Device handelt, dann wird der Wert aus dem trafficMode Reading genommen.||DRIVING||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-traffic&#039;&#039;&#039;||Gibt an, ob die Verkehrslage auf der Karte dargestellt werden soll||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-showdetails&#039;&#039;&#039;||Gibt an ob per Default die Info Windows eingeblendet werden sollen||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-stroke&#039;&#039;&#039;||Gibt an, wie die Fahrstrecken oder Symbole dargestellt werden sollen. Besteht aus maximal 6 Werten (Farbe Hinweg, Breite Hinweg, Durchsichtigkeit Hinweg, Farbe Rückweg, Breite Rückweg, Durchsichtigkeit Rückweg), die Farbe wird per #rrggbb angegeben, die Breite in Pixel und die Durchsichtigkeit als Prozentwert zwischen 0% und 100%, siehe auch Details zum Modul TRAFFIC. Die Symbole zur Route werden in der doppelten angegebenen Breite des Pfades dargestellt||#ffffff,7,50,#ffffff,7,50||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-icon&#039;&#039;&#039;||Hiermit kann ein Icon angegeben werden, welches statt des standardmäßigen Pfeils verwendet werden soll, um die Position zu markieren. Kann eine URL auf eine icon Datei, die relativ zum Verzeichnis www/images/ liegt sein||||&#039;default/HOME_Status.1.png&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-label&#039;&#039;&#039;||Will man statt eines Icons ein FontAwesome/Openautomation/fhemSVG Font-Icon (z.B. &#039;fa-home&#039;, &#039;oa-weather_winter&#039;, &#039;fs-usb_stick&#039;) verwenden, wird das hiermit angegeben (es kann auch icon und Font-Icon zusammen verwendet werden (z.B. ein Kreis als Icon und darin ein Font-Icon.||||fa-home&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-nightmode&#039;&#039;&#039;||legt fest, ob die Karte im Nachtmodus (dunkel) dargestellt werden soll (geht bisher noch nicht mit OSM)||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-style&#039;&#039;&#039;||Möglichkeit zum Setzen eines Styles entsprechend der Map API Options (siehe Dokumentation zu den Map APIs von Google und Leaflet)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-geojson&#039;&#039;&#039;||gibt den Namen eines Files auf dem Server an, in dem Daten zur Darstellung im GEOJSON Format (siehe [www.geojson.org]) abgelegt sind. Die Angabe ist relativ zum Verzeichnis /opt/fhem/ftui/tablet der Standardinstallation.||||&amp;quot;data/firedata.geojson&amp;quot; für das unten genannte Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-feature_style&#039;&#039;&#039;||Legt fest, wie die GEOJSON Daten dargestllt werden bzw. was passiert, wenn man auf einzelne Features klickt bzw. sie mit der Maus überstreicht (Details siehe unten unter &amp;lt;&amp;gt;||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Details zu GEOJSON Files==&lt;br /&gt;
Die Datei muss auf dem Server (FHEM) liegen (also typischerweise im www/tablet Verzeichnis). Ich habe z.B. unter www/tablet ein Unterverzeichnis data erstellt und geben data-geojson=&amp;quot;data/file.geojson&amp;quot; an. In dem geojson file können beliebige Objekte definiert werden, das Format ist unter [www.geojson.org] nachzulesen&lt;br /&gt;
Über den Parameter data-feature_style kann man recht flexibel festlegen, wie die Objekte dargestellt werden sollen. Das Ganze ist ein js Objekt, wird also in &#039;{}&#039; eingeschlossen. Innerhalb des Objektes legen 3 Objekteigenschaften fest, wie die Darstellung aussehen soll.&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft &amp;quot;popup_properties_click&amp;quot; hat als Wert eine Leerzeichen getrennte Liste von Expressions, welche, falls sie auf Properties der Objekte im geojson File zutreffen, dazu führen, dass beim Klick auf die angezeigten Objekte ein Info Window geöffnet wird, welches die entsprechenden geojson Objekteigenschaften anzeigt.&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft &amp;quot;popup_properties_move&amp;quot; macht genau das Gleiche, allerdings sorgen die dort angegebenen Expressions dafür dass die dazu passenden geojson Objekte per Popup bei Überfahren mit der Maus und nicht bei Klick angezeigt werden und beim Verlassen mit der Maus dann auch wieder automatisch verschwinden.&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft &amp;quot;display_styles&amp;quot; legt genau fest, wie die verschiedenen geojson Objekte dargestellt werden sollen. Der Wert dieser Eigenschaft ist wiederum ein Objekt. Als Eigenschaftsname wird ein Verweis auf ein bestimmtes Objekt im geojson File verwendet. Der Verweis kann entweder eine Eigenschaft eines Objekts im geojson File sein oder eine Kombination aus Eigenschaft und Wert (also nicht alle Objekte des gleichen Typs sondern nur die, die eine auch den passenden Wert haben). Dahinter wird dann der zu verwendete Stil als weiteres Objekt angegeben, welches aus einer Menge aus Property:Value pairs besteht, bei dem die Property die Displayeigenschaft (also z.B. Farbe) und der Wert dann den dazugehörigen Wert (also z.B. rot) festlegt. Alles was nicht explizit hier festgelegt wird, wird aus den &amp;quot;globalen&amp;quot; Einstellungen (z.B. data-stroke) übernommen. Die folgende Definition generiert, wenn man das Beispielfile firedata.geojson ({{Link2Forum|Topic=78379|Message=776472|LinkText=Anhang am Foren-Beitrag}}) als GEOJSON abspeichert und dann in data-geojson den Speicherort angibt, die darunter dargestellte Karte.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
data-feature_style=&#039;{&lt;br /&gt;
	&amp;quot;popup_properties_click&amp;quot;:&amp;quot;name network operator fire.*&amp;quot;,&lt;br /&gt;
	&amp;quot;popup_properties_move&amp;quot;:&amp;quot;fire.*\\:diameter&amp;quot;,&lt;br /&gt;
	&amp;quot;display_styles&amp;quot;:{&lt;br /&gt;
		&amp;quot;emergency.fire_hydrant&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;fa-fire-extinguisher&amp;quot;,&amp;quot;strokeColor&amp;quot;:&amp;quot;red&amp;quot;},&lt;br /&gt;
		&amp;quot;public_transport.station&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;fa-train&amp;quot;,&amp;quot;strokeColor&amp;quot;:&amp;quot;black&amp;quot;}}&lt;br /&gt;
}&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2018-03-05_11h55_51.png|thumb|none|Mit obigem Beispielfile und gezeigtem data-feature_style erstellte Karte]]&lt;br /&gt;
&lt;br /&gt;
Noch etwas zusätzliches: Eine gute Möglichkeit sich geojson Files zu holen (von der auch das Beispiel stammt), ist die webseite [http://overpass-turbo.eu/]. Dort kann man sich für beliebige Gebiete per Wizard eine Abfrage basteln, die dann bestimmte Infos aus Open Street Maps herausfiltert und als geojson exportieren kann.&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
&lt;br /&gt;
=== Verkehrskamera Darstellung aus FHEM Blitzer Devices ===&lt;br /&gt;
Wird &amp;quot;data-blitzer&amp;quot; mit dem Namen eines FHEM Blitzer Devices gesetzt, so werden die im FHEM Device gefundenen Verkehrskameras als Objekte auf der Karte dargestellt (ohne weitere Angabe als rotes Rechteck mit Ausrufezeichen). Voraussetzung hierbei ist, dass beim Blitzer Device in FHEM das Attribut createAllReadings  auf &amp;quot;1&amp;quot; gesetzt wird. Die Darstellung kann genauso wie bei GEOJSON Files über das Attribut data-feature_style eingestellt werden. Hier müssen dann als properties die entsprechenden Readings der Blitzer ohne die vorangestellten Nummern angegeben werden. Im folgenden Beispiel werden die Blitzer in Form eines runden Geschwindigkeits Verkehrsschildes dargestellt, der Wert, der an der jeweiligen Stelle als Maximalgeschwindigkeit gilt, wird in das Verkehrsschild als Zahl eingetragen (das Verkehrsschild Bild muss als Bilddatei im &amp;quot;images&amp;quot; Ordner unter www/ liegen.&lt;br /&gt;
[[Datei:Blitzer2.png|ohne|mini|100x100px|Bild das für die Darstellung verwendet wird (muss unter www/images liegen)]]&lt;br /&gt;
&lt;br /&gt;
Mit folgender Definition:&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div&lt;br /&gt;
	style=&amp;quot;height:100%; width:100%&amp;quot;&lt;br /&gt;
	data-type=&amp;quot;maps&amp;quot;&lt;br /&gt;
	data-map_type=&amp;quot;OSMs&amp;quot;&lt;br /&gt;
	data-mapgroup=&amp;quot;1&amp;quot;&lt;br /&gt;
	data-center=&amp;quot;49,9&amp;quot;&lt;br /&gt;
	data-zoom=&amp;quot;10&amp;quot;&lt;br /&gt;
	data-stroke=&amp;quot;#FF0000,30,80&amp;quot;&lt;br /&gt;
	data-icon=&amp;quot;../images/blitzer2.png&amp;quot;&lt;br /&gt;
	data-blitzer=&amp;quot;blitztest&amp;quot;&lt;br /&gt;
	data-feature_style=&#039;{&lt;br /&gt;
		&amp;quot;popup_properties_click&amp;quot;:&amp;quot;display_name create_date&amp;quot;,&lt;br /&gt;
		&amp;quot;popup_properties_move&amp;quot;:&amp;quot;vmax street&amp;quot;,&lt;br /&gt;
		&amp;quot;display_styles&amp;quot;:{&lt;br /&gt;
			&amp;quot;vmax.10&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;10&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;},&lt;br /&gt;
			&amp;quot;vmax.20&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;20&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;},&lt;br /&gt;
			&amp;quot;vmax.30&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;30&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;},&lt;br /&gt;
			&amp;quot;vmax.40&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;40&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;},&lt;br /&gt;
			&amp;quot;vmax.50&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;50&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;},&lt;br /&gt;
			&amp;quot;vmax.60&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;60&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;},&lt;br /&gt;
			&amp;quot;vmax.70&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;70&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;},&lt;br /&gt;
			&amp;quot;vmax.80&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;80&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;},&lt;br /&gt;
			&amp;quot;vmax.90&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;90&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;},&lt;br /&gt;
			&amp;quot;vmax.100&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;100&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;},&lt;br /&gt;
			&amp;quot;vmax.110&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;110&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;},&lt;br /&gt;
			&amp;quot;vmax.120&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;120&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;},&lt;br /&gt;
			&amp;quot;vmax.130&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;130&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;}&lt;br /&gt;
		}&lt;br /&gt;
	}&#039;&lt;br /&gt;
&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Entsteht ein Bild ähnlich dem Folgenden:&lt;br /&gt;
[[Datei:2020-10-02.png|links|mini|Beispiel mit Verkehrskameras aus FHEM Blitzer Device]]&lt;br /&gt;
[[Kategorie:FHEM Tablet UI|Maps]]&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Maps&amp;diff=33985</id>
		<title>FTUI Widget Maps</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Maps&amp;diff=33985"/>
		<updated>2020-10-08T06:41:59Z</updated>

		<summary type="html">&lt;p&gt;Eki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das [[{{PAGENAME}}|Map Widget]] ist ein Widget zur Darstellung von Karten mit Informationen aus FHEM oder auch anderern Quellen (z.B. GEOJSON Files). Das Modul wird aktuell (noch) nicht mit der normalen FTUI Installation verteilt und kann unter [https://forum.fhem.de/index.php/topic,91781.0.html] herunter geladen werden.&lt;br /&gt;
&lt;br /&gt;
Folgende Dinge werden berücksichtigt:&amp;lt;br&amp;gt;&lt;br /&gt;
FHEM Devices, welche eine Koordinate (longitude/latitude) als Reading/Attribut/Internal haben (z. B. Anwesenheiten auf Basis von ROOMMATE/RESIDENT/GUEST, oder das global Device als Standort von FHEM), werden als Punkt mit anpassbarem Aussehen an der entsprechenden Position auf der Karte dargestellt.&amp;lt;br&amp;gt;&lt;br /&gt;
Darüber hinaus ist es möglich, Fahrwege mit Fahrzeiten auf Basis des FHEM TRAFFIC Moduls als Pfade auf die Karte zu legen. Hierbei können die Routen eingefärbt als Linien dargestellt werden und entsprechend per InfoWindow dann Details (wie z.B. die normale Fahrzeit bzw. die Fahrzeit bei aktuellem Verkehr) dazu dargestellt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Existiert ein Reading &amp;quot;polygon&amp;quot; welches eine Liste von space separierten Koordinatenpaaren (X und Y Koordinaten jedes Paares durch &#039;,&#039; getrennt) als Wert enthält (z.B. mit &amp;quot;setreading &amp;lt;device&amp;gt; polygon 10.2488713,49.773172 10.2626042,49.7711765 10.278397,49.7682939 10.2986531,49.7671851&amp;quot; erzeugbar) so wird eine Linie auf der Karte mit den entsprechenden Koordinatenpunkten gezeichnet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die flexibelste Lösung ist die Verwendung von GEOJSON Files (müssen irgendwo per web erreichbar abgelegt werden). Diese Files können verschiedene geographische Objekte enthalten, die dann auf der Karte dargestellt werden. Das Aussehen und Verhalten der im GEOJSON File enthaltenen Objekte kann über den Parameter data-feature_style beeinflusst werden.&lt;br /&gt;
&lt;br /&gt;
Die Karte kann zusätzlich eine Darstellung der Verkehrslage als zuschaltbaren Layer enthalten (siehe unten).&lt;br /&gt;
&lt;br /&gt;
In der aktuellen Version (ab Oktober 2020) können auch Verkehrsüberwachungskameras des FHEM Moduls Blitzer (98_Blitzer.pm) dargestellt werden. Dazu muss das attribut data-blitzer auf ein gültiges Blitzer Device zeigen.&lt;br /&gt;
&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Datei:2018-03-05_11h55_51.png|thumb|none|Beispiel 1 (mit Google)]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Datei:FTUI_Maps_2.png|thumb|none|Beispiel 2 (mit Google)]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Datei:FTUI_Maps_3.png|thumb|none|Beispiel 3 (mit OSM)]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
==Voraussetzungen==&lt;br /&gt;
Die Darstellung im Widget basiert entweder auf dem Google Maps API oder auf Leaflet und der Nutzung von OpenStreetMap als Kartenbasis. Wenn Google Maps verwendet wird, muss zunächst ein API Key von Google beschafft werden. Wie man diesen beschafft, kann z.B. unter [https://developers.google.com/maps/api-key-best-practices] oder [[TRAFFIC]] nachgelesen werden. Dieser Key muss dann im HTML File (am Besten im Header) als meta Tag eingetragen werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;GoogleMapsApiKey&amp;quot; content=&amp;quot;&amp;lt;Key&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird die Leaflet/OSM Variante verwendet (data-map_type=&amp;quot;OSM&amp;quot;), so ist zunächst kein Schlüssel für die Kartendarstellung notwendig. Will man allerdings eine Route oder die Verkehrslage darstellen, so wird ein Map API Key von TomTom benötigt (bekommt man für private Zwecke auch ohne Hinterlegung einer Kreditkarte). Hinweise wie man den besorgt, siehe unter [https://developer.tomtom.com]. Auch dieser Key muss als meta Tag in das HTML File.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;TomTomApiKey&amp;quot; content=&amp;quot;&amp;lt;Key&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus muss in diesem Fall auch noch ein Plugin von TomTom herunter geladen und in das lib/ Verzeichnis abgelegt werden. Dazu das zip File von [https://api.tomtom.com/maps-sdk-js/4.36.2/jssdk-4.36.2-distribution.zip] herunter laden und alle darin enthaltenen Dateien unter einem neuen Verzeichnis lib/tomtom/ ablegen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Attribute==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-type&#039;&#039;&#039;||Type des Widgets muss auf &amp;quot;maps&amp;quot; gesetzt werden||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-device&#039;&#039;&#039;||FHEM-Device, dessen Readings dargestellt werden sollen||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-blitzer&#039;&#039;&#039;&lt;br /&gt;
|FHEM Blitzer Device, dessen Verkehrsüberwachungskamera Daten dargestellt werden sollen.&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-alias&#039;&#039;&#039;||Legt fest, aus welchem Reading der Name für die Anzeige genommen werden soll||alias||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-latitude&#039;&#039;&#039;||Legt fest, aus welchem Reading die geograpfische Breite genommen werden soll||latitude||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-longitude&#039;&#039;&#039;||Legt fest, aus welchem Reading die geograpfische Länge genommen werden soll||longitude||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-language&#039;&#039;&#039;||Kann &#039;de&#039; oder &#039;en&#039; sein und stellt die Sprache für die Ausgabe in den Info Windows ein||de||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-size&#039;&#039;&#039;||Gibt die Größe des Kartenausschnittes an (als String mit &#039;&amp;lt;Breite&amp;gt;,&amp;lt;Höhe&amp;gt;&#039;), kann auch weggelassen werden, wenn das Device ein Reading GoogleMapsSize besitzt (z. B. TRAFFIC Device), dann wird der Wert aus dem GoogleMapsSize Reading genommen oder, falls das auch nicht vorhanden ist, wird die Größe aus der Ausdehnung der Route(n) ermittelt.||auto||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-center&#039;&#039;&#039;||Gibt das Zentrum der Karte an (als String mit &#039;&amp;lt;Latitude&amp;gt;,&amp;lt;Longitude&amp;gt;&#039;), kann auch weggelassen werden, wenn das Device ein Reading GoogleMapsCenter besitzt (z. B. TRAFFIC Device), dann wird der Wert aus GoogleMapsCenter Reading genommen oder, falls das auch nicht vorhanden ist, wird das Zentrum aus der Ausdehnung der Route(n) ermittelt.||auto||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-zoom&#039;&#039;&#039;||Gibt den Zoomwert der Karte an (als integer Wert, siehe Google Maps API), kann auch weggelassen werden, wenn das Device ein Reading GoogleMapsZoom besitzt (z. B. TRAFFIC Device), dann wird der Wert aus dem GoogleMapsZoom Reading genommen oder, falls das auch nicht vorhanden ist, wird der Zoom Wert aus der Ausdehnung der Route(n) ermittelt.||auto||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-mapgroup&#039;&#039;&#039;||Legt fest, ob jedes Widget in eine eigene Karte zeichnen soll oder ob mehrer Informationen in einer Karte landen. Alle Widgets vom Typ &#039;maps&#039; mit dem gleichen wert für data-mapgroup zeichnen in ein und die selbe Karte||0||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-travel_mode&#039;&#039;&#039;||Gibt an, wie die Route berechnet werden soll. Es gibt die Möglichkeiten &#039;DRIVING&#039;, &#039;WALKING&#039;, &#039;BICYCLING&#039;, &#039;TRANSIT&#039; (Details siehe TRAFFIC Modul von FHEM oder Google Maps API für den &#039;Directions&#039; Service), kann auch weggelassen werden, wenn es sich um ein TRAFFIC Device handelt, dann wird der Wert aus dem trafficMode Reading genommen.||DRIVING||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-traffic&#039;&#039;&#039;||Gibt an, ob die Verkehrslage auf der Karte dargestellt werden soll||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-showdetails&#039;&#039;&#039;||Gibt an ob per Default die Info Windows eingeblendet werden sollen||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-stroke&#039;&#039;&#039;||Gibt an, wie die Fahrstrecken oder Symbole dargestellt werden sollen. Besteht aus maximal 6 Werten (Farbe Hinweg, Breite Hinweg, Durchsichtigkeit Hinweg, Farbe Rückweg, Breite Rückweg, Durchsichtigkeit Rückweg), die Farbe wird per #rrggbb angegeben, die Breite in Pixel und die Durchsichtigkeit als Prozentwert zwischen 0% und 100%, siehe auch Details zum Modul TRAFFIC. Die Symbole zur Route werden in der doppelten angegebenen Breite des Pfades dargestellt||#ffffff,7,50,#ffffff,7,50||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-icon&#039;&#039;&#039;||Hiermit kann ein Icon angegeben werden, welches statt des standardmäßigen Pfeils verwendet werden soll, um die Position zu markieren. Kann eine URL auf eine icon Datei, die relativ zum Verzeichnis www/images/ liegt sein||||&#039;default/HOME_Status.1.png&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-label&#039;&#039;&#039;||Will man statt eines Icons ein FontAwesome/Openautomation/fhemSVG Font-Icon (z.B. &#039;fa-home&#039;, &#039;oa-weather_winter&#039;, &#039;fs-usb_stick&#039;) verwenden, wird das hiermit angegeben (es kann auch icon und Font-Icon zusammen verwendet werden (z.B. ein Kreis als Icon und darin ein Font-Icon.||||fa-home&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-nightmode&#039;&#039;&#039;||legt fest, ob die Karte im Nachtmodus (dunkel) dargestellt werden soll (geht bisher noch nicht mit OSM)||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-style&#039;&#039;&#039;||Möglichkeit zum Setzen eines Styles entsprechend der Map API Options (siehe Dokumentation zu den Map APIs von Google und Leaflet)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-geojson&#039;&#039;&#039;||gibt den Namen eines Files auf dem Server an, in dem Daten zur Darstellung im GEOJSON Format (siehe [www.geojson.org]) abgelegt sind. Die Angabe ist relativ zum Verzeichnis /opt/fhem/ftui/tablet der Standardinstallation.||||&amp;quot;data/firedata.geojson&amp;quot; für das unten genannte Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-feature_style&#039;&#039;&#039;||Legt fest, wie die GEOJSON Daten dargestllt werden bzw. was passiert, wenn man auf einzelne Features klickt bzw. sie mit der Maus überstreicht (Details siehe unten unter &amp;lt;&amp;gt;||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Details zu GEOJSON Files==&lt;br /&gt;
Die Datei muss auf dem Server (FHEM) liegen (also typischerweise im www/tablet Verzeichnis). Ich habe z.B. unter www/tablet ein Unterverzeichnis data erstellt und geben data-geojson=&amp;quot;data/file.geojson&amp;quot; an. In dem geojson file können beliebige Objekte definiert werden, das Format ist unter [www.geojson.org] nachzulesen&lt;br /&gt;
Über den Parameter data-feature_style kann man recht flexibel festlegen, wie die Objekte dargestellt werden sollen. Das Ganze ist ein js Objekt, wird also in &#039;{}&#039; eingeschlossen. Innerhalb des Objektes legen 3 Objekteigenschaften fest, wie die Darstellung aussehen soll.&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft &amp;quot;popup_properties_click&amp;quot; hat als Wert eine Leerzeichen getrennte Liste von Expressions, welche, falls sie auf Properties der Objekte im geojson File zutreffen, dazu führen, dass beim Klick auf die angezeigten Objekte ein Info Window geöffnet wird, welches die entsprechenden geojson Objekteigenschaften anzeigt.&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft &amp;quot;popup_properties_move&amp;quot; macht genau das Gleiche, allerdings sorgen die dort angegebenen Expressions dafür dass die dazu passenden geojson Objekte per Popup bei Überfahren mit der Maus und nicht bei Klick angezeigt werden und beim Verlassen mit der Maus dann auch wieder automatisch verschwinden.&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft &amp;quot;display_styles&amp;quot; legt genau fest, wie die verschiedenen geojson Objekte dargestellt werden sollen. Der Wert dieser Eigenschaft ist wiederum ein Objekt. Als Eigenschaftsname wird ein Verweis auf ein bestimmtes Objekt im geojson File verwendet. Der Verweis kann entweder eine Eigenschaft eines Objekts im geojson File sein oder eine Kombination aus Eigenschaft und Wert (also nicht alle Objekte des gleichen Typs sondern nur die, die eine auch den passenden Wert haben). Dahinter wird dann der zu verwendete Stil als weiteres Objekt angegeben, welches aus einer Menge aus Property:Value pairs besteht, bei dem die Property die Displayeigenschaft (also z.B. Farbe) und der Wert dann den dazugehörigen Wert (also z.B. rot) festlegt. Alles was nicht explizit hier festgelegt wird, wird aus den &amp;quot;globalen&amp;quot; Einstellungen (z.B. data-stroke) übernommen. Die folgende Definition generiert, wenn man das Beispielfile firedata.geojson ({{Link2Forum|Topic=78379|Message=776472|LinkText=Anhang am Foren-Beitrag}}) als GEOJSON abspeichert und dann in data-geojson den Speicherort angibt, die darunter dargestellte Karte.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
data-feature_style=&#039;{&lt;br /&gt;
	&amp;quot;popup_properties_click&amp;quot;:&amp;quot;name network operator fire.*&amp;quot;,&lt;br /&gt;
	&amp;quot;popup_properties_move&amp;quot;:&amp;quot;fire.*\\:diameter&amp;quot;,&lt;br /&gt;
	&amp;quot;display_styles&amp;quot;:{&lt;br /&gt;
		&amp;quot;emergency.fire_hydrant&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;fa-fire-extinguisher&amp;quot;,&amp;quot;strokeColor&amp;quot;:&amp;quot;red&amp;quot;},&lt;br /&gt;
		&amp;quot;public_transport.station&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;fa-train&amp;quot;,&amp;quot;strokeColor&amp;quot;:&amp;quot;black&amp;quot;}}&lt;br /&gt;
}&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2018-03-05_11h55_51.png|thumb|none|Mit obigem Beispielfile und gezeigtem data-feature_style erstellte Karte]]&lt;br /&gt;
&lt;br /&gt;
Noch etwas zusätzliches: Eine gute Möglichkeit sich geojson Files zu holen (von der auch das Beispiel stammt), ist die webseite [http://overpass-turbo.eu/]. Dort kann man sich für beliebige Gebiete per Wizard eine Abfrage basteln, die dann bestimmte Infos aus Open Street Maps herausfiltert und als geojson exportieren kann.&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
&lt;br /&gt;
=== Verkehrskamera Darstellung aus FHEM Blitzer Devices ===&lt;br /&gt;
Wird &amp;quot;data-blitzer&amp;quot; mit dem Namen eines FHEM Blitzer Devices gesetzt, so werden die im FHEM Device gefundenen Verkehrskameras als Objekte auf der Karte dargestellt (ohne weitere Angabe als rotes Rechteck mit Ausrufezeichen). Die Darstellung kann genauso wie bei GEOJSON Files über das Attribut data-feature_style eingestellt werden. Hier müssen dann als properties die entsprechenden Readings der Blitzer ohne die vorangestellten Nummern angegeben werden. Im folgenden Beispiel werden die Blitzer in Form eines runden Geschwindigkeits Verkehrsschildes dargestellt, der Wert, der an der jeweiligen Stelle als Maximalgeschwindigkeit gilt, wird in das Verkehrsschild als Zahl eingetragen (das Verkehrsschild Bild muss als Bilddatei im &amp;quot;images&amp;quot; Ordner unter www/ liegen.&lt;br /&gt;
[[Datei:Blitzer2.png|ohne|mini|100x100px|Bild das für die Darstellung verwendet wird (muss unter www/images liegen)]]&lt;br /&gt;
&lt;br /&gt;
Mit folgender Definition:&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div&lt;br /&gt;
	style=&amp;quot;height:100%; width:100%&amp;quot;&lt;br /&gt;
	data-type=&amp;quot;maps&amp;quot;&lt;br /&gt;
	data-map_type=&amp;quot;OSMs&amp;quot;&lt;br /&gt;
	data-mapgroup=&amp;quot;1&amp;quot;&lt;br /&gt;
	data-center=&amp;quot;49,9&amp;quot;&lt;br /&gt;
	data-zoom=&amp;quot;10&amp;quot;&lt;br /&gt;
	data-stroke=&amp;quot;#FF0000,30,80&amp;quot;&lt;br /&gt;
	data-icon=&amp;quot;../images/blitzer2.png&amp;quot;&lt;br /&gt;
	data-blitzer=&amp;quot;blitztest&amp;quot;&lt;br /&gt;
	data-feature_style=&#039;{&lt;br /&gt;
		&amp;quot;popup_properties_click&amp;quot;:&amp;quot;display_name create_date&amp;quot;,&lt;br /&gt;
		&amp;quot;popup_properties_move&amp;quot;:&amp;quot;vmax street&amp;quot;,&lt;br /&gt;
		&amp;quot;display_styles&amp;quot;:{&lt;br /&gt;
			&amp;quot;vmax.10&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;10&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;},&lt;br /&gt;
			&amp;quot;vmax.20&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;20&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;},&lt;br /&gt;
			&amp;quot;vmax.30&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;30&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;},&lt;br /&gt;
			&amp;quot;vmax.40&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;40&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;},&lt;br /&gt;
			&amp;quot;vmax.50&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;50&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;},&lt;br /&gt;
			&amp;quot;vmax.60&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;60&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;},&lt;br /&gt;
			&amp;quot;vmax.70&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;70&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;},&lt;br /&gt;
			&amp;quot;vmax.80&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;80&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;},&lt;br /&gt;
			&amp;quot;vmax.90&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;90&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;},&lt;br /&gt;
			&amp;quot;vmax.100&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;100&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;},&lt;br /&gt;
			&amp;quot;vmax.110&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;110&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;},&lt;br /&gt;
			&amp;quot;vmax.120&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;120&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;},&lt;br /&gt;
			&amp;quot;vmax.130&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;130&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;}&lt;br /&gt;
		}&lt;br /&gt;
	}&#039;&lt;br /&gt;
&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Entsteht ein Bild ähnlich dem Folgenden:&lt;br /&gt;
[[Datei:2020-10-02.png|links|mini|Beispiel mit Verkehrskameras aus FHEM Blitzer Device]]&lt;br /&gt;
[[Kategorie:FHEM Tablet UI|Maps]]&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:Blitzer2.png&amp;diff=33984</id>
		<title>Datei:Blitzer2.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:Blitzer2.png&amp;diff=33984"/>
		<updated>2020-10-08T06:33:52Z</updated>

		<summary type="html">&lt;p&gt;Eki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Maps&amp;diff=33983</id>
		<title>FTUI Widget Maps</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Maps&amp;diff=33983"/>
		<updated>2020-10-08T06:31:42Z</updated>

		<summary type="html">&lt;p&gt;Eki: Blitzer Darstellung hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das [[{{PAGENAME}}|Map Widget]] ist ein Widget zur Darstellung von Karten mit Informationen aus FHEM oder auch anderern Quellen (z.B. GEOJSON Files). Das Modul wird aktuell (noch) nicht mit der normalen FTUI Installation verteilt und kann unter [https://forum.fhem.de/index.php/topic,91781.0.html] herunter geladen werden.&lt;br /&gt;
&lt;br /&gt;
Folgende Dinge werden berücksichtigt:&amp;lt;br&amp;gt;&lt;br /&gt;
FHEM Devices, welche eine Koordinate (longitude/latitude) als Reading/Attribut/Internal haben (z. B. Anwesenheiten auf Basis von ROOMMATE/RESIDENT/GUEST, oder das global Device als Standort von FHEM), werden als Punkt mit anpassbarem Aussehen an der entsprechenden Position auf der Karte dargestellt.&amp;lt;br&amp;gt;&lt;br /&gt;
Darüber hinaus ist es möglich, Fahrwege mit Fahrzeiten auf Basis des FHEM TRAFFIC Moduls als Pfade auf die Karte zu legen. Hierbei können die Routen eingefärbt als Linien dargestellt werden und entsprechend per InfoWindow dann Details (wie z.B. die normale Fahrzeit bzw. die Fahrzeit bei aktuellem Verkehr) dazu dargestellt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Existiert ein Reading &amp;quot;polygon&amp;quot; welches eine Liste von space separierten Koordinatenpaaren (X und Y Koordinaten jedes Paares durch &#039;,&#039; getrennt) als Wert enthält (z.B. mit &amp;quot;setreading &amp;lt;device&amp;gt; polygon 10.2488713,49.773172 10.2626042,49.7711765 10.278397,49.7682939 10.2986531,49.7671851&amp;quot; erzeugbar) so wird eine Linie auf der Karte mit den entsprechenden Koordinatenpunkten gezeichnet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die flexibelste Lösung ist die Verwendung von GEOJSON Files (müssen irgendwo per web erreichbar abgelegt werden). Diese Files können verschiedene geographische Objekte enthalten, die dann auf der Karte dargestellt werden. Das Aussehen und Verhalten der im GEOJSON File enthaltenen Objekte kann über den Parameter data-feature_style beeinflusst werden.&lt;br /&gt;
&lt;br /&gt;
Die Karte kann zusätzlich eine Darstellung der Verkehrslage als zuschaltbaren Layer enthalten (siehe unten).&lt;br /&gt;
&lt;br /&gt;
In der aktuellen Version (ab Oktober 2020) können auch Verkehrsüberwachungskameras des FHEM Moduls Blitzer (98_Blitzer.pm) dargestellt werden. Dazu muss das attribut data-blitzer auf ein gültiges Blitzer Device zeigen.&lt;br /&gt;
&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Datei:2018-03-05_11h55_51.png|thumb|none|Beispiel 1 (mit Google)]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Datei:FTUI_Maps_2.png|thumb|none|Beispiel 2 (mit Google)]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Datei:FTUI_Maps_3.png|thumb|none|Beispiel 3 (mit OSM)]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
==Voraussetzungen==&lt;br /&gt;
Die Darstellung im Widget basiert entweder auf dem Google Maps API oder auf Leaflet und der Nutzung von OpenStreetMap als Kartenbasis. Wenn Google Maps verwendet wird, muss zunächst ein API Key von Google beschafft werden. Wie man diesen beschafft, kann z.B. unter [https://developers.google.com/maps/api-key-best-practices] oder [[TRAFFIC]] nachgelesen werden. Dieser Key muss dann im HTML File (am Besten im Header) als meta Tag eingetragen werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;GoogleMapsApiKey&amp;quot; content=&amp;quot;&amp;lt;Key&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird die Leaflet/OSM Variante verwendet (data-map_type=&amp;quot;OSM&amp;quot;), so ist zunächst kein Schlüssel für die Kartendarstellung notwendig. Will man allerdings eine Route oder die Verkehrslage darstellen, so wird ein Map API Key von TomTom benötigt (bekommt man für private Zwecke auch ohne Hinterlegung einer Kreditkarte). Hinweise wie man den besorgt, siehe unter [https://developer.tomtom.com]. Auch dieser Key muss als meta Tag in das HTML File.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;TomTomApiKey&amp;quot; content=&amp;quot;&amp;lt;Key&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus muss in diesem Fall auch noch ein Plugin von TomTom herunter geladen und in das lib/ Verzeichnis abgelegt werden. Dazu das zip File von [https://api.tomtom.com/maps-sdk-js/4.36.2/jssdk-4.36.2-distribution.zip] herunter laden und alle darin enthaltenen Dateien unter einem neuen Verzeichnis lib/tomtom/ ablegen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Attribute==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-type&#039;&#039;&#039;||Type des Widgets muss auf &amp;quot;maps&amp;quot; gesetzt werden||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-device&#039;&#039;&#039;||FHEM-Device, dessen Readings dargestellt werden sollen||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-blitzer&#039;&#039;&#039;&lt;br /&gt;
|FHEM Blitzer Device, dessen Verkehrsüberwachungskamera Daten dargestellt werden sollen.&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-alias&#039;&#039;&#039;||Legt fest, aus welchem Reading der Name für die Anzeige genommen werden soll||alias||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-latitude&#039;&#039;&#039;||Legt fest, aus welchem Reading die geograpfische Breite genommen werden soll||latitude||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-longitude&#039;&#039;&#039;||Legt fest, aus welchem Reading die geograpfische Länge genommen werden soll||longitude||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-language&#039;&#039;&#039;||Kann &#039;de&#039; oder &#039;en&#039; sein und stellt die Sprache für die Ausgabe in den Info Windows ein||de||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-size&#039;&#039;&#039;||Gibt die Größe des Kartenausschnittes an (als String mit &#039;&amp;lt;Breite&amp;gt;,&amp;lt;Höhe&amp;gt;&#039;), kann auch weggelassen werden, wenn das Device ein Reading GoogleMapsSize besitzt (z. B. TRAFFIC Device), dann wird der Wert aus dem GoogleMapsSize Reading genommen oder, falls das auch nicht vorhanden ist, wird die Größe aus der Ausdehnung der Route(n) ermittelt.||auto||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-center&#039;&#039;&#039;||Gibt das Zentrum der Karte an (als String mit &#039;&amp;lt;Latitude&amp;gt;,&amp;lt;Longitude&amp;gt;&#039;), kann auch weggelassen werden, wenn das Device ein Reading GoogleMapsCenter besitzt (z. B. TRAFFIC Device), dann wird der Wert aus GoogleMapsCenter Reading genommen oder, falls das auch nicht vorhanden ist, wird das Zentrum aus der Ausdehnung der Route(n) ermittelt.||auto||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-zoom&#039;&#039;&#039;||Gibt den Zoomwert der Karte an (als integer Wert, siehe Google Maps API), kann auch weggelassen werden, wenn das Device ein Reading GoogleMapsZoom besitzt (z. B. TRAFFIC Device), dann wird der Wert aus dem GoogleMapsZoom Reading genommen oder, falls das auch nicht vorhanden ist, wird der Zoom Wert aus der Ausdehnung der Route(n) ermittelt.||auto||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-mapgroup&#039;&#039;&#039;||Legt fest, ob jedes Widget in eine eigene Karte zeichnen soll oder ob mehrer Informationen in einer Karte landen. Alle Widgets vom Typ &#039;maps&#039; mit dem gleichen wert für data-mapgroup zeichnen in ein und die selbe Karte||0||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-travel_mode&#039;&#039;&#039;||Gibt an, wie die Route berechnet werden soll. Es gibt die Möglichkeiten &#039;DRIVING&#039;, &#039;WALKING&#039;, &#039;BICYCLING&#039;, &#039;TRANSIT&#039; (Details siehe TRAFFIC Modul von FHEM oder Google Maps API für den &#039;Directions&#039; Service), kann auch weggelassen werden, wenn es sich um ein TRAFFIC Device handelt, dann wird der Wert aus dem trafficMode Reading genommen.||DRIVING||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-traffic&#039;&#039;&#039;||Gibt an, ob die Verkehrslage auf der Karte dargestellt werden soll||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-showdetails&#039;&#039;&#039;||Gibt an ob per Default die Info Windows eingeblendet werden sollen||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-stroke&#039;&#039;&#039;||Gibt an, wie die Fahrstrecken oder Symbole dargestellt werden sollen. Besteht aus maximal 6 Werten (Farbe Hinweg, Breite Hinweg, Durchsichtigkeit Hinweg, Farbe Rückweg, Breite Rückweg, Durchsichtigkeit Rückweg), die Farbe wird per #rrggbb angegeben, die Breite in Pixel und die Durchsichtigkeit als Prozentwert zwischen 0% und 100%, siehe auch Details zum Modul TRAFFIC. Die Symbole zur Route werden in der doppelten angegebenen Breite des Pfades dargestellt||#ffffff,7,50,#ffffff,7,50||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-icon&#039;&#039;&#039;||Hiermit kann ein Icon angegeben werden, welches statt des standardmäßigen Pfeils verwendet werden soll, um die Position zu markieren. Kann eine URL auf eine icon Datei, die relativ zum Verzeichnis www/images/ liegt sein||||&#039;default/HOME_Status.1.png&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-label&#039;&#039;&#039;||Will man statt eines Icons ein FontAwesome/Openautomation/fhemSVG Font-Icon (z.B. &#039;fa-home&#039;, &#039;oa-weather_winter&#039;, &#039;fs-usb_stick&#039;) verwenden, wird das hiermit angegeben (es kann auch icon und Font-Icon zusammen verwendet werden (z.B. ein Kreis als Icon und darin ein Font-Icon.||||fa-home&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-nightmode&#039;&#039;&#039;||legt fest, ob die Karte im Nachtmodus (dunkel) dargestellt werden soll (geht bisher noch nicht mit OSM)||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-style&#039;&#039;&#039;||Möglichkeit zum Setzen eines Styles entsprechend der Map API Options (siehe Dokumentation zu den Map APIs von Google und Leaflet)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-geojson&#039;&#039;&#039;||gibt den Namen eines Files auf dem Server an, in dem Daten zur Darstellung im GEOJSON Format (siehe [www.geojson.org]) abgelegt sind. Die Angabe ist relativ zum Verzeichnis /opt/fhem/ftui/tablet der Standardinstallation.||||&amp;quot;data/firedata.geojson&amp;quot; für das unten genannte Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-feature_style&#039;&#039;&#039;||Legt fest, wie die GEOJSON Daten dargestllt werden bzw. was passiert, wenn man auf einzelne Features klickt bzw. sie mit der Maus überstreicht (Details siehe unten unter &amp;lt;&amp;gt;||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Details zu GEOJSON Files==&lt;br /&gt;
Die Datei muss auf dem Server (FHEM) liegen (also typischerweise im www/tablet Verzeichnis). Ich habe z.B. unter www/tablet ein Unterverzeichnis data erstellt und geben data-geojson=&amp;quot;data/file.geojson&amp;quot; an. In dem geojson file können beliebige Objekte definiert werden, das Format ist unter [www.geojson.org] nachzulesen&lt;br /&gt;
Über den Parameter data-feature_style kann man recht flexibel festlegen, wie die Objekte dargestellt werden sollen. Das Ganze ist ein js Objekt, wird also in &#039;{}&#039; eingeschlossen. Innerhalb des Objektes legen 3 Objekteigenschaften fest, wie die Darstellung aussehen soll.&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft &amp;quot;popup_properties_click&amp;quot; hat als Wert eine Leerzeichen getrennte Liste von Expressions, welche, falls sie auf Properties der Objekte im geojson File zutreffen, dazu führen, dass beim Klick auf die angezeigten Objekte ein Info Window geöffnet wird, welches die entsprechenden geojson Objekteigenschaften anzeigt.&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft &amp;quot;popup_properties_move&amp;quot; macht genau das Gleiche, allerdings sorgen die dort angegebenen Expressions dafür dass die dazu passenden geojson Objekte per Popup bei Überfahren mit der Maus und nicht bei Klick angezeigt werden und beim Verlassen mit der Maus dann auch wieder automatisch verschwinden.&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft &amp;quot;display_styles&amp;quot; legt genau fest, wie die verschiedenen geojson Objekte dargestellt werden sollen. Der Wert dieser Eigenschaft ist wiederum ein Objekt. Als Eigenschaftsname wird ein Verweis auf ein bestimmtes Objekt im geojson File verwendet. Der Verweis kann entweder eine Eigenschaft eines Objekts im geojson File sein oder eine Kombination aus Eigenschaft und Wert (also nicht alle Objekte des gleichen Typs sondern nur die, die eine auch den passenden Wert haben). Dahinter wird dann der zu verwendete Stil als weiteres Objekt angegeben, welches aus einer Menge aus Property:Value pairs besteht, bei dem die Property die Displayeigenschaft (also z.B. Farbe) und der Wert dann den dazugehörigen Wert (also z.B. rot) festlegt. Alles was nicht explizit hier festgelegt wird, wird aus den &amp;quot;globalen&amp;quot; Einstellungen (z.B. data-stroke) übernommen. Die folgende Definition generiert, wenn man das Beispielfile firedata.geojson ({{Link2Forum|Topic=78379|Message=776472|LinkText=Anhang am Foren-Beitrag}}) als GEOJSON abspeichert und dann in data-geojson den Speicherort angibt, die darunter dargestellte Karte.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
data-feature_style=&#039;{&lt;br /&gt;
	&amp;quot;popup_properties_click&amp;quot;:&amp;quot;name network operator fire.*&amp;quot;,&lt;br /&gt;
	&amp;quot;popup_properties_move&amp;quot;:&amp;quot;fire.*\\:diameter&amp;quot;,&lt;br /&gt;
	&amp;quot;display_styles&amp;quot;:{&lt;br /&gt;
		&amp;quot;emergency.fire_hydrant&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;fa-fire-extinguisher&amp;quot;,&amp;quot;strokeColor&amp;quot;:&amp;quot;red&amp;quot;},&lt;br /&gt;
		&amp;quot;public_transport.station&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;fa-train&amp;quot;,&amp;quot;strokeColor&amp;quot;:&amp;quot;black&amp;quot;}}&lt;br /&gt;
}&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2018-03-05_11h55_51.png|thumb|none|Mit obigem Beispielfile und gezeigtem data-feature_style erstellte Karte]]&lt;br /&gt;
&lt;br /&gt;
Noch etwas zusätzliches: Eine gute Möglichkeit sich geojson Files zu holen (von der auch das Beispiel stammt), ist die webseite [http://overpass-turbo.eu/]. Dort kann man sich für beliebige Gebiete per Wizard eine Abfrage basteln, die dann bestimmte Infos aus Open Street Maps herausfiltert und als geojson exportieren kann.&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
&lt;br /&gt;
=== Verkehrskamera Darstellung aus FHEM Blitzer Devices ===&lt;br /&gt;
Wird &amp;quot;data-blitzer&amp;quot; mit dem Namen eines FHEM Blitzer Devices gesetzt, so werden die im FHEM Device gefundenen Verkehrskameras als Objekte auf der Karte dargestellt (ohne weitere Angabe als rotes Rechteck mit Ausrufezeichen). Die Darstellung kann genauso wie bei GEOJSON Files über das Attribut data-feature_style eingestellt werden. Hier müssen dann als properties die entsprechenden Readings der Blitzer ohne die vorangestellten Nummern angegeben werden. Im folgenden Beispiel werden die Blitzer in Form eines runden Geschwindigkeits Verkehrsschildes dargestellt, der Wert, der an der jeweiligen Stelle als Maximalgeschwindigkeit gilt, wird in das Verkehrsschild als Zahl eingetragen (das Verkehrsschild Bild muss als Bilddatei im &amp;quot;images&amp;quot; Ordner unter www/ liegen.&lt;br /&gt;
&lt;br /&gt;
Mit folgender Definition:&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div&lt;br /&gt;
	style=&amp;quot;height:100%; width:100%&amp;quot;&lt;br /&gt;
	data-type=&amp;quot;maps&amp;quot;&lt;br /&gt;
	data-map_type=&amp;quot;OSMs&amp;quot;&lt;br /&gt;
	data-mapgroup=&amp;quot;1&amp;quot;&lt;br /&gt;
	data-center=&amp;quot;49,9&amp;quot;&lt;br /&gt;
	data-zoom=&amp;quot;10&amp;quot;&lt;br /&gt;
	data-stroke=&amp;quot;#FF0000,30,80&amp;quot;&lt;br /&gt;
	data-icon=&amp;quot;../images/blitzer2.png&amp;quot;&lt;br /&gt;
	data-blitzer=&amp;quot;blitztest&amp;quot;&lt;br /&gt;
	data-feature_style=&#039;{&lt;br /&gt;
		&amp;quot;popup_properties_click&amp;quot;:&amp;quot;display_name create_date&amp;quot;,&lt;br /&gt;
		&amp;quot;popup_properties_move&amp;quot;:&amp;quot;vmax street&amp;quot;,&lt;br /&gt;
		&amp;quot;display_styles&amp;quot;:{&lt;br /&gt;
			&amp;quot;vmax.10&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;10&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;},&lt;br /&gt;
			&amp;quot;vmax.20&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;20&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;},&lt;br /&gt;
			&amp;quot;vmax.30&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;30&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;},&lt;br /&gt;
			&amp;quot;vmax.40&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;40&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;},&lt;br /&gt;
			&amp;quot;vmax.50&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;50&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;},&lt;br /&gt;
			&amp;quot;vmax.60&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;60&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;},&lt;br /&gt;
			&amp;quot;vmax.70&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;70&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;},&lt;br /&gt;
			&amp;quot;vmax.80&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;80&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;},&lt;br /&gt;
			&amp;quot;vmax.90&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;90&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;},&lt;br /&gt;
			&amp;quot;vmax.100&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;100&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;},&lt;br /&gt;
			&amp;quot;vmax.110&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;110&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;},&lt;br /&gt;
			&amp;quot;vmax.120&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;120&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;},&lt;br /&gt;
			&amp;quot;vmax.130&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;130&amp;quot;,&amp;quot;fontSize&amp;quot;:&amp;quot;15px&amp;quot;}&lt;br /&gt;
		}&lt;br /&gt;
	}&#039;&lt;br /&gt;
&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Entsteht ein Bild ähnlich dem Folgenden:&lt;br /&gt;
[[Datei:2020-10-02.png|links|mini|Beispiel mit Verkehrskameras aus FHEM Blitzer Device]]&lt;br /&gt;
[[Kategorie:FHEM Tablet UI|Maps]]&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:2020-10-02.png&amp;diff=33982</id>
		<title>Datei:2020-10-02.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:2020-10-02.png&amp;diff=33982"/>
		<updated>2020-10-08T06:27:42Z</updated>

		<summary type="html">&lt;p&gt;Eki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Slider&amp;diff=31144</id>
		<title>FTUI Widget Slider</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Slider&amp;diff=31144"/>
		<updated>2019-08-23T06:40:49Z</updated>

		<summary type="html">&lt;p&gt;Eki: Anpassung der Beschreibung für Darstellung von Slidern für Fenster/Rolläden an neuere FTUI Versionen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das [[{{PAGENAME}}|Slider Widget]] ist ein Widget für [[FHEM Tablet UI]] in Form eines Schiebereglers, mit dem ein beliebiger Wert zwischen zwei festgelegten Grenzwerten auswählen lässt. Es eignet sich zum Beispiel zum Einstellen der Lautstärke eines Audio-Gerätes oder der Helligkeit einer Lampe.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Slider_tabletUI.png&lt;br /&gt;
File:Slider_tabletUI2.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Steuer-Attribute==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-device&#039;&#039;&#039;||FHEM-Device, dessen Reading gesetzt werden soll (&amp;lt;command&amp;gt; &#039;&#039;&#039;&amp;lt;device&amp;gt;&#039;&#039;&#039; &amp;lt;reading&amp;gt; &amp;lt;value&amp;gt;)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-get&#039;&#039;&#039;||Reading, dessen Inhalt den aktuellen Wert wiedergibt||&#039;STATE&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-set&#039;&#039;&#039;||Reading, das gesetzt werden soll (&amp;lt;command&amp;gt; &amp;lt;device&amp;gt; &#039;&#039;&#039;&amp;lt;reading&amp;gt;&#039;&#039;&#039; &amp;lt;value&amp;gt;)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-on&#039;&#039;&#039;||Wert, bei dem der Slider zum maximalen Ausschlag springt||&#039;on&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-off&#039;&#039;&#039;||Wert, bei dem der Slider minimalen Ausschlag springt||&#039;off&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-part&#039;&#039;&#039;||Wählt bei Werten, die durch Leerzeichen getrennt sind, den Teil aus, der angezeigt werden soll. Der Teil kann auch mit RegEx ermittelt werden.||&#039;-1&#039;: alles Anzeigen||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-set-value&#039;&#039;&#039;||Format, wie der eingestellte Wert an FHEM übergeben werden soll||&#039;$v&#039;: Nur den Wert||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-cmd&#039;&#039;&#039;||Befehl, der gesendet werden soll (&#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; &amp;lt;device&amp;gt; &amp;lt;reading&amp;gt; &amp;lt;value&amp;gt;) (z.B. setstate, set, setreading, trigger)||set||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-min&#039;&#039;&#039;||Minimaler Wert, der eingestellt werden kann||0||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-max&#039;&#039;&#039;||Maximaler Wert, der eingestellt werden kann||100||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-step&#039;&#039;&#039;||Schrittweite beim Schieben des Sliders||1||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-width&#039;&#039;&#039;||Breite des Sliders, wenn er horizontal ausgerichtet ist||normal &#039;120px&#039;, mini &#039;60px&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-height&#039;&#039;&#039;||Höhe des Sliders, wenn er vertikal ausgerichtet ist||normal &#039;120px&#039;, mini &#039;60px&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-color&#039;&#039;&#039;||Farbe des Sliders für den Bereich 0...&amp;lt;eingestellter Wert&amp;gt;||&#039;#aa6900&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-background-color&#039;&#039;&#039;||Farbe des Sliders für den Bereich &amp;lt;eingestellter Wert&amp;gt;...&amp;lt;Maximaler Wert&amp;gt;||&#039;#404040&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-handle-diameter&#039;&#039;&#039;||Größe des Griffs||&#039;20&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-touch-diameter&#039;&#039;&#039;||Größe des Griffs, wenn er bewegt wird||wie &#039;&#039;&#039;data-handle-diameter&#039;&#039;&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-timer-state&#039;&#039;&#039;||Statusvariable mit der eine timergesteuerte Bewegung des Sliders ausgelöst werden kann||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-timer-state-on&#039;&#039;&#039;||Zustand der Statusvariablen der die Bewegung startet||&#039;on&#039;||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;data-timer-state-off&#039;&#039;&#039;||Zustand der Statusvariablen der die Bewegung stoppt||&#039;off&#039;||!on (alles was nicht on ist stoppt den Timer)&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;data-timer-step&#039;&#039;&#039;||Erhöhung des Wertes pro Timer-Intervall||1||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;data-timer-interval&#039;&#039;&#039;||Timer-Intervall in Millisekunden||1000||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==CSS-Klassen==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Klasse&lt;br /&gt;
!Beschreibung&lt;br /&gt;
{{FTUI Klasse|mini}}{{FTUI Klasse|big}}{{FTUI Klasse|bigger}}{{FTUI Klasse|large}}{{FTUI Klasse|horizontal}}{{FTUI Klasse|right}}{{FTUI Klasse|negated}}{{FTUI Klasse|value}}{{FTUI Klasse|FS20}}{{FTUI Klasse|tap}}{{FTUI Klasse|readonly}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Der Slider unterstützt &#039;&#039;tap to target&#039;&#039;, also das Springen zum gewünschten Wert durch einfaches Antippen, nur, wenn die CSS-Klasse &#039;&#039;&#039;tap&#039;&#039;&#039; verwendet wird.&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
===Vertikaler Schieberegler===&lt;br /&gt;
Einfacher Schieberegler mit dem Einstellbereich 10...90&lt;br /&gt;
&lt;br /&gt;
[[File:Slider_tabletUI.png]]&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;slider&amp;quot; &lt;br /&gt;
     data-device=&#039;Dummy1&#039; &lt;br /&gt;
     data-min=&amp;quot;10&amp;quot; &lt;br /&gt;
     data-max=&amp;quot;90&amp;quot; &lt;br /&gt;
     class=&amp;quot;cell&amp;quot; &amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell&amp;quot;&amp;gt;Light1&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Horizontaler Schieberegler===&lt;br /&gt;
Einfacher Schieberegler mit dem Einstellbereich 0...100&lt;br /&gt;
&lt;br /&gt;
[[File:Slider_tabletUI2.jpg]]&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;slider&amp;quot;&lt;br /&gt;
     data-device=&#039;Dummy1&#039; &lt;br /&gt;
     data-min=&amp;quot;0&amp;quot; &lt;br /&gt;
     data-max=&amp;quot;100&amp;quot; &lt;br /&gt;
     class=&amp;quot;horizontal&amp;quot; &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Retro-Schieberegler mit Skala und rechteckigem Riffelknopf===&lt;br /&gt;
Kombination aus Slider- und Scale-Widget und Modifikation des Buttons in fhem-tablet-ui-user.css&lt;br /&gt;
&lt;br /&gt;
[[File:retroslider.jpg]]&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;doublebox-h&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;right-narrow&amp;quot;&lt;br /&gt;
		 data-type=&amp;quot;scale&amp;quot;&lt;br /&gt;
		 data-orientation=&amp;quot;vertical&amp;quot;&lt;br /&gt;
		 data-device=&amp;quot;amp&amp;quot;&lt;br /&gt;
		 data-get=&amp;quot;volume&amp;quot; &lt;br /&gt;
		 data-set=&amp;quot;volume&amp;quot;&lt;br /&gt;
		 data-height=&amp;quot;155&amp;quot;&lt;br /&gt;
		 data-width=&amp;quot;45&amp;quot;&lt;br /&gt;
		 data-value-interval=&amp;quot;50&amp;quot;&lt;br /&gt;
		 data-tick=&amp;quot;5&amp;quot;&lt;br /&gt;
		 data-extra-tick=&amp;quot;25&amp;quot;&lt;br /&gt;
		 data-font-size=&amp;quot;16&amp;quot;&lt;br /&gt;
		 data-colors=&#039;[&amp;quot;green&amp;quot;,&amp;quot;#FFBF00&amp;quot;,&amp;quot;#EF0002&amp;quot;]&#039;&lt;br /&gt;
		 data-limits=&#039;[&amp;quot;1&amp;quot;,&amp;quot;50&amp;quot;,&amp;quot;75&amp;quot;]&#039;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class = &amp;quot;retro value left-narrow&amp;quot;&lt;br /&gt;
		 data-type=&amp;quot;slider&amp;quot;&lt;br /&gt;
		 data-height=&amp;quot;150&amp;quot;&lt;br /&gt;
		 data-device=&amp;quot;amp&amp;quot;&lt;br /&gt;
		 data-get=&amp;quot;volume&amp;quot; &lt;br /&gt;
		 data-set=&amp;quot;volume&amp;quot;&lt;br /&gt;
		 data-color=&amp;quot;grey&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Eintrag in fhem-tablet-ui-user.css:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
.retro .vertical .range-handle {&lt;br /&gt;
    left: -17px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.retro .vertical .range-handle {&lt;br /&gt;
  width: 35px !important;&lt;br /&gt;
  height: 15px !important;&lt;br /&gt;
  border-radius: 3px !important;&lt;br /&gt;
  background-color: black;&lt;br /&gt;
  background-image: linear-gradient(180deg, white,black);&lt;br /&gt;
  background-size: 2px 2px;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Darstellungsmöglichkeit bei Nutzung des Schiebereglers für Rolladen-/Jalousien-/Markisensteuerung===&lt;br /&gt;
&lt;br /&gt;
[[File:blindsslider.png|200px]] [[File:DarstellungSliderRolladenBunt.png|240px]]&lt;br /&gt;
&lt;br /&gt;
Folgende Anpasssungen sind zu machen:&lt;br /&gt;
&lt;br /&gt;
im file fhem-tablet-ui-user.css (falls das noch nicht verwendet wird, muss es natürlich noch in das html file, das aufgerufen wird, eingetragen werden) müssen zusätzliche Zeilen eingefügt werden. In älteren Versionen von FTUI (vor 2.7) müssen folgende Zeilen eingefügt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* Definition for styles to be used for extension of slider widget for display of blinds, awnings etc. */&lt;br /&gt;
/* normal lines */&lt;br /&gt;
&lt;br /&gt;
.blind .vertical.range-container {&lt;br /&gt;
	width: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.blind&amp;gt; .vertical .range-bar {&lt;br /&gt;
    width: 70%;&lt;br /&gt;
	border-radius: 2px;&lt;br /&gt;
	background-image: url(../blinds.jpg);&lt;br /&gt;
	background-position: center bottom;&lt;br /&gt;
	background-blend-mode: multiply;&lt;br /&gt;
	background-size: cover;&lt;br /&gt;
	background-color: rgb(150,150,150) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.blind&amp;gt; .vertical .range-quantity {&lt;br /&gt;
	border-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.blind&amp;gt; .vertical .range-handle {&lt;br /&gt;
	margin-left: 52% !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.blindview&amp;gt; .vertical .range-quantity {&lt;br /&gt;
	border-radius: 2px;&lt;br /&gt;
	background-image: url(../windowContentSimpleGrey.png);&lt;br /&gt;
	background-repeat: no-repeat;&lt;br /&gt;
	background-position: center bottom;&lt;br /&gt;
	background-size: cover;&lt;br /&gt;
	background-blend-mode: difference;&lt;br /&gt;
	background-color: rgb(64,64,64) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.awning .vertical.range-container {&lt;br /&gt;
	width: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.awning&amp;gt; .vertical .range-bar {&lt;br /&gt;
    width: 70%;&lt;br /&gt;
	border-radius: 2px;&lt;br /&gt;
	background-image: url(../awningContentSimpleGrey.png);&lt;br /&gt;
	background-position: center bottom;&lt;br /&gt;
	background-blend-mode: difference;&lt;br /&gt;
	background-size: 100% 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.awning&amp;gt; .vertical .range-quantity {&lt;br /&gt;
	border-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.awning&amp;gt; .vertical .range-handle {&lt;br /&gt;
	margin-left: 52% !important;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ab FTUI 2.7 müssen folgende Zeilen eingefügt werden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* Definition for styles to be used for extension of slider widget for display of blinds, awnings etc. */&lt;br /&gt;
/* normal lines */&lt;br /&gt;
&lt;br /&gt;
.darker.showdeco &amp;gt; .vertical .range-bar .range-min,&lt;br /&gt;
.darker.showdeco &amp;gt; .vertical .range-bar .range-max {&lt;br /&gt;
	visibility: visible;&lt;br /&gt;
	margin-left: -12px;&lt;br /&gt;
	margin-bottom: 20px;&lt;br /&gt;
	margin-top: 20px;&lt;br /&gt;
	width: 200% !important;&lt;br /&gt;
	text-align: end;&lt;br /&gt;
	color: #8c8c8c;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.showdeco &amp;gt; .vertical .range-bar .range-min,&lt;br /&gt;
.showdeco &amp;gt; .vertical .range-bar .range-max {&lt;br /&gt;
	visibility: visible;&lt;br /&gt;
	margin-left: -12px;&lt;br /&gt;
	margin-bottom: 20px;&lt;br /&gt;
	margin-top: 20px;&lt;br /&gt;
	width: 200% !important;&lt;br /&gt;
	text-align: end;&lt;br /&gt;
	color: #eeeeee;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.blind .vertical.range-container {&lt;br /&gt;
	width: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.blind .vertical .range-bar {&lt;br /&gt;
    width: 70%;&lt;br /&gt;
	border-radius: 2px;&lt;br /&gt;
	background-image: url(../blinds.jpg);&lt;br /&gt;
	background-position: center bottom;&lt;br /&gt;
	background-blend-mode: multiply;&lt;br /&gt;
	background-size: cover;&lt;br /&gt;
	background-color: rgb(150,150,150) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.blind .vertical .range-quantity {&lt;br /&gt;
	border-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.blind .vertical .range-handle {&lt;br /&gt;
	margin-left: 52% !important;&lt;br /&gt;
	z-index: 1&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.blindview .vertical .range-quantity {&lt;br /&gt;
	border-radius: 2px;&lt;br /&gt;
	background-image: url(../windowContentSimpleGrey.png);&lt;br /&gt;
	background-repeat: no-repeat;&lt;br /&gt;
	background-position: center bottom;&lt;br /&gt;
	background-size: cover;&lt;br /&gt;
	background-blend-mode: difference;&lt;br /&gt;
	background-color: rgb(64,64,64) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.awning .vertical.range-container {&lt;br /&gt;
	width: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.awning .vertical .range-bar {&lt;br /&gt;
    width: 70%;&lt;br /&gt;
	border-radius: 2px;&lt;br /&gt;
	background-image: url(../awningContentSimpleGrey.png);&lt;br /&gt;
	background-position: center bottom;&lt;br /&gt;
	background-blend-mode: difference;&lt;br /&gt;
	background-size: 100% 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.awning .vertical .range-quantity {&lt;br /&gt;
	border-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.awning .vertical .range-handle {&lt;br /&gt;
	margin-left: 52% !important;&lt;br /&gt;
	z-index: 1&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die nachfolgenden Grafiken müssen in das Verzeichnis oberhalb des css directories kopiert werden (zumindest die, die im css File auch referenziert werden. Es gibt eine Graustufenvariante und eine farbige, entsprechend müssen die Filenamen im css file ausgetauscht werden also jeweils das &amp;quot;Grey&amp;quot; im Filenamen weglassen wenn man bunte Fenster will. Wer will, kann sich natürlich auch eigene Fenster und Rolladenbildchen basteln, ein Beispiel für den &amp;quot;Fensterausblick&amp;quot; ist auch noch enthalten).&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:windowContentSimple.png&lt;br /&gt;
File:awningContentSimple.png&lt;br /&gt;
File:windowContentSimpleGrey.png&lt;br /&gt;
File:awningContentSimpleGrey.png&lt;br /&gt;
File:windowContentGrey.jpg&lt;br /&gt;
File:windowContent.jpg&lt;br /&gt;
File:blinds.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
im &amp;quot;class&amp;quot; parameter des Sliders müssen folgende Klassen hinzugefügt werden:&lt;br /&gt;
blind (dadurch wird die Darstellung eines verschiebbaren Rollladens bewirkt)&lt;br /&gt;
awning (dadurch wird die Darstellung einer Markise bewirkt)&lt;br /&gt;
blindview (dadurch wird im Hintergrund ein Fenster symbolisiert)&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für die Definition eines Sliders mit Rolladendarstellung und Fenster als Hintergrundbild wäre:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;slider&amp;quot;&lt;br /&gt;
    data-handle-diameter=&amp;quot;15&amp;quot;&lt;br /&gt;
    data-device=&amp;quot;&amp;quot;&lt;br /&gt;
    data-color=&amp;quot;#969696&amp;quot;&lt;br /&gt;
    data-height=&amp;quot;125&amp;quot;&lt;br /&gt;
    data-device=&amp;quot;dg_SZ_Rolladen&amp;quot;&lt;br /&gt;
    class=&amp;quot;blind blindview&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wird in der Klasse &amp;quot;awning&amp;quot; statt &amp;quot;blind&amp;quot; gesetzt, so wird eine Markisendarstellung erzeugt.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Tablet UI|Slider]]&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Maps&amp;diff=29452</id>
		<title>FTUI Widget Maps</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Maps&amp;diff=29452"/>
		<updated>2019-02-08T07:10:17Z</updated>

		<summary type="html">&lt;p&gt;Eki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das [[{{PAGENAME}}|Map Widget]] ist ein Widget zur Darstellung von Karten mit Informationen aus FHEM oder auch anderern Quellen (z.B. GEOJSON Files).&lt;br /&gt;
&lt;br /&gt;
Folgende Dinge werden berücksichtigt:&amp;lt;br&amp;gt;&lt;br /&gt;
FHEM Devices, welche eine Koordinate (longitude/latitude) als Reading/Attribut/Internal haben (z. B. Anwesenheiten auf Basis von ROOMMATE/RESIDENT/GUEST, oder das global Device als Standort von FHEM), werden als Punkt mit anpassbarem Aussehen an der entsprechenden Position auf der Karte dargestellt.&amp;lt;br&amp;gt;&lt;br /&gt;
Darüber hinaus ist es möglich, Fahrwege mit Fahrzeiten auf Basis des FHEM TRAFFIC Moduls als Pfade auf die Karte zu legen. Hierbei können die Routen eingefärbt als Linien dargestellt werden und entsprechend per InfoWindow dann Details (wie z.B. die normale Fahrzeit bzw. die Fahrzeit bei aktuellem Verkehr) dazu dargestellt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Existiert ein Reading &amp;quot;polygon&amp;quot; welches eine Liste von space separierten Koordinatenpaaren (X und Y Koordinaten jedes Paares durch &#039;,&#039; getrennt) als Wert enthält (z.B. mit &amp;quot;setreading &amp;lt;device&amp;gt; polygon 10.2488713,49.773172 10.2626042,49.7711765 10.278397,49.7682939 10.2986531,49.7671851&amp;quot; erzeugbar) so wird eine Linie auf der Karte mit den entsprechenden Koordinatenpunkten gezeichnet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die flexibelste Lösung ist die Verwendung von GEOJSON Files (müssen irgendwo per web erreichbar abgelegt werden). Diese Files können verschiedene geographische Objekte enthalten, die dann auf der Karte dargestellt werden. Das Aussehen und Verhalten der im GEOJSON File enthaltenen Objekte kann über den Parameter data-feature_style beeinflusst werden.&lt;br /&gt;
&lt;br /&gt;
Die Karte kann zusätzlich eine Darstellung der Verkehrslage als zuschaltbaren Layer enthalten (siehe unten).&lt;br /&gt;
&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Datei:2018-03-05_11h55_51.png|thumb|none|Beispiel 1 (mit Google)]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Datei:FTUI_Maps_2.png|thumb|none|Beispiel 2 (mit Google)]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Datei:FTUI_Maps_3.png|thumb|none|Beispiel 3 (mit OSM)]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
==Voraussetzungen==&lt;br /&gt;
Die Darstellung im Widget basiert entweder auf dem Google Maps API oder auf Leaflet und der Nutzung von OpenStreetMap als Kartenbasis. Wenn Google Maps verwendet wird, muss zunächst ein API Key von Google beschafft werden. Wie man diesen beschafft, kann z.B. unter [https://developers.google.com/maps/api-key-best-practices] oder [https://wiki.fhem.de/wiki/TRAFFIC] nachgelesen werden. Dieser Key muss dann im HTML File (am Besten im Header) als meta Tag eingetragen werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;GoogleMapsApiKey&amp;quot; content=&amp;quot;&amp;lt;Key&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird die Leaflet/OSM Variante verwendet (data-map_type=&amp;quot;OSM&amp;quot;), so ist zunächst kein Schlüssel für die Kartendarstellung notwendig. Will man allerdings eine Route oder die Verkehrslage darstellen, so wird ein Map API Key von TomTom benötigt (bekommt man für private Zwecke auch ohne Hinterlegung einer Kreditkarte). Hinweise wie man den besorgt, siehe unter [https://developer.tomtom.com]. Auch dieser Key muss als meta Tag in das HTML File.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;TomTomApiKey&amp;quot; content=&amp;quot;&amp;lt;Key&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus muss in diesem Fall auch noch ein Plugin von TomTom herunter geladen und in das lib/ Verzeichnis abgelegt werden. Dazu das zip File von [https://api.tomtom.com/maps-sdk-js/4.36.2/jssdk-4.36.2-distribution.zip] herunter laden und alle darin enthaltenen Dateien unter einem neuen Verzeichnis lib/tomtom/ ablegen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Attribute==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-type&#039;&#039;&#039;||Type des Widgets muss auf &amp;quot;maps&amp;quot; gesetzt werden||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-device&#039;&#039;&#039;||FHEM-Device, dessen Readings dargestellt werden sollen||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-alias&#039;&#039;&#039;||Legt fest, aus welchem Reading der Name für die Anzeige genommen werden soll||alias||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-latitude&#039;&#039;&#039;||Legt fest, aus welchem Reading die geograpfische Breite genommen werden soll||latitude||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-longitude&#039;&#039;&#039;||Legt fest, aus welchem Reading die geograpfische Länge genommen werden soll||longitude||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-language&#039;&#039;&#039;||Kann &#039;de&#039; oder &#039;en&#039; sein und stellt die Sprache für die Ausgabe in den Info Windows ein||de||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-size&#039;&#039;&#039;||Gibt die Größe des Kartenausschnittes an (als String mit &#039;&amp;lt;Breite&amp;gt;,&amp;lt;Höhe&amp;gt;&#039;), kann auch weggelassen werden, wenn das Device ein Reading GoogleMapsSize besitzt (z. B. TRAFFIC Device), dann wird der Wert aus dem GoogleMapsSize Reading genommen oder, falls das auch nicht vorhanden ist, wird die Größe aus der Ausdehnung der Route(n) ermittelt.||auto||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-center&#039;&#039;&#039;||Gibt das Zentrum der Karte an (als String mit &#039;&amp;lt;Latitude&amp;gt;,&amp;lt;Longitude&amp;gt;&#039;), kann auch weggelassen werden, wenn das Device ein Reading GoogleMapsCenter besitzt (z. B. TRAFFIC Device), dann wird der Wert aus GoogleMapsCenter Reading genommen oder, falls das auch nicht vorhanden ist, wird das Zentrum aus der Ausdehnung der Route(n) ermittelt.||auto||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-zoom&#039;&#039;&#039;||Gibt den Zoomwert der Karte an (als integer Wert, siehe Google Maps API), kann auch weggelassen werden, wenn das Device ein Reading GoogleMapsZoom besitzt (z. B. TRAFFIC Device), dann wird der Wert aus dem GoogleMapsZoom Reading genommen oder, falls das auch nicht vorhanden ist, wird der Zoom Wert aus der Ausdehnung der Route(n) ermittelt.||auto||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-mapgroup&#039;&#039;&#039;||Legt fest, ob jedes Widget in eine eigene Karte zeichnen soll oder ob mehrer Informationen in einer Karte landen. Alle Widgets vom Typ &#039;maps&#039; mit dem gleichen wert für data-mapgroup zeichnen in ein und die selbe Karte||0||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-travel_mode&#039;&#039;&#039;||Gibt an, wie die Route berechnet werden soll. Es gibt die Möglichkeiten &#039;DRIVING&#039;, &#039;WALKING&#039;, &#039;BICYCLING&#039;, &#039;TRANSIT&#039; (Details siehe TRAFFIC Modul von FHEM oder Google Maps API für den &#039;Directions&#039; Service), kann auch weggelassen werden, wenn es sich um ein TRAFFIC Device handelt, dann wird der Wert aus dem trafficMode Reading genommen.||DRIVING||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-traffic&#039;&#039;&#039;||Gibt an, ob die Verkehrslage auf der Karte dargestellt werden soll||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-showdetails&#039;&#039;&#039;||Gibt an ob per Default die Info Windows eingeblendet werden sollen||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-stroke&#039;&#039;&#039;||Gibt an, wie die Fahrstrecken oder Symbole dargestellt werden sollen. Besteht aus maximal 6 Werten (Farbe Hinweg, Breite Hinweg, Durchsichtigkeit Hinweg, Farbe Rückweg, Breite Rückweg, Durchsichtigkeit Rückweg), die Farbe wird per #rrggbb angegeben, die Breite in Pixel und die Durchsichtigkeit als Prozentwert zwischen 0% und 100%, siehe auch Details zum Modul TRAFFIC. Die Symbole zur Route werden in der doppelten angegebenen Breite des Pfades dargestellt||#ffffff,7,50,#ffffff,7,50||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-icon&#039;&#039;&#039;||Hiermit kann ein Icon angegeben werden, welches statt des standardmäßigen Pfeils verwendet werden soll, um die Position zu markieren. Kann eine URL auf eine icon Datei, die relativ zum Verzeichnis www/images/ liegt sein||||&#039;default/HOME_Status.1.png&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-label&#039;&#039;&#039;||Will man statt eines Icons ein FontAwesome/Openautomation/fhemSVG Font-Icon (z.B. &#039;fa-home&#039;, &#039;oa-weather_winter&#039;, &#039;fs-usb_stick&#039;) verwenden, wird das hiermit angegeben (es kann auch icon und Font-Icon zusammen verwendet werden (z.B. ein Kreis als Icon und darin ein Font-Icon.||||fa-home&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-nightmode&#039;&#039;&#039;||legt fest, ob die Karte im Nachtmodus (dunkel) dargestellt werden soll (geht bisher noch nicht mit OSM)||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-style&#039;&#039;&#039;||Möglichkeit zum Setzen eines Styles entsprechend der Map API Options (siehe Dokumentation zu den Map APIs von Google und Leaflet)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-geojson&#039;&#039;&#039;||gibt den Namen eines Files auf dem Server an, in dem Daten zur Darstellung im GEOJSON Format (siehe [www.geojson.org]) abgelegt sind. Die Angabe ist relativ zum Verzeichnis /opt/fhem/ftui/tablet der Standardinstallation.||||&amp;quot;data/firedata.geojson&amp;quot; für das unten genannte Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-feature_style&#039;&#039;&#039;||Legt fest, wie die GEOJSON Daten dargestllt werden bzw. was passiert, wenn man auf einzelne Features klickt bzw. sie mit der Maus überstreicht (Details siehe unten unter &amp;lt;&amp;gt;||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Details zu GEOJSON Files==&lt;br /&gt;
Die Datei muss auf dem Server (FHEM) liegen (also typischerweise im www/tablet Verzeichnis). Ich habe z.B. unter www/tablet ein Unterverzeichnis data erstellt und geben data-geojson=&amp;quot;data/file.geojson&amp;quot; an. In dem geojson file können beliebige Objekte definiert werden, das Format ist unter [www.geojson.org] nachzulesen&lt;br /&gt;
Über den Parameter data-feature_style kann man recht flexibel festlegen, wie die Objekte dargestellt werden sollen. Das Ganze ist ein js Objekt, wird also in &#039;{}&#039; eingeschlossen. Innerhalb des Objektes legen 3 Objekteigenschaften fest, wie die Darstellung aussehen soll.&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft &amp;quot;popup_properties_click&amp;quot; hat als Wert eine Leerzeichen getrennte Liste von Expressions, welche, falls sie auf Properties der Objekte im geojson File zutreffen, dazu führen, dass beim Klick auf die angezeigten Objekte ein Info Window geöffnet wird, welches die entsprechenden geojson Objekteigenschaften anzeigt.&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft &amp;quot;popup_properties_move&amp;quot; macht genau das Gleiche, allerdings sorgen die dort angegebenen Expressions dafür dass die dazu passenden geojson Objekte per Popup bei Überfahren mit der Maus und nicht bei Klick angezeigt werden und beim Verlassen mit der Maus dann auch wieder automatisch verschwinden.&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft &amp;quot;display_styles&amp;quot; legt genau fest, wie die verschiedenen geojson Objekte dargestellt werden sollen. Der Wert dieser Eigenschaft ist wiederum ein Objekt. Als Eigenschaftsname wird ein Verweis auf ein bestimmtes Objekt im geojson File verwendet. Der Verweis kann entweder eine Eigenschaft eines Objekts im geojson File sein oder eine Kombination aus Eigenschaft und Wert (also nicht alle Objekte des gleichen Typs sondern nur die, die eine auch den passenden Wert haben). Dahinter wird dann der zu verwendete Stil als weiteres Objekt angegeben, welches aus einer Menge aus Property:Value pairs besteht, bei dem die Property die Displayeigenschaft (also z.B. Farbe) und der Wert dann den dazugehörigen Wert (also z.B. rot) festlegt. Alles was nicht explizit hier festgelegt wird, wird aus den &amp;quot;globalen&amp;quot; Einstellungen (z.B. data-stroke) übernommen. Die folgende Definition generiert, wenn man das Beispielfile [[https://forum.fhem.de/index.php?action=dlattach;topic=78379.0;attach=97648|Beispiel: firedata.geojson]] als GEOJSON abspeichert und dann in data-geojson den Speicherort angibt, die darunter dargestellte Karte.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
data-feature_style=&#039;{&lt;br /&gt;
	&amp;quot;popup_properties_click&amp;quot;:&amp;quot;name network operator fire.*&amp;quot;,&lt;br /&gt;
	&amp;quot;popup_properties_move&amp;quot;:&amp;quot;fire.*\\:diameter&amp;quot;,&lt;br /&gt;
	&amp;quot;display_styles&amp;quot;:{&lt;br /&gt;
		&amp;quot;emergency.fire_hydrant&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;fa-fire-extinguisher&amp;quot;,&amp;quot;strokeColor&amp;quot;:&amp;quot;red&amp;quot;},&lt;br /&gt;
		&amp;quot;public_transport.station&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;fa-train&amp;quot;,&amp;quot;strokeColor&amp;quot;:&amp;quot;black&amp;quot;}}&lt;br /&gt;
}&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2018-03-05_11h55_51.png|thumb|none|Mit obigem Beispielfile und gezeigtem data-feature_style erstellte Karte]]&lt;br /&gt;
&lt;br /&gt;
Noch etwas zusätzliches: Eine gute Möglichkeit sich geojson Files zu holen (von der auch das Beispiel stammt), ist die webseite [http://overpass-turbo.eu/]. Dort kann man sich für beliebige Gebiete per Wizard eine Abfrage basteln, die dann bestimmte Infos aus Open Street Maps herausfiltert und als geojson exportieren kann.&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Tablet UI|Maps]]&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Maps&amp;diff=29435</id>
		<title>FTUI Widget Maps</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Maps&amp;diff=29435"/>
		<updated>2019-02-07T11:04:13Z</updated>

		<summary type="html">&lt;p&gt;Eki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das [[{{PAGENAME}}|Map Widget]] ist ein Widget zur Darstellung von Karten mit Informationen aus FHEM oder auch anderern Quellen (z.B. GEOJSON Files).&lt;br /&gt;
&lt;br /&gt;
Folgende Dinge werden berücksichtigt:&amp;lt;br&amp;gt;&lt;br /&gt;
FHEM Devices, welche eine Koordinate (longitude/latitude) als Reading/Attribut/Internal haben (z. B. Anwesenheiten auf Basis von ROOMMATE/RESIDENT/GUEST, oder das global Device als Standort von FHEM), werden als Punkt mit anpassbarem Aussehen an der entsprechenden Position auf der Karte dargestellt.&amp;lt;br&amp;gt;&lt;br /&gt;
Darüber hinaus ist es möglich, Fahrwege mit Fahrzeiten auf Basis des FHEM TRAFFIC Moduls als Pfade auf die Karte zu legen. Hierbei können die Routen eingefärbt als Linien dargestellt werden und entsprechend per InfoWindow dann Details (wie z.B. die normale Fahrzeit bzw. die Fahrzeit bei aktuellem Verkehr) dazu dargestellt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Existiert ein Reading &amp;quot;polygon&amp;quot; welches eine Liste von space separierten Koordinatenpaaren (X und Y Koordinaten jedes Paares durch &#039;,&#039; getrennt) als Wert enthält (z.B. mit &amp;quot;setreading &amp;lt;device&amp;gt; polygon 10.2488713,49.773172 10.2626042,49.7711765 10.278397,49.7682939 10.2986531,49.7671851&amp;quot; erzeugbar) so wird eine Linie auf der Karte mit den entsprechenden Koordinatenpunkten gezeichnet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die flexibelste Lösung ist die Verwendung von GEOJSON Files (müssen irgendwo per web erreichbar abgelegt werden). Diese Files können verschiedene geographische Objekte enthalten, die dann auf der Karte dargestellt werden. Das Aussehen und Verhalten der im GEOJSON File enthaltenen Objekte kann über den Parameter data-feature_style beeinflusst werden.&lt;br /&gt;
&lt;br /&gt;
Die Karte kann zusätzlich eine Darstellung der Verkehrslage als zuschaltbaren Layer enthalten (siehe unten).&lt;br /&gt;
&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Datei:2018-03-05_11h55_51.png|thumb|none|Beispiel 1 (mit Google)]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Datei:FTUI_Maps_2.png|thumb|none|Beispiel 2 (mit Google)]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Datei:FTUI_Maps_3.png|thumb|none|Beispiel 3 (mit OSM)]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
==Voraussetzungen==&lt;br /&gt;
Die Darstellung im Widget basiert entweder auf dem Google Maps API oder auf Leaflet und der Nutzung von OpenStreetMap als Kartenbasis. Wenn Google Maps verwendet wird, muss zunächst ein API Key von Google beschafft werden. Wie man diesen beschafft, kann z.B. unter [https://developers.google.com/maps/api-key-best-practices] oder [https://wiki.fhem.de/wiki/TRAFFIC] nachgelesen werden. Dieser Key muss dann im HTML File (am Besten im Header) als meta Tag eingetragen werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;GoogleMapsApiKey&amp;quot; content=&amp;quot;&amp;lt;Key&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird die Leaflet/OSM Variante verwendet (data-map_type=&amp;quot;OSM&amp;quot;), so ist zunächst kein Schlüssel für die Kartendarstellung notwendig. Will man allerdings eine Route oder die Verkehrslage darstellen, so wird ein Map API Key von TomTom benötigt (bekommt man für private Zwecke auch ohne Hinterlegung einer Kreditkarte). Hinweise wie man den besorgt, siehe unter [https://developer.tomtom.com]. Auch dieser Key muss als meta Tag in das HTML File.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;TomTomApiKey&amp;quot; content=&amp;quot;&amp;lt;Key&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus muss in diesem Fall auch noch ein Plugin von TomTom herunter geladen und in das lib/ Verzeichnis abgelegt werden. Dazu das zip File von [https://api.tomtom.com/maps-sdk-js/4.36.2/jssdk-4.36.2-distribution.zip] herunter laden und alle darin enthaltenen Dateien unter einem neuen Verzeichnis lib/tomtom/ ablegen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Attribute==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-type&#039;&#039;&#039;||Type des Widgets muss auf &amp;quot;maps&amp;quot; gesetzt werden||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-device&#039;&#039;&#039;||FHEM-Device, dessen Readings dargestellt werden sollen||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-alias&#039;&#039;&#039;||Legt fest, aus welchem Reading der Name für die Anzeige genommen werden soll||alias||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-latitude&#039;&#039;&#039;||Legt fest, aus welchem Reading die geograpfische Breite genommen werden soll||latitude||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-longitude&#039;&#039;&#039;||Legt fest, aus welchem Reading die geograpfische Länge genommen werden soll||longitude||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-language&#039;&#039;&#039;||Kann &#039;de&#039; oder &#039;en&#039; sein und stellt die Sprache für die Ausgabe in den Info Windows ein||de||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-size&#039;&#039;&#039;||Gibt die Größe des Kartenausschnittes an (als String mit &#039;&amp;lt;Breite&amp;gt;,&amp;lt;Höhe&amp;gt;&#039;), kann auch weggelassen werden, wenn das Device ein Reading GoogleMapsSize besitzt (z. B. TRAFFIC Device), dann wird der Wert aus dem GoogleMapsSize Reading genommen oder, falls das auch nicht vorhanden ist, wird die Größe aus der Ausdehnung der Route(n) ermittelt.||auto||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-center&#039;&#039;&#039;||Gibt das Zentrum der Karte an (als String mit &#039;&amp;lt;Latitude&amp;gt;,&amp;lt;Longitude&amp;gt;&#039;), kann auch weggelassen werden, wenn das Device ein Reading GoogleMapsSize besitzt (z. B. TRAFFIC Device), dann wird der Wert aus GoogleMapsCenter Reading genommen oder, falls das auch nicht vorhanden ist, wird das Zentrum aus der Ausdehnung der Route(n) ermittelt.||auto||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-zoom&#039;&#039;&#039;||Gibt den Zoomwert der Karte an (als integer Wert, siehe Google Maps API), kann auch weggelassen werden, wenn das Device ein Reading GoogleMapsSize besitzt (z. B. TRAFFIC Device), dann wird der Wert aus dem GoogleMapsZoom Reading genommen oder, falls das auch nicht vorhanden ist, wird der Zoom Wert aus der Ausdehnung der Route(n) ermittelt.||auto||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-mapgroup&#039;&#039;&#039;||Legt fest, ob jedes Widget in eine eigene Karte zeichnen soll oder ob mehrer Informationen in einer Karte landen. Alle Widgets vom Typ &#039;maps&#039; mit dem gleichen wert für data-mapgroup zeichnen in ein und die selbe Karte||0||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-travel_mode&#039;&#039;&#039;||Gibt an, wie die Route berechnet werden soll. Es gibt die Möglichkeiten &#039;DRIVING&#039;, &#039;WALKING&#039;, &#039;BICYCLING&#039;, &#039;TRANSIT&#039; (Details siehe TRAFFIC Modul von FHEM oder Google Maps API für den &#039;Directions&#039; Service), kann auch weggelassen werden, wenn es sich um ein TRAFFIC Device handelt, dann wird der Wert aus dem trafficMode Reading genommen.||DRIVING||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-traffic&#039;&#039;&#039;||Gibt an, ob die Verkehrslage auf der Karte dargestellt werden soll||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-showdetails&#039;&#039;&#039;||Gibt an ob per Default die Info Windows eingeblendet werden sollen||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-stroke&#039;&#039;&#039;||Gibt an, wie die Fahrstrecken oder Symbole dargestellt werden sollen. Besteht aus maximal 6 Werten (Farbe Hinweg, Breite Hinweg, Durchsichtigkeit Hinweg, Farbe Rückweg, Breite Rückweg, Durchsichtigkeit Rückweg), die Farbe wird per #rrggbb angegeben, die Breite in Pixel und die Durchsichtigkeit als Prozentwert zwischen 0% und 100%, siehe auch Details zum Modul TRAFFIC. Die Symbole zur Route werden in der doppelten angegebenen Breite des Pfades dargestellt||#ffffff,7,50,#ffffff,7,50||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-icon&#039;&#039;&#039;||Hiermit kann ein Icon angegeben werden, welches statt des standardmäßigen Pfeils verwendet werden soll, um die Position zu markieren. Kann eine URL auf eine icon Datei, die relativ zum Verzeichnis www/images/ liegt sein||||&#039;default/HOME_Status.1.png&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-label&#039;&#039;&#039;||Will man statt eines Icons ein FontAwesome/Openautomation/fhemSVG Font-Icon (z.B. &#039;fa-home&#039;, &#039;oa-weather_winter&#039;, &#039;fs-usb_stick&#039;) verwenden, wird das hiermit angegeben (es kann auch icon und Font-Icon zusammen verwendet werden (z.B. ein Kreis als Icon und darin ein Font-Icon.||||fa-home&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-nightmode&#039;&#039;&#039;||legt fest, ob die Karte im Nachtmodus (dunkel) dargestellt werden soll (geht bisher noch nicht mit OSM)||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-style&#039;&#039;&#039;||Möglichkeit zum Setzen eines Styles entsprechend der Map API Options (siehe Dokumentation zu den Map APIs von Google und Leaflet)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-geojson&#039;&#039;&#039;||gibt den Namen eines Files auf dem Server an, in dem Daten zur Darstellung im GEOJSON Format (siehe [www.geojson.org]) abgelegt sind. Die Angabe ist relativ zum Verzeichnis /opt/fhem/ftui/tablet der Standardinstallation.||||&amp;quot;data/firedata.geojson&amp;quot; für das unten genannte Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-feature_style&#039;&#039;&#039;||Legt fest, wie die GEOJSON Daten dargestllt werden bzw. was passiert, wenn man auf einzelne Features klickt bzw. sie mit der Maus überstreicht (Details siehe unten unter &amp;lt;&amp;gt;||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Details zu GEOJSON Files==&lt;br /&gt;
Die Datei muss auf dem Server (FHEM) liegen (also typischerweise im www/tablet Verzeichnis). Ich habe z.B. unter www/tablet ein Unterverzeichnis data erstellt und geben data-geojson=&amp;quot;data/file.geojson&amp;quot; an. In dem geojson file können beliebige Objekte definiert werden, das Format ist unter [www.geojson.org] nachzulesen&lt;br /&gt;
Über den Parameter data-feature_style kann man recht flexibel festlegen, wie die Objekte dargestellt werden sollen. Das Ganze ist ein js Objekt, wird also in &#039;{}&#039; eingeschlossen. Innerhalb des Objektes legen 3 Objekteigenschaften fest, wie die Darstellung aussehen soll.&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft &amp;quot;popup_properties_click&amp;quot; hat als Wert eine Leerzeichen getrennte Liste von Expressions, welche, falls sie auf Properties der Objekte im geojson File zutreffen, dazu führen, dass beim Klick auf die angezeigten Objekte ein Info Window geöffnet wird, welches die entsprechenden geojson Objekteigenschaften anzeigt.&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft &amp;quot;popup_properties_move&amp;quot; macht genau das Gleiche, allerdings sorgen die dort angegebenen Expressions dafür dass die dazu passenden geojson Objekte per Popup bei Überfahren mit der Maus und nicht bei Klick angezeigt werden und beim Verlassen mit der Maus dann auch wieder automatisch verschwinden.&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft &amp;quot;display_styles&amp;quot; legt genau fest, wie die verschiedenen geojson Objekte dargestellt werden sollen. Der Wert dieser Eigenschaft ist wiederum ein Objekt. Als Eigenschaftsname wird ein Verweis auf ein bestimmtes Objekt im geojson File verwendet. Der Verweis kann entweder eine Eigenschaft eines Objekts im geojson File sein oder eine Kombination aus Eigenschaft und Wert (also nicht alle Objekte des gleichen Typs sondern nur die, die eine auch den passenden Wert haben). Dahinter wird dann der zu verwendete Stil als weiteres Objekt angegeben, welches aus einer Menge aus Property:Value pairs besteht, bei dem die Property die Displayeigenschaft (also z.B. Farbe) und der Wert dann den dazugehörigen Wert (also z.B. rot) festlegt. Alles was nicht explizit hier festgelegt wird, wird aus den &amp;quot;globalen&amp;quot; Einstellungen (z.B. data-stroke) übernommen. Die folgende Definition generiert, wenn man das Beispielfile [[https://forum.fhem.de/index.php?action=dlattach;topic=78379.0;attach=97648|Beispiel: firedata.geojson]] als GEOJSON abspeichert und dann in data-geojson den Speicherort angibt, die darunter dargestellte Karte.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
data-feature_style=&#039;{&lt;br /&gt;
	&amp;quot;popup_properties_click&amp;quot;:&amp;quot;name network operator fire.*&amp;quot;,&lt;br /&gt;
	&amp;quot;popup_properties_move&amp;quot;:&amp;quot;fire.*\\:diameter&amp;quot;,&lt;br /&gt;
	&amp;quot;display_styles&amp;quot;:{&lt;br /&gt;
		&amp;quot;emergency.fire_hydrant&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;fa-fire-extinguisher&amp;quot;,&amp;quot;strokeColor&amp;quot;:&amp;quot;red&amp;quot;},&lt;br /&gt;
		&amp;quot;public_transport.station&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;fa-train&amp;quot;,&amp;quot;strokeColor&amp;quot;:&amp;quot;black&amp;quot;}}&lt;br /&gt;
}&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2018-03-05_11h55_51.png|thumb|none|Mit obigem Beispielfile und gezeigtem data-feature_style erstellte Karte]]&lt;br /&gt;
&lt;br /&gt;
Noch etwas zusätzliches: Eine gute Möglichkeit sich geojson Files zu holen (von der auch das Beispiel stammt), ist die webseite [http://overpass-turbo.eu/]. Dort kann man sich für beliebige Gebiete per Wizard eine Abfrage basteln, die dann bestimmte Infos aus Open Street Maps herausfiltert und als geojson exportieren kann.&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Tablet UI|Maps]]&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Chart&amp;diff=28665</id>
		<title>FTUI Widget Chart</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Chart&amp;diff=28665"/>
		<updated>2018-12-11T07:00:43Z</updated>

		<summary type="html">&lt;p&gt;Eki: Ergänzung bei der Zeitangabe auf X-Achse um Tage/Wochen/Monate/Jahre&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das [[{{PAGENAME}}|Chart Widget]] ist ein Widget für [[FHEM Tablet UI]], mit dem sich verschiedenste Diagramme darstellen lassen. Die Aneinanderreihung mehrerer Werte eines Device-Readings zu einem zeitlichen Verlauf wird dabei als Graph bezeichnet.&lt;br /&gt;
&lt;br /&gt;
Es können beliebige Werte dargestellt und entsprechend der Sinnhaftigkeit, oder persönlichem Geschmack, formatiert werden. Farbe und Form der Linien sind je Graph einstellbar, auch wenn mehrere gleichzeitig in einem Diagramm angezeigt werden.&lt;br /&gt;
&lt;br /&gt;
Jedes Diagramm kann zwei Y-Achsen besitzen. Die primäre Y-Achse (primary) wird auf der linken Seite angezeigt, die sekundäre Y-Achse (secondary) auf der rechten Seite. Beide Achsen können unterschiedlich formatiert werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Chart_tabletUI.png&lt;br /&gt;
Datei:FTUI Widget Chart Stacked.png&lt;br /&gt;
Datei:FTUI Widget Chart-fc-Proplanta.png&lt;br /&gt;
Datei:Wetterchart2.png&lt;br /&gt;
Datei:PieChart.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Attribute==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:150px&amp;quot;|Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-device&#039;&#039;&#039;||Name des FHEM-Device, das die Aktualisierung des Charts triggert||||data-device=&amp;quot;WohnzimmerHeizung&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-get&#039;&#039;&#039;||Reading, das das Update des Diagramms triggert||&#039;STATE&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-logdevice&#039;&#039;&#039;||Name des Log-Device, das dargestellt werden soll, oder ein Array, um mehrere Werte in einem Diagramm darzustellen||||data-logdevice=&amp;quot;FileLog_WohnzimmerHeizung&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-logfile&#039;&#039;&#039;|| Name des Log-Files, aus dem die Daten entnommen werden sollen (oder Array)||&#039;-&#039; = aktuelle Datei||data-logfile=&amp;quot;WohnzimmerHeizung-2015.log&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-columnspec&#039;&#039;&#039;||Ermittelt den Wert aus dem Log-File, der angezeigt werden soll (oder Array)||||data-columnspec=&amp;quot;4:meas.*&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-style&#039;&#039;&#039;||Stil, wie die Graph-Linien dargestellt werden sollen (z.B. &#039;SVGplot l0&#039; oder &#039;ftui l0dash&#039;), oder ein Array, wenn mehrere Linien unterschiedlich dargestellt werden sollen (siehe [[#Aussehen_der_Linien|Hinweise]])||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-ptype&#039;&#039;&#039;||Form, wie die Graphen dargestellt werden sollen (z.B. &#039;lines&#039;, &#039;cubic&#039; oder &#039;fa-cog&#039;), oder ein Array (siehe [[#Form_der_Linien|Hinweise]])||&#039;lines&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-uaxis&#039;&#039;&#039;||Name der Achse, die verwendet werden soll (&#039;primary&#039; = links, oder &#039;secondary&#039; = rechts), oder ein Array||&#039;primary&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-legend&#039;&#039;&#039;||Bezeichnung des Graphen (wird in Legende und am Cursor angezeigt), oder ein Array||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-minvalue&#039;&#039;&#039;||Minimaler Wert, der auf der linken Y-Achse (&#039;primary&#039;) angezeigt werden soll. &#039;auto&#039; = automatische Berechnung||&#039;10&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-maxvalue&#039;&#039;&#039;||Maximaler Wert, der auf der linken Y-Achse (&#039;primary&#039;) angezeigt werden soll. &#039;auto&#039; = automatische Berechnung||&#039;30&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-minvalue_sec&#039;&#039;&#039;||Minimaler Wert, der auf der rechten Y-Achse (&#039;secondary&#039;) angezeigt werden soll. &#039;auto&#039; = automatische Berechnung||&#039;auto&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-maxvalue_sec&#039;&#039;&#039;||Maximaler Wert, der auf der rechten Y-Achse (&#039;secondary&#039;) angezeigt werden soll. &#039;auto&#039; = automatische Berechnung||&#039;auto&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-xticks&#039;&#039;&#039;||Abstand zwischen den vertikalen Hilfslinien (bezogen auf die X-Achse) in Minuten. &#039;auto&#039; = automatische Berechnung||&#039;auto&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yticks&#039;&#039;&#039;||Abstand zwischen den horizontalen Hilfslinien (bezogen auf die linke Y-Achse). Kann auch ein Array mit Werte-Paaren enthalten, um die Linien mit Text zu beschriften.||&#039;auto&#039;||data-yticks=&#039;[[0,&amp;quot;open&amp;quot;],[1,&amp;quot;closed&amp;quot;]]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yticks_format&#039;&#039;&#039;||Dient zur Formatierung der Ticks der Y-Achse. Die Formatierung geschieht über Platzhalter, Trenner und einen beliebigen durch &#039; &#039; getrennten Text. Als Platzhalter dient ein oder mehrere &#039;#&#039;, als Trenner können &#039;.&#039;, &#039;,&#039; und &#039;:&#039; verwendet werden. Ist ein Trenner enthalten (z.B. &#039;#.##&#039;) dann bedeutet das in dem Beispiel, dass der Ytick mit 2 Nachkommastellen versehen wird und vorne Platz für eine Stelle vor dem Komma vorgehalten wird (führende Nullen werden nicht dargestellt, aber de Platz wird reserviert so dass das ganze rechtsbündig immer passt). Ist kein Trenner vorhanden, dann wird der Ytick auf die Summe der Platzhalter mit einer festen Gesamtbreite gesetzt (#### würde also bedeuten, dass immer 4 Stellen (ohne Trenner) verwendet werden. aus 0.4 würde 0.400 aus 10.437 würde 10.44). Als Trenner kann man z.B. für Zeiten auch einen &#039;:&#039; verwenden und dadurch auch so etwas wie &amp;quot;12:00 Uhr&amp;quot; realisieren (in dem Beispiel wäre data-yticks_format=&amp;quot;##:## Uhr&amp;quot; und kein data-yunit oder data-yticks=&amp;quot;##:##&amp;quot; und data-yunit=&amp;quot;Uhr&amp;quot;).||||data-yticks_format=&amp;quot;#.##&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yticks_sec&#039;&#039;&#039;||Abstand zwischen den horizontalen Hilfslinien (bezogen auf die rechte Y-Achse). Kann auch ein Array mit Werte-Paaren enthalten, um die Linien mit Text zu beschriften.||&#039;auto&#039;||data-yticks=&#039;[[0,&amp;quot;open&amp;quot;],[1,&amp;quot;closed&amp;quot;]]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yticks_format_sec&#039;&#039;&#039;||Dient zur Formatierung der Ticks der Y-Achse. Die Formatierung geschieht über Platzhalter, Trenner und einen beliebigen durch &#039; &#039; getrennten Text. Als Platzhalter dient ein oder mehrere &#039;#&#039;, als Trenner können &#039;.&#039;, &#039;,&#039; und &#039;:&#039; verwendet werden. Ist ein Trenner enthalten (z.B. &#039;#.##&#039;) dann bedeutet das in dem Beispiel, dass der Ytick mit 2 Nachkommastellen versehen wird und vorne Platz für eine Stelle vor dem Komma vorgehalten wird (führende Nullen werden nicht dargestellt, aber de Platz wird reserviert so dass das ganze rechtsbündig immer passt). Ist kein Trenner vorhanden, dann wird der Ytick auf die Summe der Platzhalter mit einer festen Gesamtbreite gesetzt (#### würde also bedeuten, dass immer 4 Stellen (ohne Trenner) verwendet werden. aus 0.4 würde 0.400 aus 10.437 würde 10.44). Als Trenner kann man z.B. für Zeiten auch einen &#039;:&#039; verwenden und dadurch auch so etwas wie &amp;quot;12:00 Uhr&amp;quot; realisieren (in dem Beispiel wäre data-yticks_format=&amp;quot;##:## Uhr&amp;quot; und kein data-yunit oder data-yticks=&amp;quot;##:##&amp;quot; und data-yunit=&amp;quot;Uhr&amp;quot;).||||data-yticks_format_sec=&amp;quot;#.##&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yticks_prio&#039;&#039;&#039;||Legt fest, ob die horizontalen Hilfslinien der linken (primary) oder der rechten (secondary) Y-Achse zugeordnet werden sollen||||data-yticks_prio=&#039;secondary&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-ytype&#039;&#039;&#039;||Legt fest, ob die primäre y Achse logarithmisch sein soll (wert &amp;quot;log&amp;quot;)||||data-ytype=&amp;quot;log&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-ytype_sec&#039;&#039;&#039;||Legt fest, ob die sekundäre y Achse logarithmisch sein soll (wert &amp;quot;log&amp;quot;)||||data-ytype_sec=&amp;quot;log&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-y_margin&#039;&#039;&#039;|||Gibt die Möglichkeit, Abstände zwischen den Graphen und dem oberen Rand des Plots zu definieren (Einheit Pixel). Falls der Wert skalar ist, werden oben und unten die gleichen Abstände eingehalten. Falls ein 2D Array angegeben wird, können die Werte unten (erster Wert im Array) und oben (zweiter Wert im Array) getrennt festgelegt werden||&amp;quot;0&amp;quot;|||data-y_margin=&#039;[&amp;quot;10&amp;quot;,&amp;quot;20&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-y_margin_sec&#039;&#039;&#039;|||Gibt die Möglichkeit, Abstände zwischen den Graphen und dem oberen Rand des Plots zu definieren (Einheit Pixel). Falls der Wert skalar ist, werden oben und unten die gleichen Abstände eingehalten. Falls ein 2D Array angegeben wird, können die Werte unten (erster Wert im Array) und oben (zweiter Wert im Array) getrennt festgelegt werden||&amp;quot;0&amp;quot;|||data-y_margin=&#039;[&amp;quot;10&amp;quot;,&amp;quot;20&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-daysago_start&#039;&#039;&#039;||Anzahl der vergangenen Tage, wo das Diagramm beginnen soll. &#039;0&#039; = Beginn heute 0:00 Uhr. (siehe [[#Zeitstrahl_.2F_Start_.26_Ende_auf_der_X-Achse|Hinweise]])||&#039;0&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-daysago_end&#039;&#039;&#039;||Anzahl der vergangenen Tage, wo das Diagramm enden soll. &#039;-1&#039; = Ende heute 24:00 Uhr. (siehe [[#Zeitstrahl_.2F_Start_.26_Ende_auf_der_X-Achse|Hinweise]])||&#039;-1&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-xticks_round&#039;&#039;&#039;||Wenn vorhanden und entweder &#039;h&#039;, &#039;d&#039;, &#039;w&#039;, wird auf Stunde, Tag oder Woche bei den xticks gerundet (also die Tickmarks und die Gridlines bei den entsprechend gerundeten Zeiten gesetzt). Es kann auch &#039;auto&#039; angegeben werden, um eine autmoatische Rundung durchzuführen||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-nofulldays&#039;&#039;&#039;||Aktiviert/deaktiviert die Rundung der X-Achse auf ganze Tage. Binärwert (&#039;true&#039; oder &#039;false&#039;)||&#039;false&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-timeformat&#039;&#039;&#039;||Zeitformat für die Anzeige an der X-Achse (siehe [[#Zeitformat_der_X-Achse|Hinweise]])||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-timeranges&#039;&#039;&#039;||Hierdurch können vordefinierte Zeiträume für die X-Achse festgelegt werden, die dann durch eine pulldown menu (neuer Button oben neben dem &amp;quot;-&amp;quot; Button) direkt ausgewählt werden können. Der Parameter ist ein Array aus Array Einträgen, welche jeweils [&amp;lt;Name&amp;gt;,&amp;lt;daysago_start&amp;gt;,&amp;lt;daysago_end&amp;gt;] enthalten)||&lt;br /&gt;
||data-timeranges=&#039;[&amp;lt;br&amp;gt;&lt;br /&gt;
[&amp;quot;Actual Year&amp;quot;,&amp;quot;0Y&amp;quot;,&amp;quot;-1Y&amp;quot;],&amp;lt;br&amp;gt;&lt;br /&gt;
[&amp;quot;Last Year&amp;quot;,&amp;quot;1Y&amp;quot;,&amp;quot;0Y&amp;quot;],&amp;lt;br&amp;gt;&lt;br /&gt;
[&amp;quot;Actual Month&amp;quot;,&amp;quot;0M&amp;quot;,&amp;quot;-1M&amp;quot;],&amp;lt;br&amp;gt;&lt;br /&gt;
[&amp;quot;Last Month&amp;quot;,&amp;quot;1M&amp;quot;,&amp;quot;0M&amp;quot;],&amp;lt;br&amp;gt;&lt;br /&gt;
[&amp;quot;Actual Week&amp;quot;,&amp;quot;0W&amp;quot;,&amp;quot;-1W&amp;quot;],&amp;lt;br&amp;gt;&lt;br /&gt;
[&amp;quot;Last Week&amp;quot;,&amp;quot;1W&amp;quot;,&amp;quot;0W&amp;quot;],&amp;lt;br&amp;gt;&lt;br /&gt;
[&amp;quot;Today&amp;quot;,&amp;quot;0D&amp;quot;,&amp;quot;-1D&amp;quot;],&amp;lt;br&amp;gt;&lt;br /&gt;
[&amp;quot;Yesterday&amp;quot;,&amp;quot;1D&amp;quot;,&amp;quot;0D&amp;quot;]&amp;lt;br&amp;gt;&lt;br /&gt;
]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-ytext&#039;&#039;&#039;||Text, der neben der linken Y-Achse angezeigt wird||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-ytext_sec&#039;&#039;&#039;||Text, der neben der rechten Y-Achse angezeigt wird||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yunit&#039;&#039;&#039;||Einheit, die an der linken Y-Achse angezeigt wird||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yunit_sec&#039;&#039;&#039;||Einheit, die an der rechten Y-Achse angezeigt wird||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-show_both_axes&#039;&#039;&#039;||Legt fest ob beide Y-Achsen Linien gezeichnet werden sollen||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-crosshair&#039;&#039;&#039;||Aktiviert/deaktiviert den Fadenkreuz-Cursor. Binärwert (&#039;true&#039; oder &#039;false&#039;)||&#039;false&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-cursorgroup&#039;&#039;&#039;||Zahl zur Gruppierung der Werte am Fadenkreuz-Cursor ([[#Fadenkreuz-Cursor|Hinweise]])||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-scrollgroup&#039;&#039;&#039;||Zahl zur Gruppierung der Graphen beim Bewegen und Zoomen. Alle Linien mit der selben Zahl werden miteinander gekoppelt und bewegen sich gemeinsam.||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-showlegend&#039;&#039;&#039;||Aktiviert/deaktiviert die Anzeige der Legene. Binärwert (&#039;true&#039; oder &#039;false&#039;)||&#039;false&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-legendpos&#039;&#039;&#039;||Array von zwei Werten, die die horizontale und vertikale Position der Legende festlegen ([[#Legende|Hinweise]])||&#039;[&amp;quot;top&amp;quot;,&amp;quot;right&amp;quot;]&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-legend_horiz&#039;&#039;&#039;||legt fest, dass die Legendeneinträge horizontal angeordnet sind (anstatt vertikal wie im default Fall)||false||data-legend_horiz=&amp;quot;true&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-width&#039;&#039;&#039;||Breite des Diagramms (in % oder px)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-height&#039;&#039;&#039;||Höhe des Diagramms (in % oder px)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-graphsshown&#039;&#039;&#039;||Aktiviert/deaktiviert die initiale Anzeige von Graphen. Binärwert (&#039;true&#039; oder &#039;false&#039;). Array, wenn mehrere Linien angezeigt werden sollen.||||data-graphsshown=&#039;[true,false,true]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-ddd&#039;&#039;&#039;||Einstellung für die 3D-Drehung ([[#3-dimensionale_Drehung|Hinweise]])||||data-ddd=&#039;[&amp;quot;40&amp;quot;,&amp;quot;60&amp;quot;,&amp;quot;0&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-dddspace&#039;&#039;&#039;||Abstand zwischen zwei Graphen, wenn die 3D-Anzeige aktiviert wurde (px)||&#039;15&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-dddwidth&#039;&#039;&#039;||Breite, bzw. Tiefe der Graphen, wenn diese 3-dimensional angezeigt werden (px)||&#039;10&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-title&#039;&#039;&#039;||Titel, der über dem Diagramm angezeigt werden soll. Der Inhalt kann auch dynamisch erzeugt werden ([[#Diagrammtitel|Hinweise]])||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-title_class&#039;&#039;&#039;||Klassenname für die Formatierung des Titels. Die Eigenschaften müssen dann entsprechend in einem CSS File angegeben werden (z.B. in fhem-tablet-ui-user.css)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-prefetch&#039;&#039;&#039;||Legt fest, ob zusätzliche Daten rechts und links des Plots im Hintergrund vom Server geholt werden sollen||false||data-prefetch=&amp;quot;true&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
Einige Parameter (style, maxvalue, minvalue, maxvalue_sec, minvalue_sec) können auch aus Readings dynamisch gesetzt werden wenn &amp;quot;&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;&amp;quot; als Parameter gesetzt wird. Damit kann man z.B. in FHEM über notify etc. die Linientypen dynamisch anpassen (z.B. wenn der Wert eines Devices in einem bestimmten Bereich liegt, ändert sich die Farbe des Graphen).&lt;br /&gt;
&lt;br /&gt;
==CSS Klassen==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Klasse!!Beschreibung&lt;br /&gt;
{{FTUI Klasse|fullsize}}{{FTUI Klasse|noticks}}{{FTUI Klasse|nobuttons}}{{FTUI Klasse|small}}{{FTUI Klasse|normal}}{{FTUI Klasse|big}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Folgende Widget-spezifsche Klassen können zusätzlich in einer eigenen CSS-Datei definiert werden:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Klasse&lt;br /&gt;
!Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;chart-background&#039;&#039;&#039;||Hintergrundfarbe des Diagramms&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;buttons&#039;&#039;&#039;||Größe und Farbe der Buttons&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;text.axes&#039;&#039;&#039;||Generelle Schriftart und Farbe der Achsen&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;gridlines&#039;&#039;&#039;||Generelle Farbe und Größe der Gitternetzlinien&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;xaxis&#039;&#039;&#039;||Schriftart, Größe und Farbe der X-Achse&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;yaxis&#039;&#039;&#039;||Schriftart, Größe und Farbe der Y-Achse&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;xticks&#039;&#039;&#039;||Schriftart, Größe und Farbe der X-Achse (Zwischenlinien)&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;yticks&#039;&#039;&#039;||Schriftart, Größe und Farbe der Y-Achse (Zwischenlinien)&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;crosshair&#039;&#039;&#039;||Schriftart, Größe und Vordergrund/Hintergrundfarbe der Momentanwerte am Fadenkreuzcursor&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;caption&#039;&#039;&#039;||Schriftart, Größe und Farbe der Text-Buttons für Legende und Cursor&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;legend&#039;&#039;&#039;||Schriftart, Größe und Farbe der Legende&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Standardwerte sind in der Datei &amp;lt;code&amp;gt;css/ftui_chart.css&amp;lt;/code&amp;gt; zu finden.&lt;br /&gt;
&lt;br /&gt;
==Datenquellen==&lt;br /&gt;
Beim Chart-Widget können die gleichen Datenquellen genutzt werden, die auch für SVG-Plots verwendet werden können:&lt;br /&gt;
# [[FileLog]]: Verlaufsdaten einer Textdatei entnehmen&lt;br /&gt;
# [[DbLog]]: Verlaufsdaten einer Datenbank entnehmen&lt;br /&gt;
# [[LogProxy]]: Daten dynamisch berechnet&lt;br /&gt;
&lt;br /&gt;
===FileLog===&lt;br /&gt;
Um [[FileLog]] zu nutzen, wird als &#039;&#039;&#039;data-logdevice&#039;&#039;&#039; das FHEM-Device für das FileLog angegeben. In der Regel entstehen hier im Laufe der Zeit mehrere Log-Dateien. Name und Anzahl sind von der Definition abhängig - meist wird jeden Monat oder jedes Jahr eine neue Datei angelegt. Die gewünschte Datei kann mit &#039;&#039;&#039;data-logfile&#039;&#039;&#039; ausgewählt werden. Möchte man stets die aktuelle Datei verwenden (macht vor allem dann Sinn, wenn man die neusten Daten anzeigen will), kann das Attribut weggelassen, oder explizit &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt; eingetragen werden. Zuletzt wird &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; benötigt, um die gewünschten Daten zu in der Logdatei zu identifizieren. Hier wird die Spalte, in der die Daten stehen, gefolgt von Doppelpunkt und Readingname angegeben.&lt;br /&gt;
&lt;br /&gt;
Für ein Heizungsthermostat von Homematic mit dem Namen &#039;&#039;DG.wz.HZ.Heizungsventil&#039;&#039; ergibt sich somit beispielhaft folgende Definition, um gemessene Temperatur, Sollwert und Ventilstellung im Diagramm darzustellen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;DG.wz.HZ.Heizungsventil&amp;quot;&lt;br /&gt;
	 data-logdevice=&amp;quot;FileLog_DG.wz.HZ.Heizungsventil&amp;quot;&lt;br /&gt;
	 data-logfile=&amp;quot;-&amp;quot;&lt;br /&gt;
	 data-columnspec=&#039;[&amp;quot;4:measured-temp&amp;quot;,&amp;quot;4:desired-temp&amp;quot;,&amp;quot;4:actuator&amp;quot;]&#039;&lt;br /&gt;
	 ...&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollen Daten von unterschiedlichen Geräten in einem Diagramm angezeigt werden, muss &#039;&#039;&#039;data-logdevice&#039;&#039;&#039; als Array nach dem Schema &amp;lt;code&amp;gt;data-logdevice=&#039;[&amp;quot;&amp;lt;Logdatei_1&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Logdatei_2&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Logdatei_3&amp;gt;&amp;quot;]&#039;&amp;lt;/code&amp;gt; definiert werden. Für jeden Eintrag in &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; muss es auch den passenden Eintrag in &#039;&#039;&#039;data-logdevice&#039;&#039;&#039; geben (auch die Reihenfolge ist relevant).&lt;br /&gt;
&lt;br /&gt;
===DbLog===&lt;br /&gt;
Um die Daten aus [[DbLog]] anzeigen zu können, werden die gleichen Attribute verwendet und mit für die Datenbank angepassten Werten beschrieben. Bei &#039;&#039;&#039;data-logdevice&#039;&#039;&#039; das FHEM-Device für die Datenbank angegeben. Im nachfolgenden Beispiel heißt diese &amp;lt;code&amp;gt;logdb&amp;lt;/code&amp;gt; und besitzt wie üblich zwei Tabellen: &amp;lt;code&amp;gt;current&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;history&amp;lt;/code&amp;gt; (der zeitliche Verlauf liegt in letzterer). Der Tabellenname wird bei &#039;&#039;&#039;data-logfile&#039;&#039;&#039; eingetragen. Da die Daten in der Datenbank etwas anders abgelegt werden, muss auch &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; entsprechend angepasst werden. Statt der Spalte wird hier das FHEM-Device, gefolgt von Doppelpunkt und Readingname angegeben.&lt;br /&gt;
&lt;br /&gt;
Für das oben beschriebene Homematic-Heizungsthermostat ergibt sich dann folgende Definition, um die gleichen Daten aus einer Datenbank, statt einem LogFile zu lesen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;DG.wz.HZ.Heizungsventil&amp;quot;&lt;br /&gt;
	 data-logdevice=&amp;quot;logdb&amp;quot;&lt;br /&gt;
	 data-logfile=&amp;quot;HISTORY&amp;quot;&lt;br /&gt;
	 data-columnspec=&#039;[&amp;quot;DG.wz.HZ.Heizungsventil:measured-temp&amp;quot;,&amp;quot;DG.wz.HZ.Heizungsventil:desired-temp&amp;quot;,&amp;quot;DG.wz.HZ.Heizungsventil:actuator&amp;quot;]&#039;&lt;br /&gt;
	 ...&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die Anzeige von unterschiedlichen Geräten in einem Diagramm, muss nur &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; entsprechend angepasst werden, solange sich alle Daten in der Datenbank befinden.&lt;br /&gt;
&lt;br /&gt;
===LogProxy===&lt;br /&gt;
Um die Daten mittels [[LogProxy]] berechnen und anzeigen zu können, muss in FHEM ein LogProxy-Device definiert sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define myLogProxy logProxy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Einstellungen am LogProxy sind nicht nötig, die bloße Existenz reicht.&lt;br /&gt;
&lt;br /&gt;
Bei &#039;&#039;&#039;data-logdevice&#039;&#039;&#039; wird das FHEM-Device für den LogProxy angegeben. Im nachfolgenden Beispiel heißt dieses &amp;lt;code&amp;gt;myLogProxy&amp;lt;/code&amp;gt;. Das Attribut &#039;&#039;&#039;data-logfile&#039;&#039;&#039; wird für LogProxy nicht benötigt. Befinden sich nur LogProxy-Werte im Diagramm kann das Attribut komplett entfallen. Sollen weitere Werte angezeigt werden, bleibt die Definition im Array einfach leer.&lt;br /&gt;
&lt;br /&gt;
Im Attribut &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; wird eine Formel angegeben, wie die Werte berechnet werden sollen. Hier können die Formeln 1:1 von einem eventuell vorhandenen SVG-Plot übernommen werden. &#039;&#039;&#039;Dabei gibt es jedoch folgendes zu beachten:&#039;&#039;&#039; Befindet sich die Formel in einem Array, dürfen die Formeln keine Anführungszeichen (&amp;lt;code&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;) beinhalten. Stattdessen müssen sie als escapter Ascii-Code (&amp;lt;code&amp;gt;\\x22&amp;lt;/code&amp;gt;) eingefügt werden.&lt;br /&gt;
&lt;br /&gt;
Das nachfolgende Beispiel zeigt, wie Vorhersagewerte aus einem FHEM-Device vom Typ Proplanta (Name hier &amp;lt;code&amp;gt;AU.xx.WE.Proplanta&amp;lt;/code&amp;gt;) angezeigt werden können.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;AU.xx.WE.Proplanta&amp;quot;&lt;br /&gt;
	 data-logdevice=&#039;[&lt;br /&gt;
						&amp;quot;myLogProxy&amp;quot;,&lt;br /&gt;
						&amp;quot;myLogProxy&amp;quot;,&lt;br /&gt;
						&amp;quot;myLogProxy&amp;quot;,&lt;br /&gt;
						&amp;quot;myLogProxy&amp;quot;&lt;br /&gt;
					]&#039;&lt;br /&gt;
	 data-columnspec=&#039;[&lt;br /&gt;
						&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22temp_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
						&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22rain_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
						&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22chOfRain_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
						&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22cloud_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;&lt;br /&gt;
					]&#039;&lt;br /&gt;
	 ...&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Auch alle anderen Funktionen, die [[LogProxy]] bietet, können hier angewendet werden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Hinweise==&lt;br /&gt;
===Aktualisierung des Charts===&lt;br /&gt;
Damit der Refresh des Charts funktioniert, muss auch ein Device angegeben werden, der das Refresh triggert. Das Diagramm wird immer dann aktualisiert, wenn sich der Inhalt von &#039;&#039;&#039;data-get&#039;&#039;&#039; ändert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	data-device=&amp;quot;WohnzimmerHeizung&amp;quot;&lt;br /&gt;
	data-logdevice=&amp;quot;FileLog_WohnzimmerHeizung&amp;quot;&lt;br /&gt;
	...&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Aussehen der Linien===&lt;br /&gt;
Mit dem Attribut &#039;&#039;&#039;data-style&#039;&#039;&#039; kann das Aussehen der Linien des jeweiligen Graphen verändert werden. Hierfür können die Standard-FHEM-Styles verwendet werden. Dazu wird das Attribut mit &amp;lt;code&amp;gt;SVGplot&amp;lt;/code&amp;gt;, gefolgt von einem Leerzeichen und der gewünschten Farbe/Stil befüllt. Es existieren jedoch auch noch weitere, an FTUI angepasste Styles, zu finden in der CSS-Datei &amp;lt;code&amp;gt;css/ftui_chart.css&amp;lt;/code&amp;gt;. Um diese zu verwenden, wird das Attribut mit &amp;lt;code&amp;gt;ftui&amp;lt;/code&amp;gt;, gefolgt von einem Leerzeichen und der gewünschten Farbe/Stil befüllt. Eigene Styles können zum Beispiel in der Datei &amp;lt;code&amp;gt;css/fhem-table-ui-user.css&amp;lt;/code&amp;gt; definiert werden.&lt;br /&gt;
&lt;br /&gt;
Folgende Übersicht zeigt die im Standard verfügbaren &#039;&#039;&#039;Farben&#039;&#039;&#039;, alle Abbildungen sind mit im FTUI-Style entstanden:&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f0.png|thumb|none|150px|Farbe &amp;quot;l0&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f1.png|thumb|none|150px|Farbe &amp;quot;l1&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f2.png|thumb|none|150px|Farbe &amp;quot;l2&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f3.png|thumb|none|150px|Farbe &amp;quot;l3&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f4.png|thumb|none|150px|Farbe &amp;quot;l4&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f5.png|thumb|none|150px|Farbe &amp;quot;l5&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f6.png|thumb|none|150px|Farbe &amp;quot;l6&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Angabe zur Farbe kann dann mit der Linienart kombiniert werden. Dazu stehen folgende &#039;&#039;&#039;Stile&#039;&#039;&#039; zur Verfügung:&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-2D-normal.png|thumb|none|225px|Darstellung in 2D: Stil &amp;quot;normal&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-2D-dot.png|thumb|none|225px|Darstellung in 2D: Stil &amp;quot;dot&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-2D-dash.png|thumb|none|225px|Darstellung in 2D: Stil &amp;quot;dash&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-2D-fill.png|thumb|none|225px|Darstellung in 2D: Stil &amp;quot;fill&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-2D-sym.png|thumb|none|225px|Darstellung in 2D: Stil &amp;quot;sym&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-3D-normal.png|thumb|none|225px|Darstellung in 3D: Stil &amp;quot;normal&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-3D-dot.png|thumb|none|225px|Darstellung in 3D: Stil &amp;quot;dot&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-3D-dash.png|thumb|none|225px|Darstellung in 3D: Stil &amp;quot;dash&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-3D-fill.png|thumb|none|225px|Darstellung in 3D: Stil &amp;quot;fill&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-3D-sym.png|thumb|none|225px|Darstellung in 3D: Stil &amp;quot;sym&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Farbe und Stil werden kombiniert (zusammengeschrieben) beim Attribut &#039;&#039;&#039;data-style&#039;&#039;&#039; angegeben, sodass sich beispielsweise für eine graue Punktlinie folgendes ergibt: &amp;lt;code&amp;gt;data-style=&amp;quot;ftui l1dot&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
Um die Darstellung als normale Linie zu erhalten, darf im Gegensatz zu den anderen Linienformen der Stil &amp;lt;code&amp;gt;normal&amp;lt;/code&amp;gt; nicht angegeben werden. Für eine einfache graue Linie ist also die Angabe &amp;lt;code&amp;gt;data-style=&amp;quot;ftui l1&amp;quot;&amp;lt;/code&amp;gt; korrekt, wohingegen &amp;lt;code&amp;gt;data-style=&amp;quot;ftui l1normal&amp;quot;&amp;lt;/code&amp;gt; zu einer fehlerhaften Anzeige führt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Der Stil &#039;&#039;sym&#039;&#039; ist speziell dafür geeignet, Symbole statt Linien zu zeichnen. Dazu kann beim Attribut &#039;&#039;&#039;data-ptype&#039;&#039;&#039; als Linienform ein beliebiges Font-Awsome-, oder Open Automation-Icon angegeben werden. Alle in diesem Abschnitt enthaltenen Abbildungen sind mit &amp;lt;code&amp;gt;data-ptype=&amp;quot;lines&amp;quot;&amp;lt;/code&amp;gt; entstanden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Übergänge mit datenabhängigen Grenzen:&#039;&#039;&#039; Plotstile (data-style) können auch direkt als Gradienten auf Basis von Plot-Datenwerten definiert werden. Dazu muss der Plotstil als Array angegeben werden. Der erste Wert des Arrays gibt an, ob nur die Linie gezeichnet werden soll (Zahl angeben, die die Dicke der Linie definiert) oder gefüllt (&amp;quot;fill&amp;quot; eintragen). Alle danach folgenden Array Elemente sind beliebig viele Stopp Punkte für die Farbübergänge, welche wiederum aus Arrays mit 3 Parametern bestehen. Für jeden Stopp Punkt werden der Datenwert, die Farbe und die Durchsichtigkeit gesetzt. Hierdurch lassen sich z.B. Einfärbungen setzen, die für Temperaturplots immer negative Werte blau einfärben und positive Werte rot. Zwischen den Stop Punkten wird die Farbe interpoliert, also ein weicher Übergang generiert. Will man harte Übergänge muss man Zwei Stopp Punkte mit unterschiedlichen Farbwerten aber dem gleichen Datenwert erzeugen.&amp;lt;br&amp;gt;&lt;br /&gt;
Beispiel 1 für einen weichen Gradienten, der bei 0 von blau nach rot übergeht, bei diesem Übergang durchsichtig ist und von dort nach negativen bzw. positiven Werden immer deckender wird:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;data-style=&#039;[&amp;quot;fill&amp;quot;,[&amp;quot;-20&amp;quot;,&amp;quot;#0000ff&amp;quot;,&amp;quot;0.7&amp;quot;],[&amp;quot;0&amp;quot;,&amp;quot;#0000ff&amp;quot;,&amp;quot;0&amp;quot;],[&amp;quot;0&amp;quot;,&amp;quot;#ff0000&amp;quot;,&amp;quot;0&amp;quot;],[&amp;quot;302&amp;quot;,&amp;quot;#ff0000&amp;quot;,&amp;quot;0.7&amp;quot;]]&#039;&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Beispiel 2 mit einem harten Übergang von blau nach rot bei 0:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;data-style=&#039;[&amp;quot;fill&amp;quot;,[&amp;quot;-20&amp;quot;,&amp;quot;#0000ff&amp;quot;,&amp;quot;0.7&amp;quot;],[&amp;quot;0&amp;quot;,&amp;quot;#0000ff&amp;quot;,&amp;quot;0.7&amp;quot;],[&amp;quot;0&amp;quot;,&amp;quot;#ff0000&amp;quot;,&amp;quot;0.7&amp;quot;],[&amp;quot;50&amp;quot;,&amp;quot;#ff0000&amp;quot;,&amp;quot;0.7&amp;quot;]]&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
Es gibt auch die Möglichkeit den Bereich zwischen zwei Graphen einzufärben. Dazu muss ein Wert in Columnspec als Array angegeben werden. Ist dies der Fall, dann wird der zweite Graph umgekehrt an den ersten angehängt.&amp;lt;br&amp;gt;&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
data-columnspec=&#039;[&lt;br /&gt;
    &amp;quot;Func:logProxy_proplanta2Plot(\\x22AgroWeather\\x22,\\x22weatherIcon\\x22,$from,$to,12)&amp;quot;,&lt;br /&gt;
    [&lt;br /&gt;
        &amp;quot;Func:logProxy_proplanta2Plot(\\x22AgroWeather\\x22,\\x22tempMax\\x22,$from,$to,12)&amp;quot;,&lt;br /&gt;
        &amp;quot;Func:logProxy_proplanta2Plot(\\x22AgroWeather\\x22,\\x22tempMin\\x22,$from,$to,12)&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;Func:logProxy_proplanta2Plot(\\x22AgroWeather\\x22,\\x22rain\\x22,$from,$to,0,\\x22day\\x22)&amp;quot;&lt;br /&gt;
]&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:FTUI Widget Chart DynamicStyles.png|thumb|none|225px|dynamischer Übergang]]&lt;br /&gt;
&lt;br /&gt;
===Form der Linien===&lt;br /&gt;
Das Attribut &#039;&#039;&#039;data-ptype&#039;&#039;&#039; beeinflusst die Form der Linien. Hier sind folgende Werte möglich:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;lines&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;steps&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;fsteps&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;histeps&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bars&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ibars&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;cubic&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;quadratic&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;quadraticSmooth&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusätzlich ist es möglich, Symbole anzeigen zu lassen. Unterstützt werden Font-Awesome (&#039;fa-...&#039;), Open Automation (&#039;oa-...&#039;) und FHEM-Symbole (&#039;fs-...&#039;)). Damit die Symbole korrekt angezeigt werden, muss  im Attribut &#039;&#039;&#039;data-style&#039;&#039;&#039; der Stil &amp;lt;code&amp;gt;sym&amp;lt;/code&amp;gt; gewählt werden, da sonst nur Punkte, statt der Symbole gezeichnet werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;DG.wz.HZ.Heizungsventil&amp;quot;&lt;br /&gt;
	 data-logdevice=&amp;quot;FileLog_DG.wz.HZ.Heizungsventil&amp;quot;&lt;br /&gt;
	 ...&lt;br /&gt;
	 data-style=&amp;quot;ftui l1sym&amp;quot;&lt;br /&gt;
	 data-ptype=&amp;quot;fa-cog&amp;quot;&lt;br /&gt;
	 ...&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Größe der Symbole ist in der Datei &amp;lt;code&amp;gt;css/ftui_chart.css&amp;lt;/code&amp;gt; auf 12px festgelegt. Dieser Wert kann in einer eigenen CSS-Datei durch Anpassung von &amp;lt;code&amp;gt;stroke-width&amp;lt;/code&amp;gt; überschrieben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.ftui.l0sym		{ stroke:#DDA400; stroke-width:12px; fill:none; }&lt;br /&gt;
.ftui.l1sym		{ stroke:#BBBBBB; stroke-width:12px; fill:none; }&lt;br /&gt;
.ftui.l2sym		{ stroke:#CC0000; stroke-width:12px; fill:none; }&lt;br /&gt;
.ftui.l3sym		{ stroke:#CCCC00; stroke-width:12px; fill:none; }&lt;br /&gt;
.ftui.l4sym		{ stroke:#33CC33; stroke-width:12px; fill:none; }&lt;br /&gt;
.ftui.l5sym		{ stroke:#33CCCC; stroke-width:12px; fill:none; }&lt;br /&gt;
.ftui.l6sym		{ stroke:#3333CC; stroke-width:12px; fill:none; }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;data-ptype&#039;&#039;&#039; kann auch Inhalt im Format &amp;lt;code&amp;gt;&#039;icon:1&#039;&amp;lt;/code&amp;gt; verarbeiten. Dann muss der zugehörige Wert in &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; den Pfad zu einem Icon (z.B. für Wettervorhersagen) beinhalten. Der Y-Wert wird dann vom ersten Graphen übernommen. Weitere Ausführungen hierzu im Beispiel [[#Darstellung der Wetter Icons im Diagramm]]. &lt;br /&gt;
&lt;br /&gt;
===Stapeln von Linien===&lt;br /&gt;
Über &#039;&#039;&#039;data-ptype&#039;&#039;&#039; kann zusätzlich festgelegt werden, ob Graphen übereinander gestapelt werden sollen. &amp;lt;code&amp;gt;data-ptype=&#039;lines:1&#039;&amp;lt;/code&amp;gt; bedeutet, dass der zugehörige Graph auf den Graph mit der Nummer 1 gestapelt werden soll. So etwas kann z.B. Sinn machen, wenn man den Stromverbrauch einzelner Devices darstellen und zusätzlich sehen will, wie hoch die Summe ist. Beispiel siehe unten.&lt;br /&gt;
&lt;br /&gt;
[[Datei:FTUI Widget Chart Stacked.png]]&lt;br /&gt;
&lt;br /&gt;
===Zeitstrahl / Start &amp;amp; Ende auf der X-Achse===&lt;br /&gt;
Die Attribute &#039;&#039;&#039;data-daysago_start&#039;&#039;&#039; und &#039;&#039;&#039;data-daysago_end&#039;&#039;&#039; dienen der Definition von Anfang und Ende der X-Achse. Im einfachsten Fall wird eine Anzahl an Tagen eingegeben, die sich auf das aktuelle Datum beziehen. Dabei gilt es zu beachten, dass es sich um &#039;&#039;vergangene Tage&#039;&#039; handelt. Das bedeutet, dass Tage in der Vergangenheit als positive Zahl angegeben werden, Tage in der Zukunft hingegen als negative Zahl. Es kann jeweils  auch ein fixes Datum (z.B. &#039;2013-10-23&#039;) angegeben werden. Uhrzeitangaben werden nur berücksichtigt, wenn &#039;&#039;&#039;data-nofulldays=&#039;true&#039; &#039;&#039;&#039; verwendet wird.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Relative Zeitangabe in Stunden/Tagen/Wochen/Monaten/Jahren&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Zur Ausgabe einer Anzahl an zurückliegenden Stunden bis zum aktuellen Zeitpunkt wird als Startzeitpunkt die Anzahl der Stunden/Tage/Wochen/Monate/Jahre angegeben, die angezeigt werden sollen, gefolgt vom Kleinbuchstaben &#039;&#039;&#039;h&#039;&#039;&#039; für Stunden, &#039;&#039;&#039;d&#039;&#039;&#039; für Tage, &#039;&#039;&#039;w&#039;&#039;&#039; für Wochen, &#039;&#039;&#039;m&#039;&#039;&#039; für Monate, &#039;&#039;&#039;y&#039;&#039;&#039; für Jahre, . Als Endzeitpunkt wird &#039;&#039;&#039;now&#039;&#039;&#039; gewählt.&amp;lt;br /&amp;gt;&lt;br /&gt;
Das nachfolgende Beispiel zeigt die Werte der vergangenen 3 Stunden an:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
data-nofulldays=&amp;quot;true&amp;quot;&lt;br /&gt;
data-daysago_start=&amp;quot;3h&amp;quot;&lt;br /&gt;
data-daysago_end=&amp;quot;now&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fester Zeitbereich des heutigen Tages (Stunden/Tage/Wochen/Monate/Jahre)&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Um ein festes Stunden/Tages/Wochen/Monats/Jahresfenster anzuzeigen, werden die absoluten Stunden/Tages/Wochen/Monats/Jahreszahlen mit negativem Vorzeichen, gefolgt vom Großbuchstaben &#039;&#039;&#039;H&#039;&#039;&#039; (entsprechend D/W/M/Y für Tage/Wochen/Monate/Jahre) angegeben. Wird &#039;&#039;&#039;data-daysago_start&#039;&#039;&#039; als positiver Wert angegeben, wird die Anzahl der Stunden/Tage/Wochen/Monate/Jahre von heute 0:00 Uhr subtrahiert (siehe Rechenweg weiter unten).&amp;lt;br /&amp;gt;&lt;br /&gt;
Das Beispiel zeigt den Zeitbereich von heute 5:00 Uhr bis heute 22:00 Uhr:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
data-nofulldays=&amp;quot;true&amp;quot;&lt;br /&gt;
data-daysago_start=&amp;quot;-5H&amp;quot;&lt;br /&gt;
data-daysago_end=&amp;quot;-22H&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fester Zeitbereich Tage-übergreifend&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Die Zeit in Tagen kann als Gleitkommazahl angegeben werden. Damit ist es möglich, Tage und Uhrzeiten zu kombinieren. Die Werte sind dann als Teil eines ganzen Tages, bezogen auf heute 0:00 Uhr zu errechnen und mit &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; als Teiler anzugeben.&amp;lt;br /&amp;gt;&lt;br /&gt;
Das nachfolgende Beispiel zeigt einen Zeitbereich von &#039;&#039;&#039;gestern 15:00 Uhr&#039;&#039;&#039; bis &#039;&#039;&#039;morgen 3:00 Uhr&#039;&#039;&#039;.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
data-nofulldays=&amp;quot;true&amp;quot;&lt;br /&gt;
data-daysago_start=&amp;quot;0.375&amp;quot;&lt;br /&gt;
data-daysago_end=&amp;quot;-1.125&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die nachfolgenden Rechenwege sind die Einheiten nur zur Verdeutlichung angegeben. Die Einheiten werden im Attribut nicht angegeben.&lt;br /&gt;
&lt;br /&gt;
Der Wert für &#039;&#039;&#039;GESTERN&#039;&#039;&#039; wird wie folgt ermittelt:&amp;lt;br /&amp;gt;&lt;br /&gt;
Ausgangspunkt ist heute 0:00 Uhr, gestern 15:00 Uhr liegt also 9 Stunden davor. Diese 9 Stunden sind ein &amp;lt;code&amp;gt;9/24 Tag&amp;lt;/code&amp;gt; und errechnet sich so:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1d / 24h = 0.0416666...d/h&lt;br /&gt;
0.0416d/h * 9h = 0.375d&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Wert für &#039;&#039;&#039;MORGEN&#039;&#039;&#039; wird wie folgt ermittelt:&amp;lt;br /&amp;gt;&lt;br /&gt;
Ausgangspunkt ist wieder heute 0:00 Uhr, morgen 3:00 Uhr liegt dann 27 Stunden dahinter. Der Einfachheit halber werden hier nur die 3 Stunden errechnet und dann ein ganzer Tag addiert:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1d / 24h = 0.0416666...d/h&lt;br /&gt;
0.0416d/h * 3h = 0.125d&lt;br /&gt;
&lt;br /&gt;
0.125d + 1d = 1.125d&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Da das Attribut Tage in der Vergangenheit erwartet, muss für einen Wert in der Zukunft wieder eine negative Zahl angegeben werden.&lt;br /&gt;
&lt;br /&gt;
===Zeitformat der X-Achse===&lt;br /&gt;
Die Zeitanzeige auf der X-Achse kann sehr flexibel eingestellt werden. Dafür stehen verschiedene Platzhalter zur Verfügung, die durch spezielle Zeichen (&amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt; &amp;lt;/code&amp;gt; (Leerzeichen), &amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;,&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;\&amp;lt;/code&amp;gt;) getrennt werden. Alle Zeichen werden trotz Escape-Zeichen (&amp;lt;code&amp;gt;\&amp;lt;/code&amp;gt;) in der Ausgabe angezeigt.&lt;br /&gt;
&lt;br /&gt;
Folgende Platzhalter werden unterstützt:&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;mm&#039;&amp;lt;/code&amp;gt;: Minuten als zweistellige Zahl&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;hh&#039;&amp;lt;/code&amp;gt;: Stunden als zweistellige Zahl&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;dd&#039;&amp;lt;/code&amp;gt;: Tag als zweistellige Zahl (Kalenderdatum)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;MM&#039;&amp;lt;/code&amp;gt;: Monat als zweistellige Zahl (z.B. 02 für Februar)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;MMM&#039;&amp;lt;/code&amp;gt;: Monat als dreistellige Abkürzung (z.B. Dec für Dezember)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;MMMM&#039;&amp;lt;/code&amp;gt;: Langname des Monats (z.B. March)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;ee&#039;&amp;lt;/code&amp;gt;: Wochentag als zweistellige Zahl (z.B. 00 für Sonntag)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;eee&#039;&amp;lt;/code&amp;gt;: Wochentag als dreistellige Abkürzung (z.B. Mon für Montag)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;eeee&#039;&amp;lt;/code&amp;gt;: Langname des Wochentags (z.B. Tuesday)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;yy&#039;&amp;lt;/code&amp;gt;: Jahr als zweistellige Zahl (z.B. 16 für 2016)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;yyyy&#039;&amp;lt;/code&amp;gt;: Jahr als vierstellige Zahl (z.B. 2016)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;LF&#039;&amp;lt;/code&amp;gt;: Fügt einen Zeilenumbruch hinzu&lt;br /&gt;
&lt;br /&gt;
Beispiel: Der String &amp;lt;code&amp;gt;&#039;MMM\LF\yyyy&#039;&amp;lt;/code&amp;gt; zeigt &amp;lt;code&amp;gt;&#039;Jan&#039;&amp;lt;/code&amp;gt; in der ersten, und &amp;lt;code&amp;gt;&#039;2016&#039;&amp;lt;/code&amp;gt; in der zweiten Zeile. &amp;lt;code&amp;gt;&#039;MM.dd 2016&#039;&amp;lt;/code&amp;gt; wird zu &amp;lt;code&amp;gt;&#039;03.05 2016&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Fadenkreuz-Cursor===&lt;br /&gt;
Der Fadenkreuz-Cursor zeigt die Momentanwerte, indem man ihn über die Graphen bewegt. In Desktop-Browsern reicht einfaches Bewegen des Maus. Unter iOS und Android kann der Cursor wird der Cursor durch einfaches Tippen auf die neue Position bewegt.&lt;br /&gt;
&lt;br /&gt;
Mit dem Attribut &#039;&#039;&#039;data-cursorgroup&#039;&#039;&#039; können Graphen gruppiert werden. Am Cursor werden dann die Momentanwerte aller Graphen gleichzeitig angezeigt, die die selbe Zahl besitzen, sobald man die Maus über einen aus der Gruppe bewegt.&lt;br /&gt;
&lt;br /&gt;
===Legende===&lt;br /&gt;
Mit dem Attribut &#039;&#039;&#039;data-legendpos&#039;&#039;&#039; kann die Position der Legende innerhalb des Diagramms festgelegt werden. Die Position wird mit einem Array, bestehend aus zwei Werten im Format &amp;lt;code&amp;gt;&#039;[&amp;quot;&amp;lt;horizontal&amp;gt;&amp;quot;,&amp;quot;&amp;lt;vertikal&amp;gt;&amp;quot;]&#039;&amp;lt;/code&amp;gt; angegeben. Für die horizontale Positionierung sind &amp;lt;code&amp;gt;&#039;left&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&#039;right&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&#039;before&#039;&amp;lt;/code&amp;gt;, und &amp;lt;code&amp;gt;&#039;behind&#039;&amp;lt;/code&amp;gt;, die vertikale Positionierung &amp;lt;code&amp;gt;&#039;top&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&#039;bottom&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&#039;above&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&#039;below&#039;&amp;lt;/code&amp;gt; erlaubt (der Unterschied zwischen &amp;lt;code&amp;gt;&#039;left&#039;&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;&#039;before&#039;&amp;lt;/code&amp;gt; liegt darin, dass im zweiten Fall die Legende nicht in den Zeichenbereich gesetzt wird sondern vor das ganze Chart (entsprechend für &amp;lt;code&amp;gt;&#039;after&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&#039;above&#039;&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;&#039;below&#039;&amp;lt;/code&amp;gt;). Alternativ können auch Zahlen verwendet werden, die die Position in Prozent angeben. Durch verschieben mit der Maus oder durch verschieben mit dem Finger oder Stift auf Touch Devices kann die Legende auch an eine andere Position verschoben werden.&lt;br /&gt;
&lt;br /&gt;
Wenn die Legende eingeblendet ist, kann mittels Klick auf einen Legendeneintrag der zugehörige Graph ein- und ausgeblendet werden.&lt;br /&gt;
&lt;br /&gt;
===3-dimensionale Drehung===&lt;br /&gt;
&#039;&#039;&#039;data-ddd&#039;&#039;&#039; ermöglicht, den Graphen 3-dimensional zu drehen. Als Wert wird ein Array mit den 3 Winkeln für x, y und z erwartet, wobei z selbst bisher nicht unterstützt wird.&lt;br /&gt;
&lt;br /&gt;
Beispiel: &amp;lt;code&amp;gt;data-ddd=&#039;[&amp;quot;40&amp;quot;,&amp;quot;60&amp;quot;,&amp;quot;0&amp;quot;]&#039;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Wenn der 3D Modus aktiv ist (&#039;&#039;&#039;data-ddd&#039;&#039;&#039; gesetzt) sind 2 zusätzliche Parameter verfügbar um das Aussehen der Graphen zu beeinflussen. &#039;&#039;&#039;data-dddspace&#039;&#039;&#039; gibt an, wie viele pixel der Raum zwischen den einzelnen in z-Richtung hintereinander angeordneten Graphen betragen soll.&lt;br /&gt;
&#039;&#039;&#039;data-dddwidth&#039;&#039;&#039; legt fest, wie viele pixel die einzelnen Graphen tief (oder dick) sein sollen.&lt;br /&gt;
&lt;br /&gt;
Wenn das Array angegeben wird, erscheinen zwei zusätzliche Buttons im Diagramm, mit denen die Drehung in X- und Y-Richtung verändert werden kann.&lt;br /&gt;
&lt;br /&gt;
===Diagrammtitel===&lt;br /&gt;
Mit dem Attribut &#039;&#039;&#039;data-title&#039;&#039;&#039; kann dem Diagramm, ähnlich wie in FHEM-SVG-Plots, ein Titel hinzugefügt werden.&lt;br /&gt;
&lt;br /&gt;
Folgende Platzhalter werden unterstützt:&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;min1&#039;&amp;lt;/code&amp;gt;: Minimaler Y-Wert des ersten Graphs&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;max1&#039;&amp;lt;/code&amp;gt;: Maximaler Y-Wert des ersten Graphs&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;avg1&#039;&amp;lt;/code&amp;gt;: Mittlerer Y-Wert des ersten Graphs&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;cnt1&#039;&amp;lt;/code&amp;gt;: Anzahl der dargestellten Einzelwerte im ersten Graph&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;currval1&#039;&amp;lt;/code&amp;gt;: Letzter, bzw. aktuellster Y-Wert des ersten Graphs&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;mindate1&#039;&amp;lt;/code&amp;gt;: Niedrigster Wert auf der X-Achse des ersten Graphs&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;maxdate1&#039;&amp;lt;/code&amp;gt;: Höchster Wert auf der X-Achse vom ersten Graphs&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;currdate1&#039;&amp;lt;/code&amp;gt;: Letzter, bzw. aktuellster Wert auf der X-Achse des ersten Graphs&lt;br /&gt;
&lt;br /&gt;
Durch Einsetzen einer anderen Zahl statt &#039;1&#039; können auch die Werte der anderen Graphen angezeigt werden. Das Weglassen der Zahl bewirkt, dass der jeweils zutreffende Wert automatisch ermittelt wird. Bedeutet: &amp;lt;code&amp;gt;max&amp;lt;/code&amp;gt; führt dazu, dass der höchste Wert aller angezeigter Graphen verwendet wird.&lt;br /&gt;
Zusätzlich ist es möglich durch &amp;quot;$eval(&amp;lt;regexp&amp;gt;)&amp;quot; regular Expressions auszuwerten (also z.B. Berechnungen durchzuführen). In &amp;lt;regexp&amp;gt; können auch &amp;quot;$data()&amp;quot; vorkommen.&lt;br /&gt;
&lt;br /&gt;
Beispiel: &amp;lt;code&amp;gt;data-title=&amp;quot;Klima Wohnzimmer Average: $eval(parseInt($data{avg1}*10)/10)°C / Max: $eval(parseInt($data{max1}*10)/10)°C&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Buttons im Diagramm===&lt;br /&gt;
Es gibt mehrere Buttons, mit denen sich die Anzeige des Diagramms verändern lässt. &amp;lt;code&amp;gt;&amp;lt;-&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;-&amp;gt;&amp;lt;/code&amp;gt; bewegen die Graphen nach links und rechts. &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt; zoomen die Anzeige. &amp;lt;code&amp;gt;legend&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;cursor&amp;lt;/code&amp;gt; schalten die zugehörigen Anzeigen ein und aus. Falls der 3D Modus eingeschaltet ist, gibt es Buttons zum Drehen der Darstellung um die X- und Y-Achse. Falls &amp;lt;code&amp;gt;data-timeranges&amp;lt;/code&amp;gt; gesetzt ist, wird ein Pulldown Menü dargestellt, welches die Auswahl von dort definierten Zeiträumen für die X-Achse erlaubt.&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
===Einfaches Diagramm===&lt;br /&gt;
Das Beispiel zeigt ein einfaches Diagramm mit 4 unterschiedlich formatierten Graphen, Legende und Momentanwerten am Fadenkreuz-Cursor.&lt;br /&gt;
&lt;br /&gt;
[[File:Chart_tabletUI.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	data-logdevice=&#039;[&amp;quot;Log.Garden&amp;quot;,&amp;quot;Log.Garden&amp;quot;,&amp;quot;Log.Garden&amp;quot;,&amp;quot;Log.Predicted&amp;quot;]&#039;&lt;br /&gt;
	data-columnspec=&#039;[&amp;quot;4:Garden.T:15:&amp;quot;,&amp;quot;10:Garden.T:0:delta-h&amp;quot;,&amp;quot;10:Garden.T:0:delta-d&amp;quot;,&amp;quot;4:predicted.*:15:&amp;quot;]&#039;&lt;br /&gt;
	data-style=&#039;[&amp;quot;ftui l0fill&amp;quot;,&amp;quot;ftui l1fill&amp;quot;,&amp;quot;ftui l2&amp;quot;,&amp;quot;ftui l3dot&amp;quot;]&#039;&lt;br /&gt;
	data-ptype=&#039;[&amp;quot;lines&amp;quot;,&amp;quot;histeps&amp;quot;,&amp;quot;histeps&amp;quot;,&amp;quot;cubic&amp;quot;]&#039;&lt;br /&gt;
	data-uaxis=&#039;[&amp;quot;primary&amp;quot;,&amp;quot;secondary&amp;quot;,&amp;quot;secondary&amp;quot;,&amp;quot;primary&amp;quot;]&#039;&lt;br /&gt;
	data-legend=&#039;[&amp;quot;Temperature&amp;quot;,&amp;quot;Rain/hour&amp;quot;,&amp;quot;Rain/day&amp;quot;,&amp;quot;Predicted Temp.&amp;quot;]&#039;&lt;br /&gt;
	data-yunit=&amp;quot;°C&amp;quot;&lt;br /&gt;
	data-ytext=&amp;quot;Temperature&amp;quot;&lt;br /&gt;
	data-minvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	data-maxvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	data-yunit_sec=&amp;quot;mm&amp;quot;&lt;br /&gt;
	data-ytext_sec=&amp;quot;Rain (mm)&amp;quot;&lt;br /&gt;
	data-height=&amp;quot;250&amp;quot;&lt;br /&gt;
	data-yticks=&amp;quot;auto&amp;quot;&lt;br /&gt;
	data-minvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	data-maxvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	data-nofulldays=&amp;quot;true&amp;quot;&lt;br /&gt;
	data-daysago_start=&amp;quot;2013-08-13T00:00:00&amp;quot;&lt;br /&gt;
	data-daysago_end=&amp;quot;2013-08-14T00:00:00&amp;quot;&lt;br /&gt;
	data-cursorgroup=&amp;quot;1&amp;quot;&lt;br /&gt;
	data-scrollgroup=&amp;quot;1&amp;quot;&lt;br /&gt;
	data-xticks=&amp;quot;auto&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===7-Tage-Wettervorhersage mit Proplanta===&lt;br /&gt;
In diesem Beispiel wird gezeigt, wie die Vorhersagewerte von [[PROPLANTA]] in einem Diagramm dargestellt werden können. Da die Werte nicht in einer Datenbank oder einem FileLog vorliegen, müssen sie über [[LogProxy]] verarbeitet werden. Dafür sind einige Vorbereitungen in FHEM nötig.&lt;br /&gt;
&lt;br /&gt;
[[File:FTUI_Widget_Chart-fc-Proplanta.png|941px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.&#039;&#039;&#039; Ein LogProxy-Device muss vorhanden sein:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define myLogProxy logProxy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2.&#039;&#039;&#039; In der Datei &amp;lt;code&amp;gt;99_myUtils.pm&amp;lt;/code&amp;gt; muss folgende Routine hinzugefügt werden, die die Daten bereitstellt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#---------------------------------------&lt;br /&gt;
# Proplanta LogProxy-Funktion&lt;br /&gt;
#---------------------------------------&lt;br /&gt;
sub logProxy_proplanta2Plot($$$$;$$) {&lt;br /&gt;
	my ($device, $fcValue, $from, $to, $fcHour, $expMode) = @_;&lt;br /&gt;
    my $regex;&lt;br /&gt;
    my @rl;&lt;br /&gt;
    &lt;br /&gt;
	return undef if(!$device);&lt;br /&gt;
    &lt;br /&gt;
    if($fcValue =~ s/_$//) {&lt;br /&gt;
        $regex = &amp;quot;^fc[\\d]+_&amp;quot;.$fcValue.&amp;quot;[\\d]{2}\$&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
        $regex = &amp;quot;^fc[\\d]+_&amp;quot;.$fcValue.&amp;quot;\$&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    $fcHour = 12 if(!defined $fcHour);&lt;br /&gt;
    $expMode = &amp;quot;point&amp;quot; if(!defined $expMode);&lt;br /&gt;
&lt;br /&gt;
	if( defined($defs{$device}) ) {&lt;br /&gt;
		if( $defs{$device}{TYPE} eq &amp;quot;PROPLANTA&amp;quot; ) {&lt;br /&gt;
            @rl = sort{&lt;br /&gt;
                my ($an) = ($a =~ m/fc(\d+)_.*/);&lt;br /&gt;
                my ($bn) = ($b =~ m/fc(\d+)_.*/);&lt;br /&gt;
                $an &amp;lt;=&amp;gt; $bn or $a cmp $b;&lt;br /&gt;
                }( grep /${regex}/,keys %{$defs{$device}{READINGS}} );&lt;br /&gt;
			return undef if( !@rl );&lt;br /&gt;
		} else {&lt;br /&gt;
			Log3 undef, 2, &amp;quot;logProxy_proplanta2Plot: $device is not a PROPLANTA device&amp;quot;;&lt;br /&gt;
			return undef;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	my $fromsec = SVG_time_to_sec($from);&lt;br /&gt;
	my $tosec   = SVG_time_to_sec($to);&lt;br /&gt;
	my $sec = $fromsec;&lt;br /&gt;
	my ($h,$fcDay,$mday,$mon,$year);&lt;br /&gt;
	my $timestamp;&lt;br /&gt;
    &lt;br /&gt;
	my $reading;&lt;br /&gt;
	my $value;&lt;br /&gt;
	my $prev_value;&lt;br /&gt;
	my $min = 999999;&lt;br /&gt;
	my $max = -999999;&lt;br /&gt;
	my $ret = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	# while not end of plot range reached&lt;br /&gt;
	while(($sec &amp;lt; $tosec) &amp;amp;&amp;amp; @rl) {&lt;br /&gt;
		#remember previous value for start of plot range&lt;br /&gt;
		$prev_value = $value;&lt;br /&gt;
&lt;br /&gt;
		$reading = shift @rl;&lt;br /&gt;
        ($fcDay) = $reading =~ m/^fc(\d+).*/;&lt;br /&gt;
   		$h = ($reading =~ m/.*(\d\d)$/)?$1:$fcHour;&lt;br /&gt;
		$value = ReadingsVal($device,$reading,undef);&lt;br /&gt;
        &lt;br /&gt;
		($mday,$mon,$year) = split(&#039;\.&#039;,ReadingsVal($device,&amp;quot;fc&amp;quot;.$fcDay.&amp;quot;_date&amp;quot;,undef));&lt;br /&gt;
		$timestamp = sprintf(&amp;quot;%04d-%02d-%02d_%02d:%02d:%02d&amp;quot;, $year, $mon, $mday, $h, 0, 0);&lt;br /&gt;
		$sec = SVG_time_to_sec($timestamp);&lt;br /&gt;
        &lt;br /&gt;
		# skip all values before start of plot range&lt;br /&gt;
		next if( SVG_time_to_sec($timestamp) &amp;lt; $fromsec );&lt;br /&gt;
&lt;br /&gt;
		# add first value at start of plot range&lt;br /&gt;
		if( !$ret &amp;amp;&amp;amp; $prev_value ) {&lt;br /&gt;
		  $min = $prev_value if( (looks_like_number($prev_value) &amp;amp;&amp;amp; ($prev_value &amp;lt; $min)) || ($prev_value lt $min) );&lt;br /&gt;
		  $max = $prev_value if( (looks_like_number($prev_value) &amp;amp;&amp;amp; ($prev_value &amp;gt; $max)) || ($prev_value gt $max) );&lt;br /&gt;
		  $ret .= &amp;quot;$from $prev_value\n&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		# done if after end of plot range&lt;br /&gt;
		last if($sec &amp;gt; $tosec);&lt;br /&gt;
&lt;br /&gt;
		$min = $value if( (looks_like_number($value) &amp;amp;&amp;amp; ($value &amp;lt; $min )) || ($value lt $min) );&lt;br /&gt;
		$max = $value if( (looks_like_number($value) &amp;amp;&amp;amp; ($value &amp;gt; $max )) || ($value gt $max) );&lt;br /&gt;
&lt;br /&gt;
		# add actual controll point&lt;br /&gt;
		$ret .= &amp;quot;$timestamp $value\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#		Log 1, &amp;quot;$timestamp $value -0- $reading&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
    if(($sec &amp;lt; $tosec) &amp;amp;&amp;amp; !@rl &amp;amp;&amp;amp; ($expMode eq &amp;quot;day&amp;quot;)) {&lt;br /&gt;
    	$timestamp = sprintf(&amp;quot;%04d-%02d-%02d_%02d:%02d:%02d&amp;quot;, $year, $mon, $mday, 23, 59, 59);&lt;br /&gt;
    	if(SVG_time_to_sec($timestamp) &amp;lt; $tosec) {&lt;br /&gt;
        	$ret .= &amp;quot;$timestamp $value\n&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
			$ret .= &amp;quot;$to $value\n&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    elsif(($sec &amp;gt; $tosec) &amp;amp;&amp;amp; ($expMode eq &amp;quot;day&amp;quot;)) {&lt;br /&gt;
       	$value = $prev_value + ($value - $prev_value)*(86400 + ($tosec - $sec))/86400;&lt;br /&gt;
       	$ret .= &amp;quot;$to $value\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
	return ($ret,$min,$max,$prev_value);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend können die Daten im Chart-Widget angezeigt werden. Der Device-Name von Proplanta heißt hier im Beispiel &amp;lt;code&amp;gt;AU.xx.WE.Proplanta&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;AU.xx.WE.Proplanta&amp;quot;&lt;br /&gt;
	 data-logdevice=&#039;[&lt;br /&gt;
	 					&amp;quot;myLogProxy&amp;quot;,&lt;br /&gt;
	 					&amp;quot;myLogProxy&amp;quot;,&lt;br /&gt;
	 					&amp;quot;myLogProxy&amp;quot;&lt;br /&gt;
	 				]&#039;&lt;br /&gt;
	 data-columnspec=&#039;[&lt;br /&gt;
	 					&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22rain_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
	 					&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22chOfRain_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
	 					&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22cloud_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;&lt;br /&gt;
	 				]&#039;&lt;br /&gt;
	 data-style=&#039;[&lt;br /&gt;
	 					&amp;quot;ftui l6fill&amp;quot;,&lt;br /&gt;
	 					&amp;quot;ftui l5fill&amp;quot;,&lt;br /&gt;
	 					&amp;quot;ftui l1fill&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-ptype=&#039;[&lt;br /&gt;
	 					&amp;quot;steps&amp;quot;,&lt;br /&gt;
	 					&amp;quot;quadraticSmooth&amp;quot;,&lt;br /&gt;
	 					&amp;quot;quadraticSmooth&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-uaxis=&#039;[&lt;br /&gt;
	 					&amp;quot;primary&amp;quot;,&lt;br /&gt;
	 					&amp;quot;secondary&amp;quot;,&lt;br /&gt;
	 					&amp;quot;secondary&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-legend=&#039;[&lt;br /&gt;
	 					&amp;quot;Regen&amp;quot;,&lt;br /&gt;
	 					&amp;quot;Regenwahrscheinlichkeit&amp;quot;,&lt;br /&gt;
	 					&amp;quot;Wolken&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-yunit=&amp;quot;mm&amp;quot;&lt;br /&gt;
	 data-ytext=&amp;quot;Regen&amp;quot;&lt;br /&gt;
	 data-yunit_sec=&amp;quot;%&amp;quot;&lt;br /&gt;
	 data-ytext_sec=&amp;quot;Chance auf Regen / Wolken&amp;quot;&lt;br /&gt;
	 data-timeformat=&amp;quot;eeee&amp;quot;&lt;br /&gt;
	 data-minvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-maxvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-minvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-maxvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-daysago_start = &amp;quot;0&amp;quot;&lt;br /&gt;
	 data-daysago_end = &amp;quot;-7&amp;quot;&lt;br /&gt;
	 data-xticks=&amp;quot;1440&amp;quot;&lt;br /&gt;
	 data-yticks=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-title=&amp;quot;7-Tage-Wettervorhersage&amp;quot;&lt;br /&gt;
	 data-showlegend=&amp;quot;true&amp;quot;&lt;br /&gt;
	 class=&amp;quot;nobuttons fullsize&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hilfreiche Links und Quellen zu diesem Beispiel:&#039;&#039;&#039;&lt;br /&gt;
*[[LogProxy|LogProxy im FHEM-Wiki]]&lt;br /&gt;
*{{Link2Forum|Topic=22967|Message=246973|LinkText=Stundengenaue Wettervorhersage (#1) im FHEM-Forum}}&lt;br /&gt;
*{{Link2Forum|Topic=22967|Message=334713|LinkText=Stundengenaue Wettervorhersage (#2) im FHEM-Forum}}&lt;br /&gt;
&lt;br /&gt;
===Darstellung der Wetter Icons im Diagramm===&lt;br /&gt;
&lt;br /&gt;
[[File:Wetterchart2.png]]&lt;br /&gt;
&lt;br /&gt;
Wie oben bereits beschrieben, gibt es beim Chart grundsätzlich die Möglichkeit, Icons, welche in Form von URLs in den Logs abgelegt sind oder welche per logProxy generiert werden, darzustellen. Die Icons werden auf genau dem gleichen Weg von FHEM gelesen, wie alle anderen Datenpunkte. Im Folgenden wird ein Beispiel gezeigt, mit dem die im Proplanta Modul als Readings abgelegten Icons per logProxy Funktion gelesen und in ein Chart eingebaut werden könnnen.&lt;br /&gt;
Da es beim Proplanta Modul für die ersten 7 Tage nicht das Reading &amp;lt;code&amp;gt;fc#_weatherIcon&amp;lt;/code&amp;gt; gibt, sondern mehrere Readings für unterschiedliche Tageszeiten wogegen für die zweiten 7 Tage ausschließlich das Reading &amp;lt;code&amp;gt;fc#_weatherIcon&amp;lt;/code&amp;gt; vorhanden ist, sollte per &amp;lt;code&amp;gt;attr device userReading&amp;lt;/code&amp;gt; mit folgendem Eintrag dafür gesorgt werden, dass für alle Tage ein Reading &amp;lt;code&amp;gt;fc#_weatherIcon&amp;lt;/code&amp;gt; vorhanden ist (alternativ könnten auch 2 Graphen gezeichnet werden, wobei der erste dann nur die ersten 7 Tage enthält und der zweite die letzen 7 Tage, will man nur die ersten 7 Tage darstellen braucht man das userReading nicht unbedingt).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
fc0_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc0_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);},&lt;br /&gt;
fc1_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc1_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);},&lt;br /&gt;
fc2_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc2_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);},&lt;br /&gt;
fc3_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc3_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);},&lt;br /&gt;
fc4_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc4_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);},&lt;br /&gt;
fc5_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc5_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);},&lt;br /&gt;
fc6_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc6_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Um die Icons darzustellen muss ein zusätzlicher Graph definiert werden. Dieser nutzt neben der Columnspec, die die URLs abruft den Parameter &amp;lt;code&amp;gt;data-ptype=&amp;quot;icons:#&amp;quot;&amp;lt;/code&amp;gt; (# ist eine Zahl und steht für die Nummer, beginnend bei 0 des Graphen, welcher für die y-Position der Icons verwendet werden soll) und den Stil &amp;lt;code&amp;gt;sym&amp;lt;/code&amp;gt;. Der Wert für die Symbolgröße sollte z.B. durch eine zusätzliche Definition im File fhem-tablet-ui-user.css in der Form:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* icon lines */&lt;br /&gt;
.ftui.l99icon	{ stroke:#DDA400; stroke-width:48px; fill:none; }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Im folgenden ein Beispiel, welches eine Linie für die Maximale Tagestemperatur zeichnet und auf dieser Linie die Wetter Icons darstellt.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;AU.xx.WE.Proplanta&amp;quot;&lt;br /&gt;
	 data-logdevice=&#039;[&lt;br /&gt;
	 					&amp;quot;myLogProxy&amp;quot;,&lt;br /&gt;
	 					&amp;quot;myLogProxy&amp;quot;&lt;br /&gt;
	 				]&#039;&lt;br /&gt;
	 data-columnspec=&#039;[&lt;br /&gt;
	 					&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22weatherIcon\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
	 					&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22tempMax\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;&lt;br /&gt;
	 				]&#039;&lt;br /&gt;
	 data-style=&#039;[&lt;br /&gt;
	 					&amp;quot;ftui l99icon&amp;quot;,&lt;br /&gt;
	 					&amp;quot;ftui l1fill&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-ptype=&#039;[&lt;br /&gt;
	 					&amp;quot;icons:1&amp;quot;,&lt;br /&gt;
	 					&amp;quot;quadraticSmooth&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-uaxis=&#039;[&lt;br /&gt;
	 					&amp;quot;primary&amp;quot;,&lt;br /&gt;
	 					&amp;quot;primary&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-legend=&#039;[&lt;br /&gt;
	 					&amp;quot;Wetterbedingung&amp;quot;,&lt;br /&gt;
	 					&amp;quot;Max. Temperature&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-yunit=&amp;quot;°C&amp;quot;&lt;br /&gt;
	 data-ytext=&amp;quot;Temperature (°C)&amp;quot;&lt;br /&gt;
	 data-timeformat=&amp;quot;ee\LF\dd.MM&amp;quot;&lt;br /&gt;
	 data-minvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-maxvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-minvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-maxvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-daysago_start=&amp;quot;-1w&amp;quot;&lt;br /&gt;
	 data-y_margin=&amp;quot;20&amp;quot;&lt;br /&gt;
	 data-daysago_end=&amp;quot;-3w&amp;quot;&lt;br /&gt;
	 data-xticks=&amp;quot;1440&amp;quot;&lt;br /&gt;
	 data-yticks=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-title=&amp;quot;14-Tage-Wettervorhersage&amp;quot;&lt;br /&gt;
	 data-showlegend=&amp;quot;true&amp;quot;&lt;br /&gt;
	 class=&amp;quot;nobuttons fullsize&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Kuchendiagramme===&lt;br /&gt;
In folgendem Beispiel wird gezeigt, wie man ein &amp;quot;Kuchendiagramm&amp;quot; darstellen kann.&lt;br /&gt;
&lt;br /&gt;
[[File:PieChart.png]]&lt;br /&gt;
&lt;br /&gt;
Ähnlich wie bei den Beispielen für die Wetter Darstellungen wird hierzu auch wieder logProxy benötigt. Zunächst muss die folgende zusätzliche Funktion in &amp;lt;code&amp;gt;99_myUtils.pm&amp;lt;/code&amp;gt; einfügen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#---------------------------------------&lt;br /&gt;
# Funktion zum Erzeugen der Inputs für Kuchendiagramme&lt;br /&gt;
#---------------------------------------&lt;br /&gt;
sub logProxy_values2PieChart($$$$;$$) {&lt;br /&gt;
	my ($device, $reading, $angle_start, $angle_dif, $inner_rad, $show_text) = @_;&lt;br /&gt;
	Log3 undef, 1, &amp;quot;$device, $reading, $angle_start, $angle_dif, $inner_rad, $show_text\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	use constant PI =&amp;gt; 4 * atan2(1,1);&lt;br /&gt;
	&lt;br /&gt;
	my $value=ReadingsVal($device,$reading,0);&lt;br /&gt;
&lt;br /&gt;
	my $angle_delta = $value/100*360;&lt;br /&gt;
	$angle_start = $angle_start/100*360;&lt;br /&gt;
	&lt;br /&gt;
	my $rad=10;&lt;br /&gt;
	my $irad=0;&lt;br /&gt;
	if ($inner_rad) {&lt;br /&gt;
		$irad = $rad*$inner_rad;&lt;br /&gt;
	}&lt;br /&gt;
	my $angle=$angle_start/360*2.0*PI;&lt;br /&gt;
	my $x=$irad*sin($angle);&lt;br /&gt;
	my $y=$irad*cos($angle);&lt;br /&gt;
	my $ret .= &amp;quot;;p &amp;quot;.$x.&amp;quot; &amp;quot;.$y.&amp;quot;\n&amp;quot;; # add segment at angle $angle&lt;br /&gt;
	&lt;br /&gt;
	for (my $i=$angle_start; $i&amp;lt;=$angle_start+$angle_delta; $i+=$angle_dif) {&lt;br /&gt;
		$angle = $i/360*2.0*PI;&lt;br /&gt;
		$x = $rad*sin($angle);&lt;br /&gt;
		$y = $rad*cos($angle);&lt;br /&gt;
		$ret .= &amp;quot;;p &amp;quot;.$x.&amp;quot; &amp;quot;.$y.&amp;quot;\n&amp;quot;; # add segment at angle $angle&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	$angle = ($angle_start+$angle_delta)/360*2.0*PI; # add last segment &lt;br /&gt;
	$ret .= &amp;quot;;p &amp;quot;.$rad*sin($angle).&amp;quot; &amp;quot;.$rad*cos($angle).&amp;quot;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	if ($inner_rad) {&lt;br /&gt;
		for (my $i=$angle_start; $i&amp;lt;$angle_start+$angle_delta; $i+=$angle_dif) {&lt;br /&gt;
			$angle = ($angle_start+$angle_start+$angle_delta-$i)/360*2.0*PI;&lt;br /&gt;
			$x = $irad*sin($angle);&lt;br /&gt;
			$y = $irad*cos($angle);&lt;br /&gt;
			$ret .= &amp;quot;;p &amp;quot;.$x.&amp;quot; &amp;quot;.$y.&amp;quot;\n&amp;quot;; # add segment at angle $angle&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$angle = ($angle_start)/360*2.0*PI; # add last segment &lt;br /&gt;
	$ret .= &amp;quot;;p &amp;quot;.$irad*sin($angle).&amp;quot; &amp;quot;.$irad*cos($angle).&amp;quot;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	if ($show_text) { # show text values&lt;br /&gt;
		$x = ($rad+$irad)/2*sin((2*$angle_start+$angle_delta)/2/360*2.0*PI);&lt;br /&gt;
		$y = ($rad+$irad)/2*cos((2*$angle_start+$angle_delta)/2/360*2.0*PI);&lt;br /&gt;
&lt;br /&gt;
		$ret .= &amp;quot;;t &amp;quot;.$x.&amp;quot; &amp;quot;.$y.&amp;quot; middle &amp;quot;.$show_text.&amp;quot;:&amp;quot;.$value.&amp;quot;%\n&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return($ret);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
In FHEM braucht man Readings, welche eine Zahl enthalten, die als Prozentwert interpretiert wird. Für jeden Prozentwert (also für jedes Reading) generiert die o.a. Funktion nun den Chart Input für ein Kuchenstück und liefert diesen als Antwort auf das GET, welches das Chart Widget auslöst. Dazu braucht die Funktion folgende Parameter: (Name des FHEM Devices, Name des Readings, Start Winkel des Kuchenstücks (Mathematisch gegen den Uhrzeigersinn in Grad), Delta Winkel zum Zeichnen (legt fest in welchen Schritten der Teilkreis des Kuchenstücks gezeichnet wird), Skalierungsfaktor für inneren Ring wenn ein Ring gezeichtnet werden soll (0 bedeutet komplette Kuchenstücke), optionaler Text der ins Kuchenstück vor die Prozentzahl geschrieben wird).&lt;br /&gt;
Im Folgenden eine Beispielkonfiguration für die Darstellung als Kuchendiagramm, die Readings heißen hier dPer1 bis dPer4. Der Startwinkel wird duch Aufsummierung der jeweils vorher schon gezeichneten Kuchenstücke gebildet, dadurch entstehen aneinander hängende Stücke.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
[[Datei:[[Datei:Beispiel.jpg]]]]&amp;lt;div class=&amp;quot;normal noaxes nobuttons&amp;quot;&lt;br /&gt;
        data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
        data-logdevice=&#039;[&amp;quot;lp&amp;quot;]&#039;&lt;br /&gt;
		data-logfile=&amp;quot;CURRENT&amp;quot;&lt;br /&gt;
        data-columnspec=&#039;[&lt;br /&gt;
			&amp;quot;Func:logProxy_values2PieChart(\&amp;quot;dPer1\&amp;quot;,\&amp;quot;state\&amp;quot;,ReadingsVal(\&amp;quot;dPer4\&amp;quot;,\&amp;quot;state\&amp;quot;,0)+ReadingsVal(\&amp;quot;dPer3\&amp;quot;,\&amp;quot;state\&amp;quot;,0),5,0,\&amp;quot;first\&amp;quot;)&amp;quot;,&lt;br /&gt;
			&amp;quot;Func:logProxy_values2PieChart(\&amp;quot;dPer2\&amp;quot;,\&amp;quot;state\&amp;quot;,ReadingsVal(\&amp;quot;dPer4\&amp;quot;,\&amp;quot;state\&amp;quot;,0)+ReadingsVal(\&amp;quot;dPer3\&amp;quot;,\&amp;quot;state\&amp;quot;,0)+ReadingsVal(\&amp;quot;dPer1\&amp;quot;,\&amp;quot;state\&amp;quot;,0),5,0,\&amp;quot;second\&amp;quot;)&amp;quot;,&lt;br /&gt;
			&amp;quot;Func:logProxy_values2PieChart(\&amp;quot;dPer3\&amp;quot;,\&amp;quot;state\&amp;quot;,ReadingsVal(\&amp;quot;dPer4\&amp;quot;,\&amp;quot;state\&amp;quot;,0),5,0,\&amp;quot;third\&amp;quot;)&amp;quot;,&lt;br /&gt;
			&amp;quot;Func:logProxy_values2PieChart(\&amp;quot;dPer4\&amp;quot;,\&amp;quot;state\&amp;quot;,0,5,0,\&amp;quot;fourth\&amp;quot;)&amp;quot;&lt;br /&gt;
		]&#039;&lt;br /&gt;
        data-style=&#039;[&amp;quot;ftui l0fill&amp;quot;,&amp;quot;ftui l1fill&amp;quot;,&amp;quot;ftui l2fill&amp;quot;,&amp;quot;ftui l3fill&amp;quot;]&#039;&lt;br /&gt;
        data-ptype=&#039;[&amp;quot;lines&amp;quot;]&#039;&lt;br /&gt;
        data-uaxis=&#039;[&amp;quot;primary&amp;quot;]&#039;&lt;br /&gt;
        data-legend=&#039;[&amp;quot;First&amp;quot;,&amp;quot;Second&amp;quot;,&amp;quot;Third&amp;quot;,&amp;quot;Fourth&amp;quot;]&#039;&lt;br /&gt;
		data-legendpos=&#039;[&amp;quot;left&amp;quot;,&amp;quot;top&amp;quot;]&#039;&lt;br /&gt;
        data-yunit=&amp;quot;&amp;quot;&lt;br /&gt;
        data-height=&amp;quot;300&amp;quot;&lt;br /&gt;
        data-width=&amp;quot;300&amp;quot;&lt;br /&gt;
		data-ddd=&#039;[&amp;quot;-40&amp;quot;,&amp;quot;0&amp;quot;,&amp;quot;0&amp;quot;]&#039;&lt;br /&gt;
		data-dddspace=&#039;[&amp;quot;-10&amp;quot;]&#039;&lt;br /&gt;
		data-dddwidth=&#039;[&amp;quot;10&amp;quot;]&#039;&lt;br /&gt;
		data-showlegend=&amp;quot;true&amp;quot;&lt;br /&gt;
		data-legend_horiz=&amp;quot;true&amp;quot;&lt;br /&gt;
        data-xticks=&amp;quot;auto&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Fensterstatus offen/geschlossen===&lt;br /&gt;
Dieses Beispiel zeigt, wie ein Fensterkontakt, dessen Reading die Werte &amp;lt;code&amp;gt;closed&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;open&amp;lt;/code&amp;gt; einnimmt, als Graph gezeichnet werden kann. Technisch gesehen werden hier die Werte &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; gezeichnet, indem über das Attribut &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; dem Zustand &amp;lt;code&amp;gt;open&amp;lt;/code&amp;gt; der Wert &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; und allen anderen Zuständen der Wert &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; zugeordnet wird. Über das Attribut &#039;&#039;&#039;data-yticks&#039;&#039;&#039; wird die Beschriftung an der Y-Achse (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;) gegen einen frei definierbaren Text ausgetauscht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	data-device=&amp;quot;wz_fensterstatus&amp;quot;&lt;br /&gt;
	data-logdevice=&#039;[&amp;quot;myDbLog&amp;quot;]&#039;&lt;br /&gt;
	data-logfile=&#039;[&amp;quot;HISTORY&amp;quot;]&#039;&lt;br /&gt;
	data-columnspec=&#039;[&amp;quot;wz_fensterstatus:state:0::$val=($val=~\\x22open\\x22?1:0)&amp;quot;]&#039;&lt;br /&gt;
	data-style=&#039;[&amp;quot;ftui l4fill&amp;quot;]&#039;&lt;br /&gt;
	data-ptype=&#039;[&amp;quot;steps&amp;quot;]&#039;&lt;br /&gt;
	data-height=&amp;quot;290&amp;quot;&lt;br /&gt;
	data-yticks=&#039;[[0,&amp;quot;geschlossen&amp;quot;],[1,&amp;quot;offen&amp;quot;]]&#039;&lt;br /&gt;
	data-minvalue=&amp;quot;0&amp;quot;&lt;br /&gt;
	data-maxvalue=&amp;quot;1.1&amp;quot;&lt;br /&gt;
	data-nofulldays=&amp;quot;true&amp;quot;&lt;br /&gt;
	data-daysago_start=&amp;quot;1&amp;quot;&lt;br /&gt;
	data-daysago_end=&amp;quot;-1&amp;quot;&lt;br /&gt;
	data-cursorgroup=&amp;quot;1&amp;quot;&lt;br /&gt;
	data-scrollgroup=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Das Beispiel funktioniert nur mit DbLog. Falls Logfiles verwendet werden muss statt &#039;$val&#039; &#039;$fld[&#039;&#039;num&#039;&#039;]&#039; verwendet werden. Hierbei steht &#039;&#039;num&#039;&#039; für die Spalte (beginnend bei 0) in der die Daten stehen.&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
{{Link2Forum|Topic= 48450 |Message=401006|LinkText=Thread im FHEM-Forum}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Tablet UI|Chart]]&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Maps&amp;diff=28004</id>
		<title>FTUI Widget Maps</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Maps&amp;diff=28004"/>
		<updated>2018-10-08T07:44:21Z</updated>

		<summary type="html">&lt;p&gt;Eki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das [[{{PAGENAME}}|Map Widget]] ist ein Widget zur Darstellung von Karten mit Informationen aus FHEM oder auch anderern Quellen (z.B. GEOJSON Files).&lt;br /&gt;
&lt;br /&gt;
Folgende Dinge werden berücksichtigt:&amp;lt;br&amp;gt;&lt;br /&gt;
FHEM Devices, welche eine Koordinate (longitude/latitude) als Reading/Attribut/Internal haben (z. B. Anwesenheiten auf Basis von ROOMMATE/RESIDENT/GUEST, oder das global Device als Standort von FHEM), werden als Punkt mit anpassbarem Aussehen an der entsprechenden Position auf der Karte dargestellt.&amp;lt;br&amp;gt;&lt;br /&gt;
Darüber hinaus ist es möglich, Fahrwege mit Fahrzeiten auf Basis des FHEM TRAFFIC Moduls als Pfade auf die Karte zu legen. Hierbei können die Routen eingefärbt als Linien dargestellt werden und entsprechend per InfoWindow dann Details (wie z.B. die normale Fahrzeit bzw. die Fahrzeit bei aktuellem Verkehr) dazu dargestellt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Existiert ein Reading &amp;quot;polygon&amp;quot; welches eine Liste von space separierten Koordinatenpaaren (X und Y Koordinaten jedes Paares durch &#039;,&#039; getrennt) als Wert enthält (z.B. mit &amp;quot;setreading &amp;lt;device&amp;gt; polygon 10.2488713,49.773172 10.2626042,49.7711765 10.278397,49.7682939 10.2986531,49.7671851&amp;quot; erzeugbar) so wird eine Linie auf der Karte mit den entsprechenden Koordinatenpunkten gezeichnet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die flexibelste Lösung ist die Verwendung von GEOJSON Files (müssen irgendwo per web erreichbar abgelegt werden). Diese Files können verschiedene geographische Objekte enthalten, die dann auf der Karte dargestellt werden. Das Aussehen und Verhalten der im GEOJSON File enthaltenen Objekte kann über den Parameter data-feature_style beeinflusst werden.&lt;br /&gt;
&lt;br /&gt;
Die Karte kann zusätzlich eine Darstellung der Verkehrslage als zuschaltbaren Layer enthalten (siehe unten).&lt;br /&gt;
&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Datei:2018-03-05_11h55_51.png|thumb|none|Beispiel 1 (mit Google)]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Datei:FTUI_Maps_2.png|thumb|none|Beispiel 2 (mit Google)]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Datei:FTUI_Maps_3.png|thumb|none|Beispiel 3 (mit OSM)]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
==Voraussetzungen==&lt;br /&gt;
Die Darstellung im Widget basiert entweder auf dem Google Maps API oder auf Leaflet und der Nutzung von OpenStreetMap als Kartenbasis. Wenn Google Maps verwendet wird, muss zunächst ein API Key von Google beschafft werden. Wie man diesen beschafft, kann z.B. unter [https://developers.google.com/maps/api-key-best-practices] oder [https://wiki.fhem.de/wiki/TRAFFIC] nachgelesen werden. Dieser Key muss dann im HTML File (am Besten im Header) als meta Tag eingetragen werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;GoogleMapsApiKey&amp;quot; content=&amp;quot;&amp;lt;Key&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird die Leaflet/OSM Variante verwendet (data-map_type=&amp;quot;OSM&amp;quot;), so ist zunächst kein Schlüssel für die Kartendarstellung notwendig. Will man allerdings eine Route oder die Verkehrslage darstellen, so wird ein Map API Key von TomTom benötigt (bekommt man für private Zwecke auch ohne Hinterlegung einer Kreditkarte). Hinweise wie man den besorgt, siehe unter [https://developer.tomtom.com]. Auch dieser Key muss als meta Tag in das HTML File.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;TomTomApiKey&amp;quot; content=&amp;quot;&amp;lt;Key&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus muss in diesem Fall auch noch ein Plugin von TomTom herunter geladen und in das lib/ Verzeichnis abgelegt werden. Dazu das zip File von [https://api.tomtom.com/maps-sdk-js/4.36.2/jssdk-4.36.2-distribution.zip] herunter laden und alle darin enthaltenen Dateien unter einem neuen Verzeichnis lib/tomtom/ ablegen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Attribute==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-type&#039;&#039;&#039;||Type des Widgets muss auf &amp;quot;maps&amp;quot; gesetzt werden||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-device&#039;&#039;&#039;||FHEM-Device, dessen Readings dargestellt werden sollen||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-alias&#039;&#039;&#039;||Legt fest, aus welchem Reading der Name für die Anzeige genommen werden soll||alias||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-latitude&#039;&#039;&#039;||Legt fest, aus welchem Reading die geograpfische Breite genommen werden soll||latitude||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-longitude&#039;&#039;&#039;||Legt fest, aus welchem Reading die geograpfische Länge genommen werden soll||longitude||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-language&#039;&#039;&#039;||Kann &#039;de&#039; oder &#039;en&#039; sein und stellt die Sprache für die Ausgabe in den Info Windows ein||de||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-size&#039;&#039;&#039;||Gibt die Größe des Kartenausschnittes an (als String mit &#039;&amp;lt;Breite&amp;gt;,&amp;lt;Höhe&amp;gt;&#039;), kann auch weggelassen werden, wenn es sich um ein TRAFFIC Device handelt, dann wird der Wert aus dem GoogleMapsSize Reading genommen oder, falls das auch nicht vorhanden ist, wird die Größe aus der Ausdehnung der Route(n) ermittelt.||auto||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-center&#039;&#039;&#039;||Gibt das Zentrum der Karte an (als String mit &#039;&amp;lt;Latitude&amp;gt;,&amp;lt;Longitude&amp;gt;&#039;), kann auch weggelassen werden, wenn es sich um ein TRAFFIC Device handelt, dann wird der Wert aus GoogleMapsCenter Reading genommen oder, falls das auch nicht vorhanden ist, wird das Zentrum aus der Ausdehnung der Route(n) ermittelt.||auto||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-zoom&#039;&#039;&#039;||Gibt den Zoomwert der Karte an (als integer Wert, siehe Google Maps API), kann auch weggelassen werden, wenn es sich um ein TRAFFIC Device handelt, dann wird der Wert aus dem GoogleMapsZoom Reading genommen oder, falls das auch nicht vorhanden ist, wird der Zoom Wert aus der Ausdehnung der Route(n) ermittelt.||auto||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-mapgroup&#039;&#039;&#039;||Legt fest, ob jedes Widget in eine eigene Karte zeichnen soll oder ob mehrer Informationen in einer Karte landen. Alle Widgets vom Typ &#039;maps&#039; mit dem gleichen wert für data-mapgroup zeichnen in ein und die selbe Karte||0||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-travel_mode&#039;&#039;&#039;||Gibt an, wie die Route berechnet werden soll. Es gibt die Möglichkeiten &#039;DRIVING&#039;, &#039;WALKING&#039;, &#039;BICYCLING&#039;, &#039;TRANSIT&#039; (Details siehe TRAFFIC Modul von FHEM oder Google Maps API für den &#039;Directions&#039; Service), kann auch weggelassen werden, wenn es sich um ein TRAFFIC Device handelt, dann wird der Wert aus dem trafficMode Reading genommen.||DRIVING||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-traffic&#039;&#039;&#039;||Gibt an, ob die Verkehrslage auf der Karte dargestellt werden soll||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-showdetails&#039;&#039;&#039;||Gibt an ob per Default die Info Windows eingeblendet werden sollen||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-stroke&#039;&#039;&#039;||Gibt an, wie die Fahrstrecken oder Symbole dargestellt werden sollen. Besteht aus maximal 6 Werten (Farbe Hinweg, Breite Hinweg, Durchsichtigkeit Hinweg, Farbe Rückweg, Breite Rückweg, Durchsichtigkeit Rückweg), die Farbe wird per #rrggbb angegeben, die Breite in Pixel und die Durchsichtigkeit als Prozentwert zwischen 0% und 100%, siehe auch Details zum Modul TRAFFIC. Die Symbole zur Route werden in der doppelten angegebenen Breite des Pfades dargestellt||#ffffff,7,50,#ffffff,7,50||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-icon&#039;&#039;&#039;||Hiermit kann ein Icon angegeben werden, welches statt des standardmäßigen Pfeils verwendet werden soll, um die Position zu markieren. Kann eine URL auf eine icon Datei, die relativ zum Verzeichnis www/images/ liegt sein||||&#039;default/HOME_Status.1.png&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-label&#039;&#039;&#039;||Will man statt eines Icons ein FontAwesome/Openautomation/fhemSVG Font-Icon (z.B. &#039;fa-home&#039;, &#039;oa-weather_winter&#039;, &#039;fs-usb_stick&#039;) verwenden, wird das hiermit angegeben (es kann auch icon und Font-Icon zusammen verwendet werden (z.B. ein Kreis als Icon und darin ein Font-Icon.||||fa-home&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-nightmode&#039;&#039;&#039;||legt fest, ob die Karte im Nachtmodus (dunkel) dargestellt werden soll (geht bisher noch nicht mit OSM)||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-style&#039;&#039;&#039;||Möglichkeit zum Setzen eines Styles entsprechend der Map API Options (siehe Dokumentation zu den Map APIs von Google und Leaflet)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-geojson&#039;&#039;&#039;||gibt den Namen eines Files auf dem Server an, in dem Daten zur Darstellung im GEOJSON Format (siehe [www.geojson.org]) abgelegt sind||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-feature_style&#039;&#039;&#039;||Legt fest, wie die GEOJSON Daten dargestllt werden bzw. was passiert, wenn man auf einzelne Features klickt bzw. sie mit der Maus überstreicht (Details siehe unten unter &amp;lt;&amp;gt;||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Details zu GEOJSON Files==&lt;br /&gt;
Die Datei muss auf dem Server (FHEM) liegen (also typischerweise im www/tablet Verzeichnis). Ich habe z.B. unter www/table ein Unterverzeichnis data erstellt und geben data-geojson=&amp;quot;data/file.geojson&amp;quot; an. In dem geojson file können beliebige Objekte definiert werden, das Format ist unter [www.geojson.org] nachzulesen&lt;br /&gt;
Über den Parameter data-feature_style kann man recht flexibel festlegen, wie die Objekte dargestellt werden sollen. Das Ganze ist ein js Objekt, wird also in &#039;{}&#039; eingeschlossen. Innerhalb des Objektes legen 3 Objekteigenschaften fest, wie die Darstellung aussehen soll.&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft &amp;quot;popup_properties_click&amp;quot; hat als Wert eine Leerzeichen getrennte Liste von Expressions, welche, falls sie auf Properties der Objekte im geojson File zutreffen, dazu führen, dass beim Klick auf die angezeigten Objekte ein Info Window geöffnet wird, welches die entsprechenden geojson Objekteigenschaften anzeigt.&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft &amp;quot;popup_properties_move&amp;quot; macht genau das Gleiche, allerdings sorgen die dort angegebenen Expressions dafür dass die dazu passenden geojson Objekte per Popup bei Überfahren mit der Maus und nicht bei Klick angezeigt werden und beim Verlassen mit der Maus dann auch wieder automatisch verschwinden.&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft &amp;quot;display_styles&amp;quot; legt genau fest, wie die verschiedenen geojson Objekte dargestellt werden sollen. Der Wert dieser Eigenschaft ist wiederum ein Objekt. Als Eigenschaftsname wird ein Verweis auf ein bestimmtes Objekt im geojson File verwendet. Der Verweis kann entweder eine Eigenschaft eines Objekts im geojson File sein oder eine Kombination aus Eigenschaft und Wert (also nicht alle Objekte des gleichen Typs sondern nur die, die eine auch den passenden Wert haben). Dahinter wird dann der zu verwendete Stil als weiteres Objekt angegeben, welches aus einer Menge aus Property:Value pairs besteht, bei dem die Property die Displayeigenschaft (also z.B. Farbe) und der Wert dann den dazugehörigen Wert (also z.B. rot) festlegt. Alles was nicht explizit hier festgelegt wird, wird aus den &amp;quot;globalen&amp;quot; Einstellungen (z.B. data-stroke) übernommen. Die folgende Definition generiert, wenn man das Beispielfile [[https://forum.fhem.de/index.php?action=dlattach;topic=78379.0;attach=97671|Beispieldatei]] als GEOJSON abspeichert und dann in data-geojson den Speicherort angibt, die darunter dargestellte Karte.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
data-feature_style=&#039;{&lt;br /&gt;
	&amp;quot;popup_properties_click&amp;quot;:&amp;quot;name network operator fire.*&amp;quot;,&lt;br /&gt;
	&amp;quot;popup_properties_move&amp;quot;:&amp;quot;fire.*\\:diameter&amp;quot;,&lt;br /&gt;
	&amp;quot;display_styles&amp;quot;:{&lt;br /&gt;
		&amp;quot;emergency.fire_hydrant&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;fa-fire-extinguisher&amp;quot;,&amp;quot;strokeColor&amp;quot;:&amp;quot;red&amp;quot;},&lt;br /&gt;
		&amp;quot;public_transport.station&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;fa-train&amp;quot;,&amp;quot;strokeColor&amp;quot;:&amp;quot;black&amp;quot;}}&lt;br /&gt;
}&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2018-03-05_11h55_51.png|thumb|none|Mit obigem Beispielfile und gezeigtem data-feature_style erstellte Karte]]&lt;br /&gt;
&lt;br /&gt;
Noch etwas zusätzliches: Eine gute Möglichkeit sich geojson Files zu holen (von der auch das Beispiel stammt), ist die webseite [http://overpass-turbo.eu/]. Dort kann man sich für beliebige Gebiete per Wizard eine Abfrage basteln, die dann bestimmte Infos aus Open Street Maps herausfiltert und als geojson exportieren kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Tablet UI|Maps]]&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Maps&amp;diff=28003</id>
		<title>FTUI Widget Maps</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Maps&amp;diff=28003"/>
		<updated>2018-10-08T07:43:38Z</updated>

		<summary type="html">&lt;p&gt;Eki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das [[{{PAGENAME}}|Map Widget]] ist ein Widget zur Darstellung von Karten mit Informationen aus FHEM oder auch anderern Quellen (z.B. GEOJSON Files).&lt;br /&gt;
&lt;br /&gt;
Folgende Dinge werden berücksichtigt:&amp;lt;br&amp;gt;&lt;br /&gt;
FHEM Devices, welche eine Koordinate (longitude/latitude) als Reading/Attribut/Internal haben (z. B. Anwesenheiten auf Basis von ROOMMATE/RESIDENT/GUEST, oder das global Device als Standort von FHEM), werden als Punkt mit anpassbarem Aussehen an der entsprechenden Position auf der Karte dargestellt.&amp;lt;br&amp;gt;&lt;br /&gt;
Darüber hinaus ist es möglich, Fahrwege mit Fahrzeiten auf Basis des FHEM TRAFFIC Moduls als Pfade auf die Karte zu legen. Hierbei können die Routen eingefärbt als Linien dargestellt werden und entsprechend per InfoWindow dann Details (wie z.B. die normale Fahrzeit bzw. die Fahrzeit bei aktuellem Verkehr) dazu dargestellt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Existiert ein Reading &amp;quot;polygon&amp;quot; welches eine Liste von space separierten Koordinatenpaaren (X und Y Koordinaten jedes Paares durch &#039;,&#039; getrennt) als Wert enthält (z.B. mit &amp;quot;setreading &amp;lt;device&amp;gt; polygon 10.2488713,49.773172 10.2626042,49.7711765 10.278397,49.7682939 10.2986531,49.7671851&amp;quot; erzeugbar) so wird eine Linie auf der Karte mit den entsprechenden Koordinatenpunkten gezeichnet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die flexibelste Lösung ist die Verwendung von GEOJSON Files (müssen irgendwo per web erreichbar abgelegt werden). Diese Files können verschiedene geographische Objekte enthalten, die dann auf der Karte dargestellt werden. Das Aussehen und Verhalten der im GEOJSON File enthaltenen Objekte kann über den Parameter data-feature_style beeinflusst werden.&lt;br /&gt;
&lt;br /&gt;
Die Karte kann zusätzlich eine Darstellung der Verkehrslage als zuschaltbaren Layer enthalten (siehe unten).&lt;br /&gt;
&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Datei:2018-03-05_11h55_51.png|thumb|none|Beispiel 1 (mit Google)]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Datei:FTUI_Maps_2.png|thumb|none|Beispiel 2 (mit Google)]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Datei:FTUI_Maps_3.png|thumb|none|Beispiel 3 (mit OSM)]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
==Voraussetzungen==&lt;br /&gt;
Die Darstellung im Widget basiert entweder auf dem Google Maps API oder auf Leaflet und der Nutzung von OpenStreetMap als Kartenbasis. Wenn Google Maps verwendet wird, muss zunächst ein API Key von Google beschafft werden. Wie man diesen beschafft, kann z.B. unter [https://developers.google.com/maps/api-key-best-practices] oder [https://wiki.fhem.de/wiki/TRAFFIC] nachgelesen werden. Dieser Key muss dann im HTML File (am Besten im Header) als meta Tag eingetragen werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;GoogleMapsApiKey&amp;quot; content=&amp;quot;&amp;lt;Key&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird die Leaflet/OSM Variante verwendet (data-map_type=&amp;quot;OSM&amp;quot;), so ist zunächst kein Schlüssel für die Kartendarstellung notwendig. Will man allerdings eine Route oder die Verkehrslage darstellen, so wird ein Map API Key von TomTom benötigt (bekommt man für private Zwecke auch ohne Hinterlegung einer Kreditkarte). Hinweise wie man den besorgt, siehe unter [https://developer.tomtom.com]. Auch dieser Key muss als meta Tag in das HTML File.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;TomTomApiKey&amp;quot; content=&amp;quot;&amp;lt;Key&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus muss in diesem Fall auch noch ein Plugin von TomTom herunter geladen und in das lib/ Verzeichnis abgelegt werden. Dazu das zip File von [https://api.tomtom.com/maps-sdk-js/4.36.2/jssdk-4.36.2-distribution.zip|TomTom_SDK] herunter laden und alle darin enthaltenen Dateien unter einem neuen Verzeichnis lib/tomtom/ ablegen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Attribute==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-type&#039;&#039;&#039;||Type des Widgets muss auf &amp;quot;maps&amp;quot; gesetzt werden||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-device&#039;&#039;&#039;||FHEM-Device, dessen Readings dargestellt werden sollen||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-alias&#039;&#039;&#039;||Legt fest, aus welchem Reading der Name für die Anzeige genommen werden soll||alias||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-latitude&#039;&#039;&#039;||Legt fest, aus welchem Reading die geograpfische Breite genommen werden soll||latitude||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-longitude&#039;&#039;&#039;||Legt fest, aus welchem Reading die geograpfische Länge genommen werden soll||longitude||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-language&#039;&#039;&#039;||Kann &#039;de&#039; oder &#039;en&#039; sein und stellt die Sprache für die Ausgabe in den Info Windows ein||de||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-size&#039;&#039;&#039;||Gibt die Größe des Kartenausschnittes an (als String mit &#039;&amp;lt;Breite&amp;gt;,&amp;lt;Höhe&amp;gt;&#039;), kann auch weggelassen werden, wenn es sich um ein TRAFFIC Device handelt, dann wird der Wert aus dem GoogleMapsSize Reading genommen oder, falls das auch nicht vorhanden ist, wird die Größe aus der Ausdehnung der Route(n) ermittelt.||auto||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-center&#039;&#039;&#039;||Gibt das Zentrum der Karte an (als String mit &#039;&amp;lt;Latitude&amp;gt;,&amp;lt;Longitude&amp;gt;&#039;), kann auch weggelassen werden, wenn es sich um ein TRAFFIC Device handelt, dann wird der Wert aus GoogleMapsCenter Reading genommen oder, falls das auch nicht vorhanden ist, wird das Zentrum aus der Ausdehnung der Route(n) ermittelt.||auto||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-zoom&#039;&#039;&#039;||Gibt den Zoomwert der Karte an (als integer Wert, siehe Google Maps API), kann auch weggelassen werden, wenn es sich um ein TRAFFIC Device handelt, dann wird der Wert aus dem GoogleMapsZoom Reading genommen oder, falls das auch nicht vorhanden ist, wird der Zoom Wert aus der Ausdehnung der Route(n) ermittelt.||auto||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-mapgroup&#039;&#039;&#039;||Legt fest, ob jedes Widget in eine eigene Karte zeichnen soll oder ob mehrer Informationen in einer Karte landen. Alle Widgets vom Typ &#039;maps&#039; mit dem gleichen wert für data-mapgroup zeichnen in ein und die selbe Karte||0||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-travel_mode&#039;&#039;&#039;||Gibt an, wie die Route berechnet werden soll. Es gibt die Möglichkeiten &#039;DRIVING&#039;, &#039;WALKING&#039;, &#039;BICYCLING&#039;, &#039;TRANSIT&#039; (Details siehe TRAFFIC Modul von FHEM oder Google Maps API für den &#039;Directions&#039; Service), kann auch weggelassen werden, wenn es sich um ein TRAFFIC Device handelt, dann wird der Wert aus dem trafficMode Reading genommen.||DRIVING||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-traffic&#039;&#039;&#039;||Gibt an, ob die Verkehrslage auf der Karte dargestellt werden soll||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-showdetails&#039;&#039;&#039;||Gibt an ob per Default die Info Windows eingeblendet werden sollen||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-stroke&#039;&#039;&#039;||Gibt an, wie die Fahrstrecken oder Symbole dargestellt werden sollen. Besteht aus maximal 6 Werten (Farbe Hinweg, Breite Hinweg, Durchsichtigkeit Hinweg, Farbe Rückweg, Breite Rückweg, Durchsichtigkeit Rückweg), die Farbe wird per #rrggbb angegeben, die Breite in Pixel und die Durchsichtigkeit als Prozentwert zwischen 0% und 100%, siehe auch Details zum Modul TRAFFIC. Die Symbole zur Route werden in der doppelten angegebenen Breite des Pfades dargestellt||#ffffff,7,50,#ffffff,7,50||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-icon&#039;&#039;&#039;||Hiermit kann ein Icon angegeben werden, welches statt des standardmäßigen Pfeils verwendet werden soll, um die Position zu markieren. Kann eine URL auf eine icon Datei, die relativ zum Verzeichnis www/images/ liegt sein||||&#039;default/HOME_Status.1.png&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-label&#039;&#039;&#039;||Will man statt eines Icons ein FontAwesome/Openautomation/fhemSVG Font-Icon (z.B. &#039;fa-home&#039;, &#039;oa-weather_winter&#039;, &#039;fs-usb_stick&#039;) verwenden, wird das hiermit angegeben (es kann auch icon und Font-Icon zusammen verwendet werden (z.B. ein Kreis als Icon und darin ein Font-Icon.||||fa-home&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-nightmode&#039;&#039;&#039;||legt fest, ob die Karte im Nachtmodus (dunkel) dargestellt werden soll (geht bisher noch nicht mit OSM)||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-style&#039;&#039;&#039;||Möglichkeit zum Setzen eines Styles entsprechend der Map API Options (siehe Dokumentation zu den Map APIs von Google und Leaflet)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-geojson&#039;&#039;&#039;||gibt den Namen eines Files auf dem Server an, in dem Daten zur Darstellung im GEOJSON Format (siehe [www.geojson.org]) abgelegt sind||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-feature_style&#039;&#039;&#039;||Legt fest, wie die GEOJSON Daten dargestllt werden bzw. was passiert, wenn man auf einzelne Features klickt bzw. sie mit der Maus überstreicht (Details siehe unten unter &amp;lt;&amp;gt;||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Details zu GEOJSON Files==&lt;br /&gt;
Die Datei muss auf dem Server (FHEM) liegen (also typischerweise im www/tablet Verzeichnis). Ich habe z.B. unter www/table ein Unterverzeichnis data erstellt und geben data-geojson=&amp;quot;data/file.geojson&amp;quot; an. In dem geojson file können beliebige Objekte definiert werden, das Format ist unter [www.geojson.org] nachzulesen&lt;br /&gt;
Über den Parameter data-feature_style kann man recht flexibel festlegen, wie die Objekte dargestellt werden sollen. Das Ganze ist ein js Objekt, wird also in &#039;{}&#039; eingeschlossen. Innerhalb des Objektes legen 3 Objekteigenschaften fest, wie die Darstellung aussehen soll.&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft &amp;quot;popup_properties_click&amp;quot; hat als Wert eine Leerzeichen getrennte Liste von Expressions, welche, falls sie auf Properties der Objekte im geojson File zutreffen, dazu führen, dass beim Klick auf die angezeigten Objekte ein Info Window geöffnet wird, welches die entsprechenden geojson Objekteigenschaften anzeigt.&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft &amp;quot;popup_properties_move&amp;quot; macht genau das Gleiche, allerdings sorgen die dort angegebenen Expressions dafür dass die dazu passenden geojson Objekte per Popup bei Überfahren mit der Maus und nicht bei Klick angezeigt werden und beim Verlassen mit der Maus dann auch wieder automatisch verschwinden.&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft &amp;quot;display_styles&amp;quot; legt genau fest, wie die verschiedenen geojson Objekte dargestellt werden sollen. Der Wert dieser Eigenschaft ist wiederum ein Objekt. Als Eigenschaftsname wird ein Verweis auf ein bestimmtes Objekt im geojson File verwendet. Der Verweis kann entweder eine Eigenschaft eines Objekts im geojson File sein oder eine Kombination aus Eigenschaft und Wert (also nicht alle Objekte des gleichen Typs sondern nur die, die eine auch den passenden Wert haben). Dahinter wird dann der zu verwendete Stil als weiteres Objekt angegeben, welches aus einer Menge aus Property:Value pairs besteht, bei dem die Property die Displayeigenschaft (also z.B. Farbe) und der Wert dann den dazugehörigen Wert (also z.B. rot) festlegt. Alles was nicht explizit hier festgelegt wird, wird aus den &amp;quot;globalen&amp;quot; Einstellungen (z.B. data-stroke) übernommen. Die folgende Definition generiert, wenn man das Beispielfile [[https://forum.fhem.de/index.php?action=dlattach;topic=78379.0;attach=97671|Beispieldatei]] als GEOJSON abspeichert und dann in data-geojson den Speicherort angibt, die darunter dargestellte Karte.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
data-feature_style=&#039;{&lt;br /&gt;
	&amp;quot;popup_properties_click&amp;quot;:&amp;quot;name network operator fire.*&amp;quot;,&lt;br /&gt;
	&amp;quot;popup_properties_move&amp;quot;:&amp;quot;fire.*\\:diameter&amp;quot;,&lt;br /&gt;
	&amp;quot;display_styles&amp;quot;:{&lt;br /&gt;
		&amp;quot;emergency.fire_hydrant&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;fa-fire-extinguisher&amp;quot;,&amp;quot;strokeColor&amp;quot;:&amp;quot;red&amp;quot;},&lt;br /&gt;
		&amp;quot;public_transport.station&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;fa-train&amp;quot;,&amp;quot;strokeColor&amp;quot;:&amp;quot;black&amp;quot;}}&lt;br /&gt;
}&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2018-03-05_11h55_51.png|thumb|none|Mit obigem Beispielfile und gezeigtem data-feature_style erstellte Karte]]&lt;br /&gt;
&lt;br /&gt;
Noch etwas zusätzliches: Eine gute Möglichkeit sich geojson Files zu holen (von der auch das Beispiel stammt), ist die webseite [http://overpass-turbo.eu/]. Dort kann man sich für beliebige Gebiete per Wizard eine Abfrage basteln, die dann bestimmte Infos aus Open Street Maps herausfiltert und als geojson exportieren kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Tablet UI|Maps]]&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Maps&amp;diff=28002</id>
		<title>FTUI Widget Maps</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Maps&amp;diff=28002"/>
		<updated>2018-10-08T07:42:47Z</updated>

		<summary type="html">&lt;p&gt;Eki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das [[{{PAGENAME}}|Map Widget]] ist ein Widget zur Darstellung von Karten mit Informationen aus FHEM oder auch anderern Quellen (z.B. GEOJSON Files).&lt;br /&gt;
&lt;br /&gt;
Folgende Dinge werden berücksichtigt:&amp;lt;br&amp;gt;&lt;br /&gt;
FHEM Devices, welche eine Koordinate (longitude/latitude) als Reading/Attribut/Internal haben (z. B. Anwesenheiten auf Basis von ROOMMATE/RESIDENT/GUEST, oder das global Device als Standort von FHEM), werden als Punkt mit anpassbarem Aussehen an der entsprechenden Position auf der Karte dargestellt.&amp;lt;br&amp;gt;&lt;br /&gt;
Darüber hinaus ist es möglich, Fahrwege mit Fahrzeiten auf Basis des FHEM TRAFFIC Moduls als Pfade auf die Karte zu legen. Hierbei können die Routen eingefärbt als Linien dargestellt werden und entsprechend per InfoWindow dann Details (wie z.B. die normale Fahrzeit bzw. die Fahrzeit bei aktuellem Verkehr) dazu dargestellt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Existiert ein Reading &amp;quot;polygon&amp;quot; welches eine Liste von space separierten Koordinatenpaaren (X und Y Koordinaten jedes Paares durch &#039;,&#039; getrennt) als Wert enthält (z.B. mit &amp;quot;setreading &amp;lt;device&amp;gt; polygon 10.2488713,49.773172 10.2626042,49.7711765 10.278397,49.7682939 10.2986531,49.7671851&amp;quot; erzeugbar) so wird eine Linie auf der Karte mit den entsprechenden Koordinatenpunkten gezeichnet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die flexibelste Lösung ist die Verwendung von GEOJSON Files (müssen irgendwo per web erreichbar abgelegt werden). Diese Files können verschiedene geographische Objekte enthalten, die dann auf der Karte dargestellt werden. Das Aussehen und Verhalten der im GEOJSON File enthaltenen Objekte kann über den Parameter data-feature_style beeinflusst werden.&lt;br /&gt;
&lt;br /&gt;
Die Karte kann zusätzlich eine Darstellung der Verkehrslage als zuschaltbaren Layer enthalten (siehe unten).&lt;br /&gt;
&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Datei:2018-03-05_11h55_51.png|thumb|none|Beispiel 1 (mit Google)]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Datei:FTUI_Maps_2.png|thumb|none|Beispiel 2 (mit Google)]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Datei:FTUI_Maps_3.png|thumb|none|Beispiel 3 (mit OSM)]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
==Voraussetzungen==&lt;br /&gt;
Die Darstellung im Widget basiert entweder auf dem Google Maps API oder auf Leaflet und der Nutzung von OpenStreetMap als Kartenbasis. Wenn Google Maps verwendet wird, muss zunächst ein API Key von Google beschafft werden. Wie man diesen beschafft, kann z.B. unter [https://developers.google.com/maps/api-key-best-practices] oder [https://wiki.fhem.de/wiki/TRAFFIC] nachgelesen werden. Dieser Key muss dann im HTML File (am Besten im Header) als meta Tag eingetragen werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;GoogleMapsApiKey&amp;quot; content=&amp;quot;&amp;lt;Key&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird die Leaflet/OSM Variante verwendet (data-map_type=&amp;quot;OSM&amp;quot;), so ist zunächst kein Schlüssel für die Kartendarstellung notwendig. Will man allerdings eine Route oder die Verkehrslage darstellen, so wird ein Map API Key von TomTom benötigt (bekommt man für private Zwecke auch ohne Hinterlegung einer Kreditkarte). Hinweise wie man den besorgt, siehe unter [https://developer.tomtom.com]. Auch dieser Key muss als meta Tag in das HTML File.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;TomTomApiKey&amp;quot; content=&amp;quot;&amp;lt;Key&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus muss in diesem Fall auch noch ein Plugin von TomTom herunter geladen und in das lib/ Verzeichnis abgelegt werden. Dazu das zip File von [https://api.tomtom.com/maps-sdk-js/4.36.2/jssdk-4.36.2-distribution.zip|TomTomSDK] herunter laden und alle darin enthaltenen Dateien unter einem neuen Verzeichnis lib/tomtom/ ablegen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Attribute==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-type&#039;&#039;&#039;||Type des Widgets muss auf &amp;quot;maps&amp;quot; gesetzt werden||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-device&#039;&#039;&#039;||FHEM-Device, dessen Readings dargestellt werden sollen||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-alias&#039;&#039;&#039;||Legt fest, aus welchem Reading der Name für die Anzeige genommen werden soll||alias||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-latitude&#039;&#039;&#039;||Legt fest, aus welchem Reading die geograpfische Breite genommen werden soll||latitude||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-longitude&#039;&#039;&#039;||Legt fest, aus welchem Reading die geograpfische Länge genommen werden soll||longitude||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-language&#039;&#039;&#039;||Kann &#039;de&#039; oder &#039;en&#039; sein und stellt die Sprache für die Ausgabe in den Info Windows ein||de||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-size&#039;&#039;&#039;||Gibt die Größe des Kartenausschnittes an (als String mit &#039;&amp;lt;Breite&amp;gt;,&amp;lt;Höhe&amp;gt;&#039;), kann auch weggelassen werden, wenn es sich um ein TRAFFIC Device handelt, dann wird der Wert aus dem GoogleMapsSize Reading genommen oder, falls das auch nicht vorhanden ist, wird die Größe aus der Ausdehnung der Route(n) ermittelt.||auto||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-center&#039;&#039;&#039;||Gibt das Zentrum der Karte an (als String mit &#039;&amp;lt;Latitude&amp;gt;,&amp;lt;Longitude&amp;gt;&#039;), kann auch weggelassen werden, wenn es sich um ein TRAFFIC Device handelt, dann wird der Wert aus GoogleMapsCenter Reading genommen oder, falls das auch nicht vorhanden ist, wird das Zentrum aus der Ausdehnung der Route(n) ermittelt.||auto||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-zoom&#039;&#039;&#039;||Gibt den Zoomwert der Karte an (als integer Wert, siehe Google Maps API), kann auch weggelassen werden, wenn es sich um ein TRAFFIC Device handelt, dann wird der Wert aus dem GoogleMapsZoom Reading genommen oder, falls das auch nicht vorhanden ist, wird der Zoom Wert aus der Ausdehnung der Route(n) ermittelt.||auto||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-mapgroup&#039;&#039;&#039;||Legt fest, ob jedes Widget in eine eigene Karte zeichnen soll oder ob mehrer Informationen in einer Karte landen. Alle Widgets vom Typ &#039;maps&#039; mit dem gleichen wert für data-mapgroup zeichnen in ein und die selbe Karte||0||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-travel_mode&#039;&#039;&#039;||Gibt an, wie die Route berechnet werden soll. Es gibt die Möglichkeiten &#039;DRIVING&#039;, &#039;WALKING&#039;, &#039;BICYCLING&#039;, &#039;TRANSIT&#039; (Details siehe TRAFFIC Modul von FHEM oder Google Maps API für den &#039;Directions&#039; Service), kann auch weggelassen werden, wenn es sich um ein TRAFFIC Device handelt, dann wird der Wert aus dem trafficMode Reading genommen.||DRIVING||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-traffic&#039;&#039;&#039;||Gibt an, ob die Verkehrslage auf der Karte dargestellt werden soll||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-showdetails&#039;&#039;&#039;||Gibt an ob per Default die Info Windows eingeblendet werden sollen||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-stroke&#039;&#039;&#039;||Gibt an, wie die Fahrstrecken oder Symbole dargestellt werden sollen. Besteht aus maximal 6 Werten (Farbe Hinweg, Breite Hinweg, Durchsichtigkeit Hinweg, Farbe Rückweg, Breite Rückweg, Durchsichtigkeit Rückweg), die Farbe wird per #rrggbb angegeben, die Breite in Pixel und die Durchsichtigkeit als Prozentwert zwischen 0% und 100%, siehe auch Details zum Modul TRAFFIC. Die Symbole zur Route werden in der doppelten angegebenen Breite des Pfades dargestellt||#ffffff,7,50,#ffffff,7,50||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-icon&#039;&#039;&#039;||Hiermit kann ein Icon angegeben werden, welches statt des standardmäßigen Pfeils verwendet werden soll, um die Position zu markieren. Kann eine URL auf eine icon Datei, die relativ zum Verzeichnis www/images/ liegt sein||||&#039;default/HOME_Status.1.png&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-label&#039;&#039;&#039;||Will man statt eines Icons ein FontAwesome/Openautomation/fhemSVG Font-Icon (z.B. &#039;fa-home&#039;, &#039;oa-weather_winter&#039;, &#039;fs-usb_stick&#039;) verwenden, wird das hiermit angegeben (es kann auch icon und Font-Icon zusammen verwendet werden (z.B. ein Kreis als Icon und darin ein Font-Icon.||||fa-home&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-nightmode&#039;&#039;&#039;||legt fest, ob die Karte im Nachtmodus (dunkel) dargestellt werden soll (geht bisher noch nicht mit OSM)||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-style&#039;&#039;&#039;||Möglichkeit zum Setzen eines Styles entsprechend der Map API Options (siehe Dokumentation zu den Map APIs von Google und Leaflet)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-geojson&#039;&#039;&#039;||gibt den Namen eines Files auf dem Server an, in dem Daten zur Darstellung im GEOJSON Format (siehe [www.geojson.org]) abgelegt sind||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-feature_style&#039;&#039;&#039;||Legt fest, wie die GEOJSON Daten dargestllt werden bzw. was passiert, wenn man auf einzelne Features klickt bzw. sie mit der Maus überstreicht (Details siehe unten unter &amp;lt;&amp;gt;||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Details zu GEOJSON Files==&lt;br /&gt;
Die Datei muss auf dem Server (FHEM) liegen (also typischerweise im www/tablet Verzeichnis). Ich habe z.B. unter www/table ein Unterverzeichnis data erstellt und geben data-geojson=&amp;quot;data/file.geojson&amp;quot; an. In dem geojson file können beliebige Objekte definiert werden, das Format ist unter [www.geojson.org] nachzulesen&lt;br /&gt;
Über den Parameter data-feature_style kann man recht flexibel festlegen, wie die Objekte dargestellt werden sollen. Das Ganze ist ein js Objekt, wird also in &#039;{}&#039; eingeschlossen. Innerhalb des Objektes legen 3 Objekteigenschaften fest, wie die Darstellung aussehen soll.&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft &amp;quot;popup_properties_click&amp;quot; hat als Wert eine Leerzeichen getrennte Liste von Expressions, welche, falls sie auf Properties der Objekte im geojson File zutreffen, dazu führen, dass beim Klick auf die angezeigten Objekte ein Info Window geöffnet wird, welches die entsprechenden geojson Objekteigenschaften anzeigt.&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft &amp;quot;popup_properties_move&amp;quot; macht genau das Gleiche, allerdings sorgen die dort angegebenen Expressions dafür dass die dazu passenden geojson Objekte per Popup bei Überfahren mit der Maus und nicht bei Klick angezeigt werden und beim Verlassen mit der Maus dann auch wieder automatisch verschwinden.&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft &amp;quot;display_styles&amp;quot; legt genau fest, wie die verschiedenen geojson Objekte dargestellt werden sollen. Der Wert dieser Eigenschaft ist wiederum ein Objekt. Als Eigenschaftsname wird ein Verweis auf ein bestimmtes Objekt im geojson File verwendet. Der Verweis kann entweder eine Eigenschaft eines Objekts im geojson File sein oder eine Kombination aus Eigenschaft und Wert (also nicht alle Objekte des gleichen Typs sondern nur die, die eine auch den passenden Wert haben). Dahinter wird dann der zu verwendete Stil als weiteres Objekt angegeben, welches aus einer Menge aus Property:Value pairs besteht, bei dem die Property die Displayeigenschaft (also z.B. Farbe) und der Wert dann den dazugehörigen Wert (also z.B. rot) festlegt. Alles was nicht explizit hier festgelegt wird, wird aus den &amp;quot;globalen&amp;quot; Einstellungen (z.B. data-stroke) übernommen. Die folgende Definition generiert, wenn man das Beispielfile [[https://forum.fhem.de/index.php?action=dlattach;topic=78379.0;attach=97671|Beispieldatei]] als GEOJSON abspeichert und dann in data-geojson den Speicherort angibt, die darunter dargestellte Karte.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
data-feature_style=&#039;{&lt;br /&gt;
	&amp;quot;popup_properties_click&amp;quot;:&amp;quot;name network operator fire.*&amp;quot;,&lt;br /&gt;
	&amp;quot;popup_properties_move&amp;quot;:&amp;quot;fire.*\\:diameter&amp;quot;,&lt;br /&gt;
	&amp;quot;display_styles&amp;quot;:{&lt;br /&gt;
		&amp;quot;emergency.fire_hydrant&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;fa-fire-extinguisher&amp;quot;,&amp;quot;strokeColor&amp;quot;:&amp;quot;red&amp;quot;},&lt;br /&gt;
		&amp;quot;public_transport.station&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;fa-train&amp;quot;,&amp;quot;strokeColor&amp;quot;:&amp;quot;black&amp;quot;}}&lt;br /&gt;
}&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2018-03-05_11h55_51.png|thumb|none|Mit obigem Beispielfile und gezeigtem data-feature_style erstellte Karte]]&lt;br /&gt;
&lt;br /&gt;
Noch etwas zusätzliches: Eine gute Möglichkeit sich geojson Files zu holen (von der auch das Beispiel stammt), ist die webseite [http://overpass-turbo.eu/]. Dort kann man sich für beliebige Gebiete per Wizard eine Abfrage basteln, die dann bestimmte Infos aus Open Street Maps herausfiltert und als geojson exportieren kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Tablet UI|Maps]]&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Maps&amp;diff=28001</id>
		<title>FTUI Widget Maps</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Maps&amp;diff=28001"/>
		<updated>2018-10-08T07:41:45Z</updated>

		<summary type="html">&lt;p&gt;Eki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das [[{{PAGENAME}}|Map Widget]] ist ein Widget zur Darstellung von Karten mit Informationen aus FHEM oder auch anderern Quellen (z.B. GEOJSON Files).&lt;br /&gt;
&lt;br /&gt;
Folgende Dinge werden berücksichtigt:&amp;lt;br&amp;gt;&lt;br /&gt;
FHEM Devices, welche eine Koordinate (longitude/latitude) als Reading/Attribut/Internal haben (z. B. Anwesenheiten auf Basis von ROOMMATE/RESIDENT/GUEST, oder das global Device als Standort von FHEM), werden als Punkt mit anpassbarem Aussehen an der entsprechenden Position auf der Karte dargestellt.&amp;lt;br&amp;gt;&lt;br /&gt;
Darüber hinaus ist es möglich, Fahrwege mit Fahrzeiten auf Basis des FHEM TRAFFIC Moduls als Pfade auf die Karte zu legen. Hierbei können die Routen eingefärbt als Linien dargestellt werden und entsprechend per InfoWindow dann Details (wie z.B. die normale Fahrzeit bzw. die Fahrzeit bei aktuellem Verkehr) dazu dargestellt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Existiert ein Reading &amp;quot;polygon&amp;quot; welches eine Liste von space separierten Koordinatenpaaren (X und Y Koordinaten jedes Paares durch &#039;,&#039; getrennt) als Wert enthält (z.B. mit &amp;quot;setreading &amp;lt;device&amp;gt; polygon 10.2488713,49.773172 10.2626042,49.7711765 10.278397,49.7682939 10.2986531,49.7671851&amp;quot; erzeugbar) so wird eine Linie auf der Karte mit den entsprechenden Koordinatenpunkten gezeichnet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die flexibelste Lösung ist die Verwendung von GEOJSON Files (müssen irgendwo per web erreichbar abgelegt werden). Diese Files können verschiedene geographische Objekte enthalten, die dann auf der Karte dargestellt werden. Das Aussehen und Verhalten der im GEOJSON File enthaltenen Objekte kann über den Parameter data-feature_style beeinflusst werden.&lt;br /&gt;
&lt;br /&gt;
Die Karte kann zusätzlich eine Darstellung der Verkehrslage als zuschaltbaren Layer enthalten (siehe unten).&lt;br /&gt;
&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Datei:2018-03-05_11h55_51.png|thumb|none|Beispiel 1 (mit Google)]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Datei:FTUI_Maps_2.png|thumb|none|Beispiel 2 (mit Google)]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Datei:FTUI_Maps_3.png|thumb|none|Beispiel 3 (mit OSM)]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
==Voraussetzungen==&lt;br /&gt;
Die Darstellung im Widget basiert entweder auf dem Google Maps API oder auf Leaflet und der Nutzung von OpenStreetMap als Kartenbasis. Wenn Google Maps verwendet wird, muss zunächst ein API Key von Google beschafft werden. Wie man diesen beschafft, kann z.B. unter [https://developers.google.com/maps/api-key-best-practices] oder [https://wiki.fhem.de/wiki/TRAFFIC] nachgelesen werden. Dieser Key muss dann im HTML File (am Besten im Header) als meta Tag eingetragen werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;GoogleMapsApiKey&amp;quot; content=&amp;quot;&amp;lt;Key&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird die Leaflet/OSM Variante verwendet (data-map_type=&amp;quot;OSM&amp;quot;), so ist zunächst kein Schlüssel für die Kartendarstellung notwendig. Will man allerdings eine Route oder die Verkehrslage darstellen, so wird ein Map API Key von TomTom benötigt (bekommt man für private Zwecke auch ohne Hinterlegung einer Kreditkarte). Hinweise wie man den besorgt, siehe unter [https://developer.tomtom.com]. Auch dieser Key muss als meta Tag in das HTML File.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;meta name=&amp;quot;TomTomApiKey&amp;quot; content=&amp;quot;&amp;lt;Key&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus muss in diesem Fall auch noch ein Plugin von TomTom herunter geladen und in das lib/ Verzeichnis abgelegt werden. Dazu das zip File von [https://api.tomtom.com/maps-sdk-js/4.36.2/jssdk-4.36.2-distribution.zip|TomTomSDK] herunter laden und alle darin enthaltenen Dateien unter einem neuen Verzeichnis lib/tomtom/ ablegen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Attribute==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-type&#039;&#039;&#039;||Type des Widgets muss auf &amp;quot;maps&amp;quot; gesetzt werden||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-device&#039;&#039;&#039;||FHEM-Device, dessen Readings dargestellt werden sollen||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-alias&#039;&#039;&#039;||Legt fest, aus welchem Reading der Name für die Anzeige genommen werden soll||alias||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-latitude&#039;&#039;&#039;||Legt fest, aus welchem Reading die geograpfische Breite genommen werden soll||latitude||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-longitude&#039;&#039;&#039;||Legt fest, aus welchem Reading die geograpfische Länge genommen werden soll||longitude||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-language&#039;&#039;&#039;||Kann &#039;de&#039; oder &#039;en&#039; sein und stellt die Sprache für die Ausgabe in den Info Windows ein||de||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-size&#039;&#039;&#039;||Gibt die Größe des Kartenausschnittes an (als String mit &#039;&amp;lt;Breite&amp;gt;,&amp;lt;Höhe&amp;gt;&#039;), kann auch weggelassen werden, wenn es sich um ein TRAFFIC Device handelt, dann wird der Wert aus dem GoogleMapsSize Reading genommen oder, falls das auch nicht vorhanden ist, wird die Größe aus der Ausdehnung der Route(n) ermittelt.||auto||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-center&#039;&#039;&#039;||Gibt das Zentrum der Karte an (als String mit &#039;&amp;lt;Latitude&amp;gt;,&amp;lt;Longitude&amp;gt;&#039;), kann auch weggelassen werden, wenn es sich um ein TRAFFIC Device handelt, dann wird der Wert aus GoogleMapsCenter Reading genommen oder, falls das auch nicht vorhanden ist, wird das Zentrum aus der Ausdehnung der Route(n) ermittelt.||auto||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-zoom&#039;&#039;&#039;||Gibt den Zoomwert der Karte an (als integer Wert, siehe Google Maps API), kann auch weggelassen werden, wenn es sich um ein TRAFFIC Device handelt, dann wird der Wert aus dem GoogleMapsZoom Reading genommen oder, falls das auch nicht vorhanden ist, wird der Zoom Wert aus der Ausdehnung der Route(n) ermittelt.||auto||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-mapgroup&#039;&#039;&#039;||Legt fest, ob jedes Widget in eine eigene Karte zeichnen soll oder ob mehrer Informationen in einer Karte landen. Alle Widgets vom Typ &#039;maps&#039; mit dem gleichen wert für data-mapgroup zeichnen in ein und die selbe Karte||0||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-travel_mode&#039;&#039;&#039;||Gibt an, wie die Route berechnet werden soll. Es gibt die Möglichkeiten &#039;DRIVING&#039;, &#039;WALKING&#039;, &#039;BICYCLING&#039;, &#039;TRANSIT&#039; (Details siehe TRAFFIC Modul von FHEM oder Google Maps API für den &#039;Directions&#039; Service), kann auch weggelassen werden, wenn es sich um ein TRAFFIC Device handelt, dann wird der Wert aus dem trafficMode Reading genommen.||DRIVING||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-traffic&#039;&#039;&#039;||Gibt an, ob die Verkehrslage auf der Karte dargestellt werden soll||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-showdetails&#039;&#039;&#039;||Gibt an ob per Default die Info Windows eingeblendet werden sollen||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-stroke&#039;&#039;&#039;||Gibt an, wie die Fahrstrecken oder Symbole dargestellt werden sollen. Besteht aus maximal 6 Werten (Farbe Hinweg, Breite Hinweg, Durchsichtigkeit Hinweg, Farbe Rückweg, Breite Rückweg, Durchsichtigkeit Rückweg), die Farbe wird per #rrggbb angegeben, die Breite in Pixel und die Durchsichtigkeit als Prozentwert zwischen 0% und 100%, siehe auch Details zum Modul TRAFFIC. Die Symbole zur Route werden in der doppelten angegebenen Breite des Pfades dargestellt||#ffffff,7,50,#ffffff,7,50||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-icon&#039;&#039;&#039;||Hiermit kann ein Icon angegeben werden, welches statt des standardmäßigen Pfeils verwendet werden soll, um die Position zu markieren. Kann eine URL auf eine icon Datei, die relativ zum Verzeichnis www/images/ liegt sein||||&#039;default/HOME_Status.1.png&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-label&#039;&#039;&#039;||Will man statt eines Icons ein FontAwesome/Openautomation/fhemSVG Font-Icon (z.B. &#039;fa-home&#039;, &#039;oa-weather_winter&#039;, &#039;fs-usb_stick&#039;) verwenden, wird das hiermit angegeben (es kann auch icon und Font-Icon zusammen verwendet werden (z.B. ein Kreis als Icon und darin ein Font-Icon.||||fa-home&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-nightmode&#039;&#039;&#039;||legt fest, ob die Karte im Nachtmodus (dunkel) dargestellt werden soll (geht bisher noch nicht mit OSM)||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-style&#039;&#039;&#039;||Möglichkeit zum Setzen eines Styles entsprechend der Map API Options (siehe Dokumentation zu den Map APIs von Google und Leaflet)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-geojson&#039;&#039;&#039;||gibt den Namen eines Files auf dem Server an, in dem Daten zur Darstellung im GEOJSON Format (siehe [www.geojson.org]) abgelegt sind||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-feature_style&#039;&#039;&#039;||Legt fest, wie die GEOJSON Daten dargestllt werden bzw. was passiert, wenn man auf einzelne Features klickt bzw. sie mit der Maus überstreicht (Details siehe unten unter &amp;lt;&amp;gt;||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Details zu GEOJSON Files==&lt;br /&gt;
Die Datei muss auf dem Server (FHEM) liegen (also typischerweise im www/tablet Verzeichnis). Ich habe z.B. unter www/table ein Unterverzeichnis data erstellt und geben data-geojson=&amp;quot;data/file.geojson&amp;quot; an. In dem geojson file können beliebige Objekte definiert werden, das Format ist unter [www.geojson.org] nachzulesen&lt;br /&gt;
Über den Parameter data-feature_style kann man recht flexibel festlegen, wie die Objekte dargestellt werden sollen. Das Ganze ist ein js Objekt, wird also in &#039;{}&#039; eingeschlossen. Innerhalb des Objektes legen 3 Objekteigenschaften fest, wie die Darstellung aussehen soll.&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft &amp;quot;popup_properties_click&amp;quot; hat als Wert eine Leerzeichen getrennte Liste von Expressions, welche, falls sie auf Properties der Objekte im geojson File zutreffen, dazu führen, dass beim Klick auf die angezeigten Objekte ein Info Window geöffnet wird, welches die entsprechenden geojson Objekteigenschaften anzeigt.&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft &amp;quot;popup_properties_move&amp;quot; macht genau das Gleiche, allerdings sorgen die dort angegebenen Expressions dafür dass die dazu passenden geojson Objekte per Popup bei Überfahren mit der Maus und nicht bei Klick angezeigt werden und beim Verlassen mit der Maus dann auch wieder automatisch verschwinden.&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft &amp;quot;display_styles&amp;quot; legt genau fest, wie die verschiedenen geojson Objekte dargestellt werden sollen. Der Wert dieser Eigenschaft ist wiederum ein Objekt. Als Eigenschaftsname wird ein Verweis auf ein bestimmtes Objekt im geojson File verwendet. Der Verweis kann entweder eine Eigenschaft eines Objekts im geojson File sein oder eine Kombination aus Eigenschaft und Wert (also nicht alle Objekte des gleichen Typs sondern nur die, die eine auch den passenden Wert haben). Dahinter wird dann der zu verwendete Stil als weiteres Objekt angegeben, welches aus einer Menge aus Property:Value pairs besteht, bei dem die Property die Displayeigenschaft (also z.B. Farbe) und der Wert dann den dazugehörigen Wert (also z.B. rot) festlegt. Alles was nicht explizit hier festgelegt wird, wird aus den &amp;quot;globalen&amp;quot; Einstellungen (z.B. data-stroke) übernommen. Die folgende Definition generiert, wenn man das Beispielfile [[https://forum.fhem.de/index.php?action=dlattach;topic=78379.0;attach=97671|Beispieldatei]] als GEOJSON abspeichert und dann in data-geojson den Speicherort angibt, die darunter dargestellte Karte.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
data-feature_style=&#039;{&lt;br /&gt;
	&amp;quot;popup_properties_click&amp;quot;:&amp;quot;name network operator fire.*&amp;quot;,&lt;br /&gt;
	&amp;quot;popup_properties_move&amp;quot;:&amp;quot;fire.*\\:diameter&amp;quot;,&lt;br /&gt;
	&amp;quot;display_styles&amp;quot;:{&lt;br /&gt;
		&amp;quot;emergency.fire_hydrant&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;fa-fire-extinguisher&amp;quot;,&amp;quot;strokeColor&amp;quot;:&amp;quot;red&amp;quot;},&lt;br /&gt;
		&amp;quot;public_transport.station&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;fa-train&amp;quot;,&amp;quot;strokeColor&amp;quot;:&amp;quot;black&amp;quot;}}&lt;br /&gt;
}&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2018-03-05_11h55_51.png|thumb|none|Mit obigem Beispielfile und gezeigtem data-feature_style erstellte Karte]]&lt;br /&gt;
&lt;br /&gt;
Noch etwas zusätzliches: Eine gute Möglichkeit sich geojson Files zu holen (von der auch das Beispiel stammt), ist die webseite [http://overpass-turbo.eu/]. Dort kann man sich für beliebige Gebiete per Wizard eine Abfrage basteln, die dann bestimmte Infos aus Open Street Maps herausfiltert und als geojson exportieren kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Tablet UI|Maps]]&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Maps&amp;diff=28000</id>
		<title>FTUI Widget Maps</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Maps&amp;diff=28000"/>
		<updated>2018-10-08T07:40:48Z</updated>

		<summary type="html">&lt;p&gt;Eki: Hinweis auf TomTom plugin download&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das [[{{PAGENAME}}|Map Widget]] ist ein Widget zur Darstellung von Karten mit Informationen aus FHEM oder auch anderern Quellen (z.B. GEOJSON Files).&lt;br /&gt;
&lt;br /&gt;
Folgende Dinge werden berücksichtigt:&amp;lt;br&amp;gt;&lt;br /&gt;
FHEM Devices, welche eine Koordinate (longitude/latitude) als Reading/Attribut/Internal haben (z. B. Anwesenheiten auf Basis von ROOMMATE/RESIDENT/GUEST, oder das global Device als Standort von FHEM), werden als Punkt mit anpassbarem Aussehen an der entsprechenden Position auf der Karte dargestellt.&amp;lt;br&amp;gt;&lt;br /&gt;
Darüber hinaus ist es möglich, Fahrwege mit Fahrzeiten auf Basis des FHEM TRAFFIC Moduls als Pfade auf die Karte zu legen. Hierbei können die Routen eingefärbt als Linien dargestellt werden und entsprechend per InfoWindow dann Details (wie z.B. die normale Fahrzeit bzw. die Fahrzeit bei aktuellem Verkehr) dazu dargestellt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Existiert ein Reading &amp;quot;polygon&amp;quot; welches eine Liste von space separierten Koordinatenpaaren (X und Y Koordinaten jedes Paares durch &#039;,&#039; getrennt) als Wert enthält (z.B. mit &amp;quot;setreading &amp;lt;device&amp;gt; polygon 10.2488713,49.773172 10.2626042,49.7711765 10.278397,49.7682939 10.2986531,49.7671851&amp;quot; erzeugbar) so wird eine Linie auf der Karte mit den entsprechenden Koordinatenpunkten gezeichnet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die flexibelste Lösung ist die Verwendung von GEOJSON Files (müssen irgendwo per web erreichbar abgelegt werden). Diese Files können verschiedene geographische Objekte enthalten, die dann auf der Karte dargestellt werden. Das Aussehen und Verhalten der im GEOJSON File enthaltenen Objekte kann über den Parameter data-feature_style beeinflusst werden.&lt;br /&gt;
&lt;br /&gt;
Die Karte kann zusätzlich eine Darstellung der Verkehrslage als zuschaltbaren Layer enthalten (siehe unten).&lt;br /&gt;
&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Datei:2018-03-05_11h55_51.png|thumb|none|Beispiel 1 (mit Google)]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Datei:FTUI_Maps_2.png|thumb|none|Beispiel 2 (mit Google)]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Datei:FTUI_Maps_3.png|thumb|none|Beispiel 3 (mit OSM)]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
==Voraussetzungen==&lt;br /&gt;
Die Darstellung im Widget basiert entweder auf dem Google Maps API oder auf Leaflet und der Nutzung von OpenStreetMap als Kartenbasis. Wenn Google Maps verwendet wird, muss zunächst ein API Key von Google beschafft werden. Wie man diesen beschafft, kann z.B. unter [https://developers.google.com/maps/api-key-best-practices] oder [https://wiki.fhem.de/wiki/TRAFFIC] nachgelesen werden. Dieser Key muss dann im HTML File (am Besten im Header) als meta Tag eingetragen werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;GoogleMapsApiKey&amp;quot; content=&amp;quot;&amp;lt;Key&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird die Leaflet/OSM Variante verwendet (data-map_type=&amp;quot;OSM&amp;quot;), so ist zunächst kein Schlüssel für die Kartendarstellung notwendig. Will man allerdings eine Route oder die Verkehrslage darstellen, so wird ein Map API Key von TomTom benötigt (bekommt man für private Zwecke auch ohne Hinterlegung einer Kreditkarte). Hinweise wie man den besorgt, siehe unter [https://developer.tomtom.com]. Auch dieser Key muss als meta Tag in das HTML File.&lt;br /&gt;
Darüber hinaus muss in diesem Fall auch noch ein Plugin von TomTom herunter geladen werden und in das lib/ Verzeichnis abgelegt werden. Dazu das zip File von [https://api.tomtom.com/maps-sdk-js/4.36.2/jssdk-4.36.2-distribution.zip|TomTom SDK] herunter laden und alle darin enthaltenen Dateien unter einem neuen Verzeichnis lib/tomtom/ ablegen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;TomTomApiKey&amp;quot; content=&amp;quot;&amp;lt;Key&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Attribute==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-type&#039;&#039;&#039;||Type des Widgets muss auf &amp;quot;maps&amp;quot; gesetzt werden||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-device&#039;&#039;&#039;||FHEM-Device, dessen Readings dargestellt werden sollen||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-alias&#039;&#039;&#039;||Legt fest, aus welchem Reading der Name für die Anzeige genommen werden soll||alias||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-latitude&#039;&#039;&#039;||Legt fest, aus welchem Reading die geograpfische Breite genommen werden soll||latitude||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-longitude&#039;&#039;&#039;||Legt fest, aus welchem Reading die geograpfische Länge genommen werden soll||longitude||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-language&#039;&#039;&#039;||Kann &#039;de&#039; oder &#039;en&#039; sein und stellt die Sprache für die Ausgabe in den Info Windows ein||de||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-size&#039;&#039;&#039;||Gibt die Größe des Kartenausschnittes an (als String mit &#039;&amp;lt;Breite&amp;gt;,&amp;lt;Höhe&amp;gt;&#039;), kann auch weggelassen werden, wenn es sich um ein TRAFFIC Device handelt, dann wird der Wert aus dem GoogleMapsSize Reading genommen oder, falls das auch nicht vorhanden ist, wird die Größe aus der Ausdehnung der Route(n) ermittelt.||auto||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-center&#039;&#039;&#039;||Gibt das Zentrum der Karte an (als String mit &#039;&amp;lt;Latitude&amp;gt;,&amp;lt;Longitude&amp;gt;&#039;), kann auch weggelassen werden, wenn es sich um ein TRAFFIC Device handelt, dann wird der Wert aus GoogleMapsCenter Reading genommen oder, falls das auch nicht vorhanden ist, wird das Zentrum aus der Ausdehnung der Route(n) ermittelt.||auto||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-zoom&#039;&#039;&#039;||Gibt den Zoomwert der Karte an (als integer Wert, siehe Google Maps API), kann auch weggelassen werden, wenn es sich um ein TRAFFIC Device handelt, dann wird der Wert aus dem GoogleMapsZoom Reading genommen oder, falls das auch nicht vorhanden ist, wird der Zoom Wert aus der Ausdehnung der Route(n) ermittelt.||auto||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-mapgroup&#039;&#039;&#039;||Legt fest, ob jedes Widget in eine eigene Karte zeichnen soll oder ob mehrer Informationen in einer Karte landen. Alle Widgets vom Typ &#039;maps&#039; mit dem gleichen wert für data-mapgroup zeichnen in ein und die selbe Karte||0||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-travel_mode&#039;&#039;&#039;||Gibt an, wie die Route berechnet werden soll. Es gibt die Möglichkeiten &#039;DRIVING&#039;, &#039;WALKING&#039;, &#039;BICYCLING&#039;, &#039;TRANSIT&#039; (Details siehe TRAFFIC Modul von FHEM oder Google Maps API für den &#039;Directions&#039; Service), kann auch weggelassen werden, wenn es sich um ein TRAFFIC Device handelt, dann wird der Wert aus dem trafficMode Reading genommen.||DRIVING||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-traffic&#039;&#039;&#039;||Gibt an, ob die Verkehrslage auf der Karte dargestellt werden soll||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-showdetails&#039;&#039;&#039;||Gibt an ob per Default die Info Windows eingeblendet werden sollen||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-stroke&#039;&#039;&#039;||Gibt an, wie die Fahrstrecken oder Symbole dargestellt werden sollen. Besteht aus maximal 6 Werten (Farbe Hinweg, Breite Hinweg, Durchsichtigkeit Hinweg, Farbe Rückweg, Breite Rückweg, Durchsichtigkeit Rückweg), die Farbe wird per #rrggbb angegeben, die Breite in Pixel und die Durchsichtigkeit als Prozentwert zwischen 0% und 100%, siehe auch Details zum Modul TRAFFIC. Die Symbole zur Route werden in der doppelten angegebenen Breite des Pfades dargestellt||#ffffff,7,50,#ffffff,7,50||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-icon&#039;&#039;&#039;||Hiermit kann ein Icon angegeben werden, welches statt des standardmäßigen Pfeils verwendet werden soll, um die Position zu markieren. Kann eine URL auf eine icon Datei, die relativ zum Verzeichnis www/images/ liegt sein||||&#039;default/HOME_Status.1.png&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-label&#039;&#039;&#039;||Will man statt eines Icons ein FontAwesome/Openautomation/fhemSVG Font-Icon (z.B. &#039;fa-home&#039;, &#039;oa-weather_winter&#039;, &#039;fs-usb_stick&#039;) verwenden, wird das hiermit angegeben (es kann auch icon und Font-Icon zusammen verwendet werden (z.B. ein Kreis als Icon und darin ein Font-Icon.||||fa-home&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-nightmode&#039;&#039;&#039;||legt fest, ob die Karte im Nachtmodus (dunkel) dargestellt werden soll (geht bisher noch nicht mit OSM)||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-style&#039;&#039;&#039;||Möglichkeit zum Setzen eines Styles entsprechend der Map API Options (siehe Dokumentation zu den Map APIs von Google und Leaflet)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-geojson&#039;&#039;&#039;||gibt den Namen eines Files auf dem Server an, in dem Daten zur Darstellung im GEOJSON Format (siehe [www.geojson.org]) abgelegt sind||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-feature_style&#039;&#039;&#039;||Legt fest, wie die GEOJSON Daten dargestllt werden bzw. was passiert, wenn man auf einzelne Features klickt bzw. sie mit der Maus überstreicht (Details siehe unten unter &amp;lt;&amp;gt;||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Details zu GEOJSON Files==&lt;br /&gt;
Die Datei muss auf dem Server (FHEM) liegen (also typischerweise im www/tablet Verzeichnis). Ich habe z.B. unter www/table ein Unterverzeichnis data erstellt und geben data-geojson=&amp;quot;data/file.geojson&amp;quot; an. In dem geojson file können beliebige Objekte definiert werden, das Format ist unter [www.geojson.org] nachzulesen&lt;br /&gt;
Über den Parameter data-feature_style kann man recht flexibel festlegen, wie die Objekte dargestellt werden sollen. Das Ganze ist ein js Objekt, wird also in &#039;{}&#039; eingeschlossen. Innerhalb des Objektes legen 3 Objekteigenschaften fest, wie die Darstellung aussehen soll.&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft &amp;quot;popup_properties_click&amp;quot; hat als Wert eine Leerzeichen getrennte Liste von Expressions, welche, falls sie auf Properties der Objekte im geojson File zutreffen, dazu führen, dass beim Klick auf die angezeigten Objekte ein Info Window geöffnet wird, welches die entsprechenden geojson Objekteigenschaften anzeigt.&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft &amp;quot;popup_properties_move&amp;quot; macht genau das Gleiche, allerdings sorgen die dort angegebenen Expressions dafür dass die dazu passenden geojson Objekte per Popup bei Überfahren mit der Maus und nicht bei Klick angezeigt werden und beim Verlassen mit der Maus dann auch wieder automatisch verschwinden.&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft &amp;quot;display_styles&amp;quot; legt genau fest, wie die verschiedenen geojson Objekte dargestellt werden sollen. Der Wert dieser Eigenschaft ist wiederum ein Objekt. Als Eigenschaftsname wird ein Verweis auf ein bestimmtes Objekt im geojson File verwendet. Der Verweis kann entweder eine Eigenschaft eines Objekts im geojson File sein oder eine Kombination aus Eigenschaft und Wert (also nicht alle Objekte des gleichen Typs sondern nur die, die eine auch den passenden Wert haben). Dahinter wird dann der zu verwendete Stil als weiteres Objekt angegeben, welches aus einer Menge aus Property:Value pairs besteht, bei dem die Property die Displayeigenschaft (also z.B. Farbe) und der Wert dann den dazugehörigen Wert (also z.B. rot) festlegt. Alles was nicht explizit hier festgelegt wird, wird aus den &amp;quot;globalen&amp;quot; Einstellungen (z.B. data-stroke) übernommen. Die folgende Definition generiert, wenn man das Beispielfile [[https://forum.fhem.de/index.php?action=dlattach;topic=78379.0;attach=97671|Beispieldatei]] als GEOJSON abspeichert und dann in data-geojson den Speicherort angibt, die darunter dargestellte Karte.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
data-feature_style=&#039;{&lt;br /&gt;
	&amp;quot;popup_properties_click&amp;quot;:&amp;quot;name network operator fire.*&amp;quot;,&lt;br /&gt;
	&amp;quot;popup_properties_move&amp;quot;:&amp;quot;fire.*\\:diameter&amp;quot;,&lt;br /&gt;
	&amp;quot;display_styles&amp;quot;:{&lt;br /&gt;
		&amp;quot;emergency.fire_hydrant&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;fa-fire-extinguisher&amp;quot;,&amp;quot;strokeColor&amp;quot;:&amp;quot;red&amp;quot;},&lt;br /&gt;
		&amp;quot;public_transport.station&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;fa-train&amp;quot;,&amp;quot;strokeColor&amp;quot;:&amp;quot;black&amp;quot;}}&lt;br /&gt;
}&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2018-03-05_11h55_51.png|thumb|none|Mit obigem Beispielfile und gezeigtem data-feature_style erstellte Karte]]&lt;br /&gt;
&lt;br /&gt;
Noch etwas zusätzliches: Eine gute Möglichkeit sich geojson Files zu holen (von der auch das Beispiel stammt), ist die webseite [http://overpass-turbo.eu/]. Dort kann man sich für beliebige Gebiete per Wizard eine Abfrage basteln, die dann bestimmte Infos aus Open Street Maps herausfiltert und als geojson exportieren kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Tablet UI|Maps]]&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Maps&amp;diff=27999</id>
		<title>FTUI Widget Maps</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Maps&amp;diff=27999"/>
		<updated>2018-10-08T06:57:27Z</updated>

		<summary type="html">&lt;p&gt;Eki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das [[{{PAGENAME}}|Map Widget]] ist ein Widget zur Darstellung von Karten mit Informationen aus FHEM oder auch anderern Quellen (z.B. GEOJSON Files).&lt;br /&gt;
&lt;br /&gt;
Folgende Dinge werden berücksichtigt:&amp;lt;br&amp;gt;&lt;br /&gt;
FHEM Devices, welche eine Koordinate (longitude/latitude) als Reading/Attribut/Internal haben (z. B. Anwesenheiten auf Basis von ROOMMATE/RESIDENT/GUEST, oder das global Device als Standort von FHEM), werden als Punkt mit anpassbarem Aussehen an der entsprechenden Position auf der Karte dargestellt.&amp;lt;br&amp;gt;&lt;br /&gt;
Darüber hinaus ist es möglich, Fahrwege mit Fahrzeiten auf Basis des FHEM TRAFFIC Moduls als Pfade auf die Karte zu legen. Hierbei können die Routen eingefärbt als Linien dargestellt werden und entsprechend per InfoWindow dann Details (wie z.B. die normale Fahrzeit bzw. die Fahrzeit bei aktuellem Verkehr) dazu dargestellt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Existiert ein Reading &amp;quot;polygon&amp;quot; welches eine Liste von space separierten Koordinatenpaaren (X und Y Koordinaten jedes Paares durch &#039;,&#039; getrennt) als Wert enthält (z.B. mit &amp;quot;setreading &amp;lt;device&amp;gt; polygon 10.2488713,49.773172 10.2626042,49.7711765 10.278397,49.7682939 10.2986531,49.7671851&amp;quot; erzeugbar) so wird eine Linie auf der Karte mit den entsprechenden Koordinatenpunkten gezeichnet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die flexibelste Lösung ist die Verwendung von GEOJSON Files (müssen irgendwo per web erreichbar abgelegt werden). Diese Files können verschiedene geographische Objekte enthalten, die dann auf der Karte dargestellt werden. Das Aussehen und Verhalten der im GEOJSON File enthaltenen Objekte kann über den Parameter data-feature_style beeinflusst werden.&lt;br /&gt;
&lt;br /&gt;
Die Karte kann zusätzlich eine Darstellung der Verkehrslage als zuschaltbaren Layer enthalten (siehe unten).&lt;br /&gt;
&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Datei:2018-03-05_11h55_51.png|thumb|none|Beispiel 1 (mit Google)]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Datei:FTUI_Maps_2.png|thumb|none|Beispiel 2 (mit Google)]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Datei:FTUI_Maps_3.png|thumb|none|Beispiel 3 (mit OSM)]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
==Voraussetzungen==&lt;br /&gt;
Die Darstellung im Widget basiert entweder auf dem Google Maps API oder auf Leaflet und der Nutzung von OpenStreetMap als Kartenbasis. Wenn Google Maps verwendet wird, muss zunächst ein API Key von Google beschafft werden. Wie man diesen beschafft, kann z.B. unter [https://developers.google.com/maps/api-key-best-practices] oder [https://wiki.fhem.de/wiki/TRAFFIC] nachgelesen werden. Dieser Key muss dann im HTML File (am Besten im Header) als meta Tag eingetragen werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;GoogleMapsApiKey&amp;quot; content=&amp;quot;&amp;lt;Key&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird die Leaflet/OSM Variante verwendet (data-map_type=&amp;quot;OSM&amp;quot;), so ist zunächst kein Schlüssel für die Kartendarstellung notwendig. Will man allerdings eine Route oder die Verkehrslage darstellen, so wird ein Map API Key von TomTom benötigt (bekommt man für private Zwecke auch ohne Hinterlegung einer Kreditkarte). Hinweise wie man den besorgt, siehe unter [https://developer.tomtom.com]. Auch dieser Key muss als meta Tag in das HTML File.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;TomTomApiKey&amp;quot; content=&amp;quot;&amp;lt;Key&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Attribute==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-type&#039;&#039;&#039;||Type des Widgets muss auf &amp;quot;maps&amp;quot; gesetzt werden||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-device&#039;&#039;&#039;||FHEM-Device, dessen Readings dargestellt werden sollen||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-alias&#039;&#039;&#039;||Legt fest, aus welchem Reading der Name für die Anzeige genommen werden soll||alias||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-latitude&#039;&#039;&#039;||Legt fest, aus welchem Reading die geograpfische Breite genommen werden soll||latitude||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-longitude&#039;&#039;&#039;||Legt fest, aus welchem Reading die geograpfische Länge genommen werden soll||longitude||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-language&#039;&#039;&#039;||Kann &#039;de&#039; oder &#039;en&#039; sein und stellt die Sprache für die Ausgabe in den Info Windows ein||de||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-size&#039;&#039;&#039;||Gibt die Größe des Kartenausschnittes an (als String mit &#039;&amp;lt;Breite&amp;gt;,&amp;lt;Höhe&amp;gt;&#039;), kann auch weggelassen werden, wenn es sich um ein TRAFFIC Device handelt, dann wird der Wert aus dem GoogleMapsSize Reading genommen oder, falls das auch nicht vorhanden ist, wird die Größe aus der Ausdehnung der Route(n) ermittelt.||auto||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-center&#039;&#039;&#039;||Gibt das Zentrum der Karte an (als String mit &#039;&amp;lt;Latitude&amp;gt;,&amp;lt;Longitude&amp;gt;&#039;), kann auch weggelassen werden, wenn es sich um ein TRAFFIC Device handelt, dann wird der Wert aus GoogleMapsCenter Reading genommen oder, falls das auch nicht vorhanden ist, wird das Zentrum aus der Ausdehnung der Route(n) ermittelt.||auto||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-zoom&#039;&#039;&#039;||Gibt den Zoomwert der Karte an (als integer Wert, siehe Google Maps API), kann auch weggelassen werden, wenn es sich um ein TRAFFIC Device handelt, dann wird der Wert aus dem GoogleMapsZoom Reading genommen oder, falls das auch nicht vorhanden ist, wird der Zoom Wert aus der Ausdehnung der Route(n) ermittelt.||auto||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-mapgroup&#039;&#039;&#039;||Legt fest, ob jedes Widget in eine eigene Karte zeichnen soll oder ob mehrer Informationen in einer Karte landen. Alle Widgets vom Typ &#039;maps&#039; mit dem gleichen wert für data-mapgroup zeichnen in ein und die selbe Karte||0||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-travel_mode&#039;&#039;&#039;||Gibt an, wie die Route berechnet werden soll. Es gibt die Möglichkeiten &#039;DRIVING&#039;, &#039;WALKING&#039;, &#039;BICYCLING&#039;, &#039;TRANSIT&#039; (Details siehe TRAFFIC Modul von FHEM oder Google Maps API für den &#039;Directions&#039; Service), kann auch weggelassen werden, wenn es sich um ein TRAFFIC Device handelt, dann wird der Wert aus dem trafficMode Reading genommen.||DRIVING||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-traffic&#039;&#039;&#039;||Gibt an, ob die Verkehrslage auf der Karte dargestellt werden soll||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-showdetails&#039;&#039;&#039;||Gibt an ob per Default die Info Windows eingeblendet werden sollen||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-stroke&#039;&#039;&#039;||Gibt an, wie die Fahrstrecken oder Symbole dargestellt werden sollen. Besteht aus maximal 6 Werten (Farbe Hinweg, Breite Hinweg, Durchsichtigkeit Hinweg, Farbe Rückweg, Breite Rückweg, Durchsichtigkeit Rückweg), die Farbe wird per #rrggbb angegeben, die Breite in Pixel und die Durchsichtigkeit als Prozentwert zwischen 0% und 100%, siehe auch Details zum Modul TRAFFIC. Die Symbole zur Route werden in der doppelten angegebenen Breite des Pfades dargestellt||#ffffff,7,50,#ffffff,7,50||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-icon&#039;&#039;&#039;||Hiermit kann ein Icon angegeben werden, welches statt des standardmäßigen Pfeils verwendet werden soll, um die Position zu markieren. Kann eine URL auf eine icon Datei, die relativ zum Verzeichnis www/images/ liegt sein||||&#039;default/HOME_Status.1.png&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-label&#039;&#039;&#039;||Will man statt eines Icons ein FontAwesome/Openautomation/fhemSVG Font-Icon (z.B. &#039;fa-home&#039;, &#039;oa-weather_winter&#039;, &#039;fs-usb_stick&#039;) verwenden, wird das hiermit angegeben (es kann auch icon und Font-Icon zusammen verwendet werden (z.B. ein Kreis als Icon und darin ein Font-Icon.||||fa-home&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-nightmode&#039;&#039;&#039;||legt fest, ob die Karte im Nachtmodus (dunkel) dargestellt werden soll (geht bisher noch nicht mit OSM)||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-style&#039;&#039;&#039;||Möglichkeit zum Setzen eines Styles entsprechend der Map API Options (siehe Dokumentation zu den Map APIs von Google und Leaflet)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-geojson&#039;&#039;&#039;||gibt den Namen eines Files auf dem Server an, in dem Daten zur Darstellung im GEOJSON Format (siehe [www.geojson.org]) abgelegt sind||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-feature_style&#039;&#039;&#039;||Legt fest, wie die GEOJSON Daten dargestllt werden bzw. was passiert, wenn man auf einzelne Features klickt bzw. sie mit der Maus überstreicht (Details siehe unten unter &amp;lt;&amp;gt;||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Details zu GEOJSON Files==&lt;br /&gt;
Die Datei muss auf dem Server (FHEM) liegen (also typischerweise im www/tablet Verzeichnis). Ich habe z.B. unter www/table ein Unterverzeichnis data erstellt und geben data-geojson=&amp;quot;data/file.geojson&amp;quot; an. In dem geojson file können beliebige Objekte definiert werden, das Format ist unter [www.geojson.org] nachzulesen&lt;br /&gt;
Über den Parameter data-feature_style kann man recht flexibel festlegen, wie die Objekte dargestellt werden sollen. Das Ganze ist ein js Objekt, wird also in &#039;{}&#039; eingeschlossen. Innerhalb des Objektes legen 3 Objekteigenschaften fest, wie die Darstellung aussehen soll.&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft &amp;quot;popup_properties_click&amp;quot; hat als Wert eine Leerzeichen getrennte Liste von Expressions, welche, falls sie auf Properties der Objekte im geojson File zutreffen, dazu führen, dass beim Klick auf die angezeigten Objekte ein Info Window geöffnet wird, welches die entsprechenden geojson Objekteigenschaften anzeigt.&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft &amp;quot;popup_properties_move&amp;quot; macht genau das Gleiche, allerdings sorgen die dort angegebenen Expressions dafür dass die dazu passenden geojson Objekte per Popup bei Überfahren mit der Maus und nicht bei Klick angezeigt werden und beim Verlassen mit der Maus dann auch wieder automatisch verschwinden.&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft &amp;quot;display_styles&amp;quot; legt genau fest, wie die verschiedenen geojson Objekte dargestellt werden sollen. Der Wert dieser Eigenschaft ist wiederum ein Objekt. Als Eigenschaftsname wird ein Verweis auf ein bestimmtes Objekt im geojson File verwendet. Der Verweis kann entweder eine Eigenschaft eines Objekts im geojson File sein oder eine Kombination aus Eigenschaft und Wert (also nicht alle Objekte des gleichen Typs sondern nur die, die eine auch den passenden Wert haben). Dahinter wird dann der zu verwendete Stil als weiteres Objekt angegeben, welches aus einer Menge aus Property:Value pairs besteht, bei dem die Property die Displayeigenschaft (also z.B. Farbe) und der Wert dann den dazugehörigen Wert (also z.B. rot) festlegt. Alles was nicht explizit hier festgelegt wird, wird aus den &amp;quot;globalen&amp;quot; Einstellungen (z.B. data-stroke) übernommen. Die folgende Definition generiert, wenn man das Beispielfile [[https://forum.fhem.de/index.php?action=dlattach;topic=78379.0;attach=97671|Beispieldatei]] als GEOJSON abspeichert und dann in data-geojson den Speicherort angibt, die darunter dargestellte Karte.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
data-feature_style=&#039;{&lt;br /&gt;
	&amp;quot;popup_properties_click&amp;quot;:&amp;quot;name network operator fire.*&amp;quot;,&lt;br /&gt;
	&amp;quot;popup_properties_move&amp;quot;:&amp;quot;fire.*\\:diameter&amp;quot;,&lt;br /&gt;
	&amp;quot;display_styles&amp;quot;:{&lt;br /&gt;
		&amp;quot;emergency.fire_hydrant&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;fa-fire-extinguisher&amp;quot;,&amp;quot;strokeColor&amp;quot;:&amp;quot;red&amp;quot;},&lt;br /&gt;
		&amp;quot;public_transport.station&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;fa-train&amp;quot;,&amp;quot;strokeColor&amp;quot;:&amp;quot;black&amp;quot;}}&lt;br /&gt;
}&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2018-03-05_11h55_51.png|thumb|none|Mit obigem Beispielfile und gezeigtem data-feature_style erstellte Karte]]&lt;br /&gt;
&lt;br /&gt;
Noch etwas zusätzliches: Eine gute Möglichkeit sich geojson Files zu holen (von der auch das Beispiel stammt), ist die webseite [http://overpass-turbo.eu/]. Dort kann man sich für beliebige Gebiete per Wizard eine Abfrage basteln, die dann bestimmte Infos aus Open Street Maps herausfiltert und als geojson exportieren kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Tablet UI|Maps]]&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Maps&amp;diff=27998</id>
		<title>FTUI Widget Maps</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Maps&amp;diff=27998"/>
		<updated>2018-10-08T06:56:44Z</updated>

		<summary type="html">&lt;p&gt;Eki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das [[{{PAGENAME}}|Map Widget]] ist ein Widget zur Darstellung von Karten mit Informationen aus FHEM oder auch anderern Quellen (z.B. GEOJSON Files).&lt;br /&gt;
&lt;br /&gt;
Folgende Dinge werden berücksichtigt:&amp;lt;br&amp;gt;&lt;br /&gt;
FHEM Devices, welche eine Koordinate (longitude/latitude) als Reading/Attribut/Internal haben (z. B. Anwesenheiten auf Basis von ROOMMATE/RESIDENT/GUEST, oder das global Device als Standort von FHEM), werden als Punkt mit anpassbarem Aussehen an der entsprechenden Position auf der Karte dargestellt.&amp;lt;br&amp;gt;&lt;br /&gt;
Darüber hinaus ist es möglich, Fahrwege mit Fahrzeiten auf Basis des FHEM TRAFFIC Moduls als Pfade auf die Karte zu legen. Hierbei können die Routen eingefärbt als Linien dargestellt werden und entsprechend per InfoWindow dann Details (wie z.B. die normale Fahrzeit bzw. die Fahrzeit bei aktuellem Verkehr) dazu dargestellt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Existiert ein Reading &amp;quot;polygon&amp;quot; welches eine Liste von space separierten Koordinatenpaaren (X und Y Koordinaten jedes Paares durch &#039;,&#039; getrennt) als Wert enthält (z.B. mit &amp;quot;setreading &amp;lt;device&amp;gt; polygon 10.2488713,49.773172 10.2626042,49.7711765 10.278397,49.7682939 10.2986531,49.7671851&amp;quot; erzeugbar) so wird eine Linie auf der Karte mit den entsprechenden Koordinatenpunkten gezeichnet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die flexibelste Lösung ist die Verwendung von GEOJSON Files (müssen irgendwo per web erreichbar abgelegt werden). Diese Files können verschiedene geographische Objekte enthalten, die dann auf der Karte dargestellt werden. Das Aussehen und Verhalten der im GEOJSON File enthaltenen Objekte kann über den Parameter data-feature_style beeinflusst werden.&lt;br /&gt;
&lt;br /&gt;
Die Karte kann zusätzlich eine Darstellung der Verkehrslage als zuschaltbaren Layer enthalten (siehe unten).&lt;br /&gt;
&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Datei:2018-03-05_11h55_51.png|thumb|none|Beispiel 1 (mit Google)]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Datei:FTUI_Maps_2.png|thumb|none|Beispiel 2 (mit Google)]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Datei:FTUI_Maps_3.png|thumb|none|Beispiel 3 (mit OSM)]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
==Voraussetzungen==&lt;br /&gt;
Die Darstellung im Widget basiert entweder auf dem Google Maps API oder auf Leaflet und der Nutzung von OpenStreetMap als Kartenbasis. Wenn Google Maps verwendet wird, muss zunächst ein API Key von Google beschafft werden. Wie man diesen beschafft, kann z.B. unter [https://developers.google.com/maps/api-key-best-practices] oder [https://wiki.fhem.de/wiki/TRAFFIC] nachgelesen werden. Dieser Key muss dann im HTML File (am Besten im Header) als meta Tag eingetragen werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;GoogleMapsApiKey&amp;quot; content=&amp;quot;&amp;lt;Key&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird die Leaflet/OSM Variante verwendet (data-map_type=&amp;quot;OSM&amp;quot;), so ist zunächst kein Schlüssel für die Kartendarstellung notwendig. Will man allerdings eine Route oder die Verkehrslage darstellen, so wird ein Map API Key von TomTom benötigt (bekommt man für private Zwecke auch ohne Hinterlegung einer Kreditkarte). Hinweise wie man den besorgt, siehe unter [https://developer.tomtom.com]. Auch dieser Key muss als meta Tag in das HTML File.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;TomTomApiKey&amp;quot; content=&amp;quot;&amp;lt;Key&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Attribute==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-type&#039;&#039;&#039;||Type des Widgets muss auf &amp;quot;maps&amp;quot; gesetzt werden||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-device&#039;&#039;&#039;||FHEM-Device, dessen Readings dargestellt werden sollen||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-alias&#039;&#039;&#039;||Legt fest, aus welchem Reading der Name für die Anzeige genommen werden soll||alias||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-latitude&#039;&#039;&#039;||Legt fest, aus welchem Reading die geograpfische Breite genommen werden soll||latitude||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-longitude&#039;&#039;&#039;||Legt fest, aus welchem Reading die geograpfische Länge genommen werden soll||longitude||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-language&#039;&#039;&#039;||Kann &#039;de&#039; oder &#039;en&#039; sein und stellt die Sprache für die Ausgabe in den Info Windows ein||de||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-size&#039;&#039;&#039;||Gibt die Größe des Kartenausschnittes an (als String mit &#039;&amp;lt;Breite&amp;gt;,&amp;lt;Höhe&amp;gt;&#039;), kann auch weggelassen werden, wenn es sich um ein TRAFFIC Device handelt, dann wird der Wert aus dem GoogleMapsSize Reading genommen oder, falls das auch nicht vorhanden ist, wird die Größe aus der Ausdehnung der Route(n) ermittelt.||auto||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-center&#039;&#039;&#039;||Gibt das Zentrum der Karte an (als String mit &#039;&amp;lt;Latitude&amp;gt;,&amp;lt;Longitude&amp;gt;&#039;), kann auch weggelassen werden, wenn es sich um ein TRAFFIC Device handelt, dann wird der Wert aus GoogleMapsCenter Reading genommen oder, falls das auch nicht vorhanden ist, wird das Zentrum aus der Ausdehnung der Route(n) ermittelt.||auto||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-zoom&#039;&#039;&#039;||Gibt den Zoomwert der Karte an (als integer Wert, siehe Google Maps API), kann auch weggelassen werden, wenn es sich um ein TRAFFIC Device handelt, dann wird der Wert aus dem GoogleMapsZoom Reading genommen oder, falls das auch nicht vorhanden ist, wird der Zoom Wert aus der Ausdehnung der Route(n) ermittelt.||auto||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-mapgroup&#039;&#039;&#039;||Legt fest, ob jedes Widget in eine eigene Karte zeichnen soll oder ob mehrer Informationen in einer Karte landen. Alle &amp;lt;div&amp;gt; vom Typ &#039;maps&#039; mit dem gleichen wert für data-mapgroup zeichnen in ein und die selbe Karte||0||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-travel_mode&#039;&#039;&#039;||Gibt an, wie die Route berechnet werden soll. Es gibt die Möglichkeiten &#039;DRIVING&#039;, &#039;WALKING&#039;, &#039;BICYCLING&#039;, &#039;TRANSIT&#039; (Details siehe TRAFFIC Modul von FHEM oder Google Maps API für den &#039;Directions&#039; Service), kann auch weggelassen werden, wenn es sich um ein TRAFFIC Device handelt, dann wird der Wert aus dem trafficMode Reading genommen.||DRIVING||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-traffic&#039;&#039;&#039;||Gibt an, ob die Verkehrslage auf der Karte dargestellt werden soll||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-showdetails&#039;&#039;&#039;||Gibt an ob per Default die Info Windows eingeblendet werden sollen||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-stroke&#039;&#039;&#039;||Gibt an, wie die Fahrstrecken oder Symbole dargestellt werden sollen. Besteht aus maximal 6 Werten (Farbe Hinweg, Breite Hinweg, Durchsichtigkeit Hinweg, Farbe Rückweg, Breite Rückweg, Durchsichtigkeit Rückweg), die Farbe wird per #rrggbb angegeben, die Breite in Pixel und die Durchsichtigkeit als Prozentwert zwischen 0% und 100%, siehe auch Details zum Modul TRAFFIC. Die Symbole zur Route werden in der doppelten angegebenen Breite des Pfades dargestellt||#ffffff,7,50,#ffffff,7,50||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-icon&#039;&#039;&#039;||Hiermit kann ein Icon angegeben werden, welches statt des standardmäßigen Pfeils verwendet werden soll, um die Position zu markieren. Kann eine URL auf eine icon Datei, die relativ zum Verzeichnis www/images/ liegt sein||||&#039;default/HOME_Status.1.png&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-label&#039;&#039;&#039;||Will man statt eines Icons ein FontAwesome/Openautomation/fhemSVG Font-Icon (z.B. &#039;fa-home&#039;, &#039;oa-weather_winter&#039;, &#039;fs-usb_stick&#039;) verwenden, wird das hiermit angegeben (es kann auch icon und Font-Icon zusammen verwendet werden (z.B. ein Kreis als Icon und darin ein Font-Icon.||||fa-home&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-nightmode&#039;&#039;&#039;||legt fest, ob die Karte im Nachtmodus (dunkel) dargestellt werden soll (geht bisher noch nicht mit OSM)||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-style&#039;&#039;&#039;||Möglichkeit zum Setzen eines Styles entsprechend der Map API Options (siehe Dokumentation zu den Map APIs von Google und Leaflet)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-geojson&#039;&#039;&#039;||gibt den Namen eines Files auf dem Server an, in dem Daten zur Darstellung im GEOJSON Format (siehe [www.geojson.org]) abgelegt sind||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-feature_style&#039;&#039;&#039;||Legt fest, wie die GEOJSON Daten dargestllt werden bzw. was passiert, wenn man auf einzelne Features klickt bzw. sie mit der Maus überstreicht (Details siehe unten unter &amp;lt;&amp;gt;||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Details zu GEOJSON Files==&lt;br /&gt;
Die Datei muss auf dem Server (FHEM) liegen (also typischerweise im www/tablet Verzeichnis). Ich habe z.B. unter www/table ein Unterverzeichnis data erstellt und geben data-geojson=&amp;quot;data/file.geojson&amp;quot; an. In dem geojson file können beliebige Objekte definiert werden, das Format ist unter [www.geojson.org] nachzulesen&lt;br /&gt;
Über den Parameter data-feature_style kann man recht flexibel festlegen, wie die Objekte dargestellt werden sollen. Das Ganze ist ein js Objekt, wird also in &#039;{}&#039; eingeschlossen. Innerhalb des Objektes legen 3 Objekteigenschaften fest, wie die Darstellung aussehen soll.&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft &amp;quot;popup_properties_click&amp;quot; hat als Wert eine Leerzeichen getrennte Liste von Expressions, welche, falls sie auf Properties der Objekte im geojson File zutreffen, dazu führen, dass beim Klick auf die angezeigten Objekte ein Info Window geöffnet wird, welches die entsprechenden geojson Objekteigenschaften anzeigt.&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft &amp;quot;popup_properties_move&amp;quot; macht genau das Gleiche, allerdings sorgen die dort angegebenen Expressions dafür dass die dazu passenden geojson Objekte per Popup bei Überfahren mit der Maus und nicht bei Klick angezeigt werden und beim Verlassen mit der Maus dann auch wieder automatisch verschwinden.&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft &amp;quot;display_styles&amp;quot; legt genau fest, wie die verschiedenen geojson Objekte dargestellt werden sollen. Der Wert dieser Eigenschaft ist wiederum ein Objekt. Als Eigenschaftsname wird ein Verweis auf ein bestimmtes Objekt im geojson File verwendet. Der Verweis kann entweder eine Eigenschaft eines Objekts im geojson File sein oder eine Kombination aus Eigenschaft und Wert (also nicht alle Objekte des gleichen Typs sondern nur die, die eine auch den passenden Wert haben). Dahinter wird dann der zu verwendete Stil als weiteres Objekt angegeben, welches aus einer Menge aus Property:Value pairs besteht, bei dem die Property die Displayeigenschaft (also z.B. Farbe) und der Wert dann den dazugehörigen Wert (also z.B. rot) festlegt. Alles was nicht explizit hier festgelegt wird, wird aus den &amp;quot;globalen&amp;quot; Einstellungen (z.B. data-stroke) übernommen. Die folgende Definition generiert, wenn man das Beispielfile [[https://forum.fhem.de/index.php?action=dlattach;topic=78379.0;attach=97671|Beispieldatei]] als GEOJSON abspeichert und dann in data-geojson den Speicherort angibt, die darunter dargestellte Karte.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
data-feature_style=&#039;{&lt;br /&gt;
	&amp;quot;popup_properties_click&amp;quot;:&amp;quot;name network operator fire.*&amp;quot;,&lt;br /&gt;
	&amp;quot;popup_properties_move&amp;quot;:&amp;quot;fire.*\\:diameter&amp;quot;,&lt;br /&gt;
	&amp;quot;display_styles&amp;quot;:{&lt;br /&gt;
		&amp;quot;emergency.fire_hydrant&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;fa-fire-extinguisher&amp;quot;,&amp;quot;strokeColor&amp;quot;:&amp;quot;red&amp;quot;},&lt;br /&gt;
		&amp;quot;public_transport.station&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;fa-train&amp;quot;,&amp;quot;strokeColor&amp;quot;:&amp;quot;black&amp;quot;}}&lt;br /&gt;
}&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2018-03-05_11h55_51.png|thumb|none|Mit obigem Beispielfile und gezeigtem data-feature_style erstellte Karte]]&lt;br /&gt;
&lt;br /&gt;
Noch etwas zusätzliches: Eine gute Möglichkeit sich geojson Files zu holen (von der auch das Beispiel stammt), ist die webseite [http://overpass-turbo.eu/]. Dort kann man sich für beliebige Gebiete per Wizard eine Abfrage basteln, die dann bestimmte Infos aus Open Street Maps herausfiltert und als geojson exportieren kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Tablet UI|Maps]]&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Maps&amp;diff=27997</id>
		<title>FTUI Widget Maps</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Maps&amp;diff=27997"/>
		<updated>2018-10-08T06:55:38Z</updated>

		<summary type="html">&lt;p&gt;Eki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das [[{{PAGENAME}}|Map Widget]] ist ein Widget zur Darstellung von Karten mit Informationen aus FHEM oder auch anderern Quellen (z.B. GEOJSON Files).&lt;br /&gt;
&lt;br /&gt;
Folgende Dinge werden berücksichtigt:&amp;lt;br&amp;gt;&lt;br /&gt;
FHEM Devices, welche eine Koordinate (longitude/latitude) als Reading/Attribut/Internal haben (z. B. Anwesenheiten auf Basis von ROOMMATE/RESIDENT/GUEST, oder das global Device als Standort von FHEM), werden als Punkt mit anpassbarem Aussehen an der entsprechenden Position auf der Karte dargestellt.&amp;lt;br&amp;gt;&lt;br /&gt;
Darüber hinaus ist es möglich, Fahrwege mit Fahrzeiten auf Basis des FHEM TRAFFIC Moduls als Pfade auf die Karte zu legen. Hierbei können die Routen eingefärbt als Linien dargestellt werden und entsprechend per InfoWindow dann Details (wie z.B. die normale Fahrzeit bzw. die Fahrzeit bei aktuellem Verkehr) dazu dargestellt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Existiert ein Reading &amp;quot;polygon&amp;quot; welches eine Liste von space separierten Koordinatenpaaren (X und Y Koordinaten jedes Paares durch &#039;,&#039; getrennt) als Wert enthält (z.B. mit &amp;quot;setreading &amp;lt;device&amp;gt; polygon 10.2488713,49.773172 10.2626042,49.7711765 10.278397,49.7682939 10.2986531,49.7671851&amp;quot; erzeugbar) so wird eine Linie auf der Karte mit den entsprechenden Koordinatenpunkten gezeichnet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die flexibelste Lösung ist die Verwendung von GEOJSON Files (müssen irgendwo per web erreichbar abgelegt werden). Diese Files können verschiedene geographische Objekte enthalten, die dann auf der Karte dargestellt werden. Das Aussehen und Verhalten der im GEOJSON File enthaltenen Objekte kann über den Parameter data-feature_style beeinflusst werden.&lt;br /&gt;
&lt;br /&gt;
Die Karte kann zusätzlich eine Darstellung der Verkehrslage als zuschaltbaren Layer enthalten (siehe unten).&lt;br /&gt;
&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Datei:2018-03-05_11h55_51.png|thumb|none|Beispiel 1 (mit Google)]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Datei:FTUI_Maps_2.png|thumb|none|Beispiel 2 (mit Google)]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Datei:FTUI_Maps_3.png|thumb|none|Beispiel 3 (mit OSM)]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
==Voraussetzungen==&lt;br /&gt;
Die Darstellung im Widget basiert entweder auf dem Google Maps API oder auf Leaflet und der Nutzung von OpenStreetMap als Kartenbasis. Wenn Google Maps verwendet wird, muss zunächst ein API Key von Google beschafft werden. Wie man diesen beschafft, kann z.B. unter [https://developers.google.com/maps/api-key-best-practices] oder [https://wiki.fhem.de/wiki/TRAFFIC] nachgelesen werden. Dieser Key muss dann im HTML File (am Besten im Header) als meta Tag eingetragen werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;GoogleMapsApiKey&amp;quot; content=&amp;quot;&amp;lt;Key&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird die Leaflet/OSM Variante verwendet (data-map_type=&amp;quot;OSM&amp;quot;), so ist zunächst kein Schlüssel für die Kartendarstellung notwendig. Will man allerdings eine Route oder die Verkehrslage darstellen, so wird ein Map API Key von TomTom benötigt (bekommt man für private Zwecke auch ohne Hinterlegung einer Kreditkarte). Hinweise wie man den besorgt, siehe unter [https://developer.tomtom.com]. Auch dieser Key muss als meta Tag in das HTML File.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;TomTomApiKey&amp;quot; content=&amp;quot;&amp;lt;Key&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Attribute==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-type&#039;&#039;&#039;||Type des Widgets muss auf &amp;quot;maps&amp;quot; gesetzt werden||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-device&#039;&#039;&#039;||FHEM-Device, dessen Readings dargestellt werden sollen||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-alias&#039;&#039;&#039;||Legt fest, aus welchem Reading der Name für die Anzeige genommen werden soll||alias||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-latitude&#039;&#039;&#039;||Legt fest, aus welchem Reading die geograpfische Breite genommen werden soll||latitude||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-longitude&#039;&#039;&#039;||Legt fest, aus welchem Reading die geograpfische Länge genommen werden soll||longitude||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-language&#039;&#039;&#039;||Kann &#039;de&#039; oder &#039;en&#039; sein und stellt die Sprache für die Ausgabe in den Info Windows ein||de||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-size&#039;&#039;&#039;||Gibt die Größe des Kartenausschnittes an (als String mit &#039;&amp;lt;Breite&amp;gt;,&amp;lt;Höhe&amp;gt;&#039;), kann auch weggelassen werden, wenn es sich um ein TRAFFIC Device handelt, dann wird der Wert aus dem GoogleMapsSize Reading genommen oder, falls das auch nicht vorhanden ist, wird die Größe aus der Ausdehnung der Route(n) ermittelt.||auto||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-center&#039;&#039;&#039;||Gibt das Zentrum der Karte an (als String mit &#039;&amp;lt;Latitude&amp;gt;,&amp;lt;Longitude&amp;gt;&#039;), kann auch weggelassen werden, wenn es sich um ein TRAFFIC Device handelt, dann wird der Wert aus GoogleMapsCenter Reading genommen oder, falls das auch nicht vorhanden ist, wird das Zentrum aus der Ausdehnung der Route(n) ermittelt.||auto||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-zoom&#039;&#039;&#039;||Gibt den Zoomwert der Karte an (als integer Wert, siehe Google Maps API), kann auch weggelassen werden, wenn es sich um ein TRAFFIC Device handelt, dann wird der Wert aus dem GoogleMapsZoom Reading genommen oder, falls das auch nicht vorhanden ist, wird der Zoom Wert aus der Ausdehnung der Route(n) ermittelt.||auto||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-mapgroup&#039;&#039;&#039;||Legt fest, ob jedes Widget in eine eigene Karte gezeichnet werden soll oder ob mehrer Informationen in einer Karte landen sollen. Alle &amp;lt;div&amp;gt; vom Typ &#039;maps&#039; mit dem gleichen wert für data-mapgroup zeichnen in ein und die selbe Karte||0||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-travel_mode&#039;&#039;&#039;||Gibt an, wie die Route berechnet werden soll. Es gibt die Möglichkeiten &#039;DRIVING&#039;, &#039;WALKING&#039;, &#039;BICYCLING&#039;, &#039;TRANSIT&#039; (Details siehe TRAFFIC Modul von FHEM oder Google Maps API für den &#039;Directions&#039; Service), kann auch weggelassen werden, wenn es sich um ein TRAFFIC Device handelt, dann wird der Wert aus dem trafficMode Reading genommen.||DRIVING||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-traffic&#039;&#039;&#039;||Gibt an, ob die Verkehrslage auf der Karte dargestellt werden soll||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-showdetails&#039;&#039;&#039;||Gibt an ob per Default die Info Windows eingeblendet werden sollen||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-stroke&#039;&#039;&#039;||Gibt an, wie die Fahrstrecken oder Symbole dargestellt werden sollen. Besteht aus maximal 6 Werten (Farbe Hinweg, Breite Hinweg, Durchsichtigkeit Hinweg, Farbe Rückweg, Breite Rückweg, Durchsichtigkeit Rückweg), die Farbe wird per #rrggbb angegeben, die Breite in Pixel und die Durchsichtigkeit als Prozentwert zwischen 0% und 100%, siehe auch Details zum Modul TRAFFIC. Die Symbole zur Route werden in der doppelten angegebenen Breite des Pfades dargestellt||#ffffff,7,50,#ffffff,7,50||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-icon&#039;&#039;&#039;||Hiermit kann ein Icon angegeben werden, welches statt des standardmäßigen Pfeils verwendet werden soll, um die Position zu markieren. Kann eine URL auf eine icon Datei, die relativ zum Verzeichnis www/images/ liegt sein||||&#039;default/HOME_Status.1.png&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-label&#039;&#039;&#039;||Will man statt eines Icons ein FontAwesome/Openautomation/fhemSVG Font-Icon (z.B. &#039;fa-home&#039;, &#039;oa-weather_winter&#039;, &#039;fs-usb_stick&#039;) verwenden, wird das hiermit angegeben (es kann auch icon und Font-Icon zusammen verwendet werden (z.B. ein Kreis als Icon und darin ein Font-Icon.||||fa-home&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-nightmode&#039;&#039;&#039;||legt fest, ob die Karte im Nachtmodus (dunkel) dargestellt werden soll (geht bisher noch nicht mit OSM)||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-style&#039;&#039;&#039;||Möglichkeit zum Setzen eines Styles entsprechend der Map API Options (siehe Dokumentation zu den Map APIs von Google und Leaflet)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-geojson&#039;&#039;&#039;||gibt den Namen eines Files auf dem Server an, in dem Daten zur Darstellung im GEOJSON Format (siehe [www.geojson.org]) abgelegt sind||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-feature_style&#039;&#039;&#039;||Legt fest, wie die GEOJSON Daten dargestllt werden bzw. was passiert, wenn man auf einzelne Features klickt bzw. sie mit der Maus überstreicht (Details siehe unten unter &amp;lt;&amp;gt;||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Details zu GEOJSON Files==&lt;br /&gt;
Die Datei muss auf dem Server (FHEM) liegen (also typischerweise im www/tablet Verzeichnis). Ich habe z.B. unter www/table ein Unterverzeichnis data erstellt und geben data-geojson=&amp;quot;data/file.geojson&amp;quot; an. In dem geojson file können beliebige Objekte definiert werden, das Format ist unter [www.geojson.org] nachzulesen&lt;br /&gt;
Über den Parameter data-feature_style kann man recht flexibel festlegen, wie die Objekte dargestellt werden sollen. Das Ganze ist ein js Objekt, wird also in &#039;{}&#039; eingeschlossen. Innerhalb des Objektes legen 3 Objekteigenschaften fest, wie die Darstellung aussehen soll.&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft &amp;quot;popup_properties_click&amp;quot; hat als Wert eine Leerzeichen getrennte Liste von Expressions, welche, falls sie auf Properties der Objekte im geojson File zutreffen, dazu führen, dass beim Klick auf die angezeigten Objekte ein Info Window geöffnet wird, welches die entsprechenden geojson Objekteigenschaften anzeigt.&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft &amp;quot;popup_properties_move&amp;quot; macht genau das Gleiche, allerdings sorgen die dort angegebenen Expressions dafür dass die dazu passenden geojson Objekte per Popup bei Überfahren mit der Maus und nicht bei Klick angezeigt werden und beim Verlassen mit der Maus dann auch wieder automatisch verschwinden.&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft &amp;quot;display_styles&amp;quot; legt genau fest, wie die verschiedenen geojson Objekte dargestellt werden sollen. Der Wert dieser Eigenschaft ist wiederum ein Objekt. Als Eigenschaftsname wird ein Verweis auf ein bestimmtes Objekt im geojson File verwendet. Der Verweis kann entweder eine Eigenschaft eines Objekts im geojson File sein oder eine Kombination aus Eigenschaft und Wert (also nicht alle Objekte des gleichen Typs sondern nur die, die eine auch den passenden Wert haben). Dahinter wird dann der zu verwendete Stil als weiteres Objekt angegeben, welches aus einer Menge aus Property:Value pairs besteht, bei dem die Property die Displayeigenschaft (also z.B. Farbe) und der Wert dann den dazugehörigen Wert (also z.B. rot) festlegt. Alles was nicht explizit hier festgelegt wird, wird aus den &amp;quot;globalen&amp;quot; Einstellungen (z.B. data-stroke) übernommen. Die folgende Definition generiert, wenn man das Beispielfile [[https://forum.fhem.de/index.php?action=dlattach;topic=78379.0;attach=97671|Beispieldatei]] als GEOJSON abspeichert und dann in data-geojson den Speicherort angibt, die darunter dargestellte Karte.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
data-feature_style=&#039;{&lt;br /&gt;
	&amp;quot;popup_properties_click&amp;quot;:&amp;quot;name network operator fire.*&amp;quot;,&lt;br /&gt;
	&amp;quot;popup_properties_move&amp;quot;:&amp;quot;fire.*\\:diameter&amp;quot;,&lt;br /&gt;
	&amp;quot;display_styles&amp;quot;:{&lt;br /&gt;
		&amp;quot;emergency.fire_hydrant&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;fa-fire-extinguisher&amp;quot;,&amp;quot;strokeColor&amp;quot;:&amp;quot;red&amp;quot;},&lt;br /&gt;
		&amp;quot;public_transport.station&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;fa-train&amp;quot;,&amp;quot;strokeColor&amp;quot;:&amp;quot;black&amp;quot;}}&lt;br /&gt;
}&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2018-03-05_11h55_51.png|thumb|none|Mit obigem Beispielfile und gezeigtem data-feature_style erstellte Karte]]&lt;br /&gt;
&lt;br /&gt;
Noch etwas zusätzliches: Eine gute Möglichkeit sich geojson Files zu holen (von der auch das Beispiel stammt), ist die webseite [http://overpass-turbo.eu/]. Dort kann man sich für beliebige Gebiete per Wizard eine Abfrage basteln, die dann bestimmte Infos aus Open Street Maps herausfiltert und als geojson exportieren kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Tablet UI|Maps]]&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Maps&amp;diff=27980</id>
		<title>FTUI Widget Maps</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Maps&amp;diff=27980"/>
		<updated>2018-10-05T13:55:21Z</updated>

		<summary type="html">&lt;p&gt;Eki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das [[{{PAGENAME}}|Map Widget]] ist ein Widget zur Darstellung von Karten mit Informationen aus FHEM oder auch anderern Quellen (z.B. GEOJSON Files). Folgende Dinge werden berücksichtigt:&lt;br /&gt;
FHEM Devices, welche eine Koordinate (longitude/latitude) als Reading/Attribut/Internal haben (z. B. Anwesenheiten auf Basis von ROOMMATE/RESIDENT/GUEST, oder das global Device als Standort von FHEM), werden als Punkt mit anpassbarem Aussehen an der entsprechenden Position auf der Karte dargestellt.&lt;br /&gt;
Darüber hinaus ist es möglich, Fahrwege mit Fahrzeiten auf Basis des FHEM TRAFFIC Moduls als Pfade auf die Karte zu legen. Hierbei können die Routen eingefärbt als Linien dargestellt werden und entsprechend per InfoWindow dann Details (wie z.B. die normale Fahrzeit bzw. die Fahrzeit bei aktuellem Verkehr) dazu dargestellt werden.&lt;br /&gt;
Existiert ein Reading &amp;quot;polygon&amp;quot; welches eine Liste von space separierten Koordinatenpaaren (X und Y Koordinaten jedes Paares durch &#039;,&#039; getrennt) als Wert enthält (z.B. mit &amp;quot;setreading &amp;lt;device&amp;gt; polygon 10.2488713,49.773172 10.2626042,49.7711765 10.278397,49.7682939 10.2986531,49.7671851&amp;quot; erzeugbar) so wird eine Linie auf der Karte mit den entsprechenden Koordinatenpunkten gezeichnet.&lt;br /&gt;
Die flexibelste Lösung ist die Verwendung von GEOJSON Files (müssen irgendwo per web erreichbar abgelegt werden). Diese Files können verschiedene geographische Objekte enthalten, die dann auf der Karte dargestellt werden. Das Aussehen und Verhalten der im GEOJSON File enthaltenen Objekte kann über den Parameter data-feature_style beeinflusst werden.&lt;br /&gt;
Die Karte kann zuätzlich eine Darstellung der Verkehrslage als zuschaltbaren Layer enthalten (siehe unten).&lt;br /&gt;
&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Datei:2018-03-05_11h55_51.png|thumb|none|Beispiel 1 (mit Google)]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Datei:FTUI_Maps_2.png|thumb|none|Beispiel 2 (mit Google)]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Datei:FTUI_Maps_3.png|thumb|none|Beispiel 3 (mit OSM)]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
==Voraussetzungen==&lt;br /&gt;
Die Darstellung im Widget basiert entweder auf dem Google Maps API oder auf Leaflet und der Nutzung von Oper Street Map als Kartenbasis. Wenn Google Maps verwendet wird, muss zunächst ein API Key von Google beschafft werden. Wie man diesen beschafft, kann z.B. unter [https://developers.google.com/maps/api-key-best-practices] oder [https://wiki.fhem.de/wiki/TRAFFIC] nachgelesen werden. Dieser Key muss dann im HTML File (am Besten im Header) als meta Tag eingetragen werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;GoogleMapsApiKey&amp;quot; content=&amp;quot;&amp;lt;Key&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird die Leaflet/OSM Variante verwendet (data-map_type=&amp;quot;OSM&amp;quot;), so ist zunächst kein Schlüssel für die Kartendarstellung notwendig. Will man allerdings eine Route oder die Verkehrslage darstellen, so wird ein Map API Key von TomTom benötigt (bekommt man für private Zwecke auch ohne Hinterlegung einer Kreditkarte). Hinweise wie man den besorgt, siehe unter [https://developer.tomtom.com]. Auch dieser Key muss als meta Tag in das HTML File.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;TomTomApiKey&amp;quot; content=&amp;quot;&amp;lt;Key&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Attribute==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-type&#039;&#039;&#039;||Type des Widgets muss auf &amp;quot;maps&amp;quot; gesetzt werden||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-device&#039;&#039;&#039;||FHEM-Device, dessen Readings dargestellt werden sollen||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-alias&#039;&#039;&#039;||Legt fest, aus welchem Reading der Name für die Anzeige genommen werden soll||alias||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-latitude&#039;&#039;&#039;||Legt fest, aus welchem Reading die geograpfische Breite genommen werden soll||latitude||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-longitude&#039;&#039;&#039;||Legt fest, aus welchem Reading die geograpfische Länge genommen werden soll||longitude||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-language&#039;&#039;&#039;||Kann &#039;de&#039; oder &#039;en&#039; sein und stellt die Sprache für die Ausgabe in den Info Windows ein||de||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-size&#039;&#039;&#039;||Gibt die Größe des Kartenausschnittes an (als String mit &#039;&amp;lt;Breite&amp;gt;,&amp;lt;Höhe&amp;gt;&#039;), kann auch weggelassen werden, wenn es sich um ein TRAFFIC Device handelt, dann wird der Wert aus dem GoogleMapsSize Reading genommen oder, falls das auch nicht vorhanden ist, wird die Größe aus der Ausdehnung der Route(n) ermittelt.||auto||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-center&#039;&#039;&#039;||Gibt das Zentrum der Karte an (als String mit &#039;&amp;lt;Latitude&amp;gt;,&amp;lt;Longitude&amp;gt;&#039;), kann auch weggelassen werden, wenn es sich um ein TRAFFIC Device handelt, dann wird der Wert aus GoogleMapsCenter Reading genommen oder, falls das auch nicht vorhanden ist, wird das Zentrum aus der Ausdehnung der Route(n) ermittelt.||auto||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-zoom&#039;&#039;&#039;||Gibt den Zoomwert der Karte an (als integer Wert, siehe Google Maps API), kann auch weggelassen werden, wenn es sich um ein TRAFFIC Device handelt, dann wird der Wert aus dem GoogleMapsZoom Reading genommen oder, falls das auch nicht vorhanden ist, wird der Zoom Wert aus der Ausdehnung der Route(n) ermittelt.||auto||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-travel_mode&#039;&#039;&#039;||Gibt an, wie die Route berechnet werden soll. Es gibt die Möglichkeiten &#039;DRIVING&#039;, &#039;WALKING&#039;, &#039;BICYCLING&#039;, &#039;TRANSIT&#039; (Details siehe TRAFFIC Modul von FHEM oder Google Maps API für den &#039;Directions&#039; Service), kann auch weggelassen werden, wenn es sich um ein TRAFFIC Device handelt, dann wird der Wert aus dem trafficMode Reading genommen.||DRIVING||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-traffic&#039;&#039;&#039;||Gibt an, ob die Verkehrslage auf der Karte dargestellt werden soll||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-showdetails&#039;&#039;&#039;||Gibt an ob per Default die Info Windows eingeblendet werden sollen||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-stroke&#039;&#039;&#039;||Gibt an, wie die Fahrstrecken oder Symbole dargestellt werden sollen. Besteht aus maximal 6 Werten (Farbe Hinweg, Breite Hinweg, Durchsichtigkeit Hinweg, Farbe Rückweg, Breite Rückweg, Durchsichtigkeit Rückweg), die Farbe wird per #rrggbb angegeben, die Breite in Pixel und die Durchsichtigkeit als Prozentwert zwischen 0% und 100%, siehe auch Details zum Modul TRAFFIC. Die Symbole zur Route werden in der doppelten angegebenen Breite des Pfades dargestellt||#ffffff,7,50,#ffffff,7,50||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-icon&#039;&#039;&#039;||Hiermit kann ein Icon angegeben werden, welches statt des standardmäßigen Pfeils verwendet werden soll, um die Position zu markieren. Kann eine URL auf eine icon Datei, die relativ zum Verzeichnis www/images/ liegt sein||||&#039;default/HOME_Status.1.png&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-label&#039;&#039;&#039;||Will man statt eines Icons ein FontAwesome/Openautomation/fhemSVG Font-Icon (z.B. &#039;fa-home&#039;, &#039;oa-weather_winter&#039;, &#039;fs-usb_stick&#039;) verwenden, wird das hiermit angegeben (es kann auch icon und Font-Icon zusammen verwendet werden (z.B. ein Kreis als Icon und darin ein Font-Icon.||||fa-home&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-nightmode&#039;&#039;&#039;||legt fest, ob die Karte im Nachtmodus (dunkel) dargestellt werden soll (geht bisher noch nicht mit OSM)||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-style&#039;&#039;&#039;||Möglichkeit zum Setzen eines Styles entsprechend der Map API Options (siehe Dokumentation zu den Map APIs von Google und Leaflet)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-geojson&#039;&#039;&#039;||gibt den Namen eines Files auf dem Server an, in dem Daten zur Darstellung im GEOJSON Format (siehe [www.geojson.org]) abgelegt sind||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-feature_style&#039;&#039;&#039;||Legt fest, wie die GEOJSON Daten dargestllt werden bzw. was passiert, wenn man auf einzelne Features klickt bzw. sie mit der Maus überstreicht (Details siehe unten unter &amp;lt;&amp;gt;||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Details zu GEOJSON Files==&lt;br /&gt;
Die Datei muss auf dem Server (FHEM) liegen (also typischerweise im www/tablet Verzeichnis). Ich habe z.B. unter www/table ein Unterverzeichnis data erstellt und geben data-geojson=&amp;quot;data/file.geojson&amp;quot; an. In dem geojson file können beliebige Objekte definiert werden, das Format ist unter [www.geojson.org] nachzulesen&lt;br /&gt;
Über den Parameter data-feature_style kann man recht flexibel festlegen, wie die Objekte dargestellt werden sollen. Das Ganze ist ein js Objekt, wird also in &#039;{}&#039; eingeschlossen. Innerhalb des Objektes legen 3 Objekteigenschaften fest, wie die Darstellung aussehen soll.&lt;br /&gt;
Die Eigenschaft &amp;quot;popup_properties_click&amp;quot; hat als Wert eine Leerzeichen getrennte Liste von Expressions, welche, falls sie auf Properties der Objekte im geojson File zutreffen, dazu führen, dass beim Klick auf die angezeigten Objekte ein Info Window geöffnet wird, welches die entsprechenden geojson Objekteigenschaften anzeigt.&lt;br /&gt;
Die Eigenschaft &amp;quot;popup_properties_move&amp;quot; macht genau das Gleiche, allerdings sorgen die dort angegebenen Expressions dafür dass die dazu passenden geojson Objekte per Popup bei Überfahren mit der Maus und nicht bei Klick angezeigt werden und beim Verlassen mit der Maus dann auch wieder automatisch verschwinden.&lt;br /&gt;
Die Eigenschaft &amp;quot;display_styles&amp;quot; legt genau fest, wie die verschiedenen geojson Objekte dargestellt werden sollen. Der Wert dieser Eigenschaft ist wiederum ein Objekt. Als Eigenschaftsname wird ein Verweis auf ein bestimmtes Objekt im geojson File verwendet. Der Verweis kann entweder eine Eigenschaft eines Objekts im geojson File sein oder eine Kombination aus Eigenschaft und Wert (also nicht alle Objekte des gleichen Typs sondern nur die, die eine auch den passenden Wert haben). Dahinter wird dann der zu verwendete Stil als weiteres Objekt angegeben, welches aus einer Menge aus Property:Value pairs besteht, bei dem die Property die Displayeigenschaft (also z.B. Farbe) und der Wert dann den dazugehörigen Wert (also z.B. rot) festlegt. Alles was nicht explizit hier festgelegt wird, wird aus den &amp;quot;globalen&amp;quot; Einstellungen (z.B. data-stroke) übernommen. Die folgende Definition generiert, wenn man das Beispielfile [[https://forum.fhem.de/index.php?action=dlattach;topic=78379.0;attach=97671|Beispieldatei]] als GEOJSON abspeichert und dann in data-geojson den Speicherort angibt, die darunter dargestellte Karte.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
data-feature_style=&#039;{&lt;br /&gt;
	&amp;quot;popup_properties_click&amp;quot;:&amp;quot;name network operator fire.*&amp;quot;,&lt;br /&gt;
	&amp;quot;popup_properties_move&amp;quot;:&amp;quot;fire.*\\:diameter&amp;quot;,&lt;br /&gt;
	&amp;quot;display_styles&amp;quot;:{&lt;br /&gt;
		&amp;quot;emergency.fire_hydrant&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;fa-fire-extinguisher&amp;quot;,&amp;quot;strokeColor&amp;quot;:&amp;quot;red&amp;quot;},&lt;br /&gt;
		&amp;quot;public_transport.station&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;fa-train&amp;quot;,&amp;quot;strokeColor&amp;quot;:&amp;quot;black&amp;quot;}}&lt;br /&gt;
}&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2018-03-05_11h55_51.png|thumb|none|Mit obigem Beispielfile und gezeigtem data-feature_style erstellte Karte]]&lt;br /&gt;
&lt;br /&gt;
Noch etwas zusätzliches: Einge gute Möglichkeit sich geojson Files zu holen (von der auch das Beispiel stammt), ist die webseite [http://overpass-turbo.eu/]. Dort kann man sich für beliebige Gebiete per Wizard eine Abfrage basteln, die dann bestimmte Infos aus Open Street Maps herausfiltert und als geojson exportieren kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Tablet UI|Maps]]&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Maps&amp;diff=27979</id>
		<title>FTUI Widget Maps</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Maps&amp;diff=27979"/>
		<updated>2018-10-05T13:52:38Z</updated>

		<summary type="html">&lt;p&gt;Eki: Erste Version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das [[{{PAGENAME}}|Map Widget]] ist ein Widget zur Darstellung von Karten mit Informationen aus FHEM oder auch anderern Quellen (z.B. GEOJSON Files). Folgende Dinge werden berücksichtigt:&lt;br /&gt;
FHEM Devices, welche eine Koordinate (longitude/latitude) als Reading/Attribut/Internal haben (z. B. Anwesenheiten auf Basis von ROOMMATE/RESIDENT/GUEST, oder das global Device als Standort von FHEM), werden als Punkt mit anpassbarem Aussehen an der entsprechenden Position auf der Karte dargestellt.&lt;br /&gt;
Darüber hinaus ist es möglich, Fahrwege mit Fahrzeiten auf Basis des FHEM TRAFFIC Moduls als Pfade auf die Karte zu legen. Hierbei können die Routen eingefärbt als Linien dargestellt werden und entsprechend per InfoWindow dann Details (wie z.B. die normale Fahrzeit bzw. die Fahrzeit bei aktuellem Verkehr) dazu dargestellt werden.&lt;br /&gt;
Existiert ein Reading &amp;quot;polygon&amp;quot; welches eine Liste von space separierten Koordinatenpaaren (X und Y Koordinaten jedes Paares durch &#039;,&#039; getrennt) als Wert enthält (z.B. mit &amp;quot;setreading &amp;lt;device&amp;gt; polygon 10.2488713,49.773172 10.2626042,49.7711765 10.278397,49.7682939 10.2986531,49.7671851&amp;quot; erzeugbar) so wird eine Linie auf der Karte mit den entsprechenden Koordinatenpunkten gezeichnet.&lt;br /&gt;
Die flexibelste Lösung ist die Verwendung von GEOJSON Files (müssen irgendwo per web erreichbar abgelegt werden). Diese Files können verschiedene geographische Objekte enthalten, die dann auf der Karte dargestellt werden. Das Aussehen und Verhalten der im GEOJSON File enthaltenen Objekte kann über den Parameter data-feature_style beeinflusst werden.&lt;br /&gt;
Die Karte kann zuätzlich eine Darstellung der Verkehrslage als zuschaltbaren Layer enthalten (siehe unten).&lt;br /&gt;
&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Datei:2018-03-05_11h55_51.png|thumb|none|Beispiel 1 (mit Google)]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Datei:FTUI_Maps_2.png|thumb|none|Beispiel 2 (mit Google)]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Datei:FTUI_Maps_3.png|thumb|none|Beispiel 3 (mit OSM)]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
==Voraussetzungen==&lt;br /&gt;
Die Darstellung im Widget basiert entweder auf dem Google Maps API oder auf Leaflet und der Nutzung von Oper Street Map als Kartenbasis. Wenn Google Maps verwendet wird, muss zunächst ein API Key von Google beschafft werden. Wie man diesen beschafft, kann z.B. unter [https://developers.google.com/maps/api-key-best-practices] oder [https://wiki.fhem.de/wiki/TRAFFIC] nachgelesen werden. Dieser Key muss dann im HTML File (am Besten im Header) als meta Tag eingetragen werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;GoogleMapsApiKey&amp;quot; content=&amp;quot;&amp;lt;Key&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird die Leaflet/OSM Variante verwendet (data-map_type=&amp;quot;OSM&amp;quot;), so ist zunächst kein Schlüssel für die Kartendarstellung notwendig. Will man allerdings eine Route oder die Verkehrslage darstellen, so wird ein Map API Key von TomTom benötigt (bekommt man für private Zwecke auch ohne Hinterlegung einer Kreditkarte). Hinweise wie man den besorgt, siehe unter [https://developer.tomtom.com]. Auch dieser Key muss als meta Tag in das HTML File.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;TomTomApiKey&amp;quot; content=&amp;quot;&amp;lt;Key&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Attribute==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-device&#039;&#039;&#039;||FHEM-Device, dessen Readings dargestellt werden sollen||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-alias&#039;&#039;&#039;||Legt fest, aus welchem Reading der Name für die Anzeige genommen werden soll||alias||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-latitude&#039;&#039;&#039;||Legt fest, aus welchem Reading die geograpfische Breite genommen werden soll||latitude||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-longitude&#039;&#039;&#039;||Legt fest, aus welchem Reading die geograpfische Länge genommen werden soll||longitude||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-language&#039;&#039;&#039;||Kann &#039;de&#039; oder &#039;en&#039; sein und stellt die Sprache für die Ausgabe in den Info Windows ein||de||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-size&#039;&#039;&#039;||Gibt die Größe des Kartenausschnittes an (als String mit &#039;&amp;lt;Breite&amp;gt;,&amp;lt;Höhe&amp;gt;&#039;), kann auch weggelassen werden, wenn es sich um ein TRAFFIC Device handelt, dann wird der Wert aus dem GoogleMapsSize Reading genommen oder, falls das auch nicht vorhanden ist, wird die Größe aus der Ausdehnung der Route(n) ermittelt.||auto||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-center&#039;&#039;&#039;||Gibt das Zentrum der Karte an (als String mit &#039;&amp;lt;Latitude&amp;gt;,&amp;lt;Longitude&amp;gt;&#039;), kann auch weggelassen werden, wenn es sich um ein TRAFFIC Device handelt, dann wird der Wert aus GoogleMapsCenter Reading genommen oder, falls das auch nicht vorhanden ist, wird das Zentrum aus der Ausdehnung der Route(n) ermittelt.||auto||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-zoom&#039;&#039;&#039;||Gibt den Zoomwert der Karte an (als integer Wert, siehe Google Maps API), kann auch weggelassen werden, wenn es sich um ein TRAFFIC Device handelt, dann wird der Wert aus dem GoogleMapsZoom Reading genommen oder, falls das auch nicht vorhanden ist, wird der Zoom Wert aus der Ausdehnung der Route(n) ermittelt.||auto||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-travel_mode&#039;&#039;&#039;||Gibt an, wie die Route berechnet werden soll. Es gibt die Möglichkeiten &#039;DRIVING&#039;, &#039;WALKING&#039;, &#039;BICYCLING&#039;, &#039;TRANSIT&#039; (Details siehe TRAFFIC Modul von FHEM oder Google Maps API für den &#039;Directions&#039; Service), kann auch weggelassen werden, wenn es sich um ein TRAFFIC Device handelt, dann wird der Wert aus dem trafficMode Reading genommen.||DRIVING||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-traffic&#039;&#039;&#039;||Gibt an, ob die Verkehrslage auf der Karte dargestellt werden soll||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-showdetails&#039;&#039;&#039;||Gibt an ob per Default die Info Windows eingeblendet werden sollen||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-stroke&#039;&#039;&#039;||Gibt an, wie die Fahrstrecken oder Symbole dargestellt werden sollen. Besteht aus maximal 6 Werten (Farbe Hinweg, Breite Hinweg, Durchsichtigkeit Hinweg, Farbe Rückweg, Breite Rückweg, Durchsichtigkeit Rückweg), die Farbe wird per #rrggbb angegeben, die Breite in Pixel und die Durchsichtigkeit als Prozentwert zwischen 0% und 100%, siehe auch Details zum Modul TRAFFIC. Die Symbole zur Route werden in der doppelten angegebenen Breite des Pfades dargestellt||#ffffff,7,50,#ffffff,7,50||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-icon&#039;&#039;&#039;||Hiermit kann ein Icon angegeben werden, welches statt des standardmäßigen Pfeils verwendet werden soll, um die Position zu markieren. Kann eine URL auf eine icon Datei, die relativ zum Verzeichnis www/images/ liegt sein||||&#039;default/HOME_Status.1.png&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-label&#039;&#039;&#039;||Will man statt eines Icons ein FontAwesome/Openautomation/fhemSVG Font-Icon (z.B. &#039;fa-home&#039;, &#039;oa-weather_winter&#039;, &#039;fs-usb_stick&#039;) verwenden, wird das hiermit angegeben (es kann auch icon und Font-Icon zusammen verwendet werden (z.B. ein Kreis als Icon und darin ein Font-Icon.||||fa-home&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-nightmode&#039;&#039;&#039;||legt fest, ob die Karte im Nachtmodus (dunkel) dargestellt werden soll (geht bisher noch nicht mit OSM)||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-style&#039;&#039;&#039;||Möglichkeit zum Setzen eines Styles entsprechend der Map API Options (siehe Dokumentation zu den Map APIs von Google und Leaflet)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-geojson&#039;&#039;&#039;||gibt den Namen eines Files auf dem Server an, in dem Daten zur Darstellung im GEOJSON Format (siehe [www.geojson.org]) abgelegt sind||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-feature_style&#039;&#039;&#039;||Legt fest, wie die GEOJSON Daten dargestllt werden bzw. was passiert, wenn man auf einzelne Features klickt bzw. sie mit der Maus überstreicht (Details siehe unten unter &amp;lt;&amp;gt;||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Details zu GEOJSON Files==&lt;br /&gt;
Die Datei muss auf dem Server (FHEM) liegen (also typischerweise im www/tablet Verzeichnis). Ich habe z.B. unter www/table ein Unterverzeichnis data erstellt und geben data-geojson=&amp;quot;data/file.geojson&amp;quot; an. In dem geojson file können beliebige Objekte definiert werden, das Format ist unter [www.geojson.org] nachzulesen&lt;br /&gt;
Über den Parameter data-feature_style kann man recht flexibel festlegen, wie die Objekte dargestellt werden sollen. Das Ganze ist ein js Objekt, wird also in &#039;{}&#039; eingeschlossen. Innerhalb des Objektes legen 3 Objekteigenschaften fest, wie die Darstellung aussehen soll.&lt;br /&gt;
Die Eigenschaft &amp;quot;popup_properties_click&amp;quot; hat als Wert eine Leerzeichen getrennte Liste von Expressions, welche, falls sie auf Properties der Objekte im geojson File zutreffen, dazu führen, dass beim Klick auf die angezeigten Objekte ein Info Window geöffnet wird, welches die entsprechenden geojson Objekteigenschaften anzeigt.&lt;br /&gt;
Die Eigenschaft &amp;quot;popup_properties_move&amp;quot; macht genau das Gleiche, allerdings sorgen die dort angegebenen Expressions dafür dass die dazu passenden geojson Objekte per Popup bei Überfahren mit der Maus und nicht bei Klick angezeigt werden und beim Verlassen mit der Maus dann auch wieder automatisch verschwinden.&lt;br /&gt;
Die Eigenschaft &amp;quot;display_styles&amp;quot; legt genau fest, wie die verschiedenen geojson Objekte dargestellt werden sollen. Der Wert dieser Eigenschaft ist wiederum ein Objekt. Als Eigenschaftsname wird ein Verweis auf ein bestimmtes Objekt im geojson File verwendet. Der Verweis kann entweder eine Eigenschaft eines Objekts im geojson File sein oder eine Kombination aus Eigenschaft und Wert (also nicht alle Objekte des gleichen Typs sondern nur die, die eine auch den passenden Wert haben). Dahinter wird dann der zu verwendete Stil als weiteres Objekt angegeben, welches aus einer Menge aus Property:Value pairs besteht, bei dem die Property die Displayeigenschaft (also z.B. Farbe) und der Wert dann den dazugehörigen Wert (also z.B. rot) festlegt. Alles was nicht explizit hier festgelegt wird, wird aus den &amp;quot;globalen&amp;quot; Einstellungen (z.B. data-stroke) übernommen. Die folgende Definition generiert, wenn man das Beispielfile [[https://forum.fhem.de/index.php?action=dlattach;topic=78379.0;attach=97671|Beispieldatei]] als GEOJSON abspeichert und dann in data-geojson den Speicherort angibt, die darunter dargestellte Karte.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
data-feature_style=&#039;{&lt;br /&gt;
	&amp;quot;popup_properties_click&amp;quot;:&amp;quot;name network operator fire.*&amp;quot;,&lt;br /&gt;
	&amp;quot;popup_properties_move&amp;quot;:&amp;quot;fire.*\\:diameter&amp;quot;,&lt;br /&gt;
	&amp;quot;display_styles&amp;quot;:{&lt;br /&gt;
		&amp;quot;emergency.fire_hydrant&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;fa-fire-extinguisher&amp;quot;,&amp;quot;strokeColor&amp;quot;:&amp;quot;red&amp;quot;},&lt;br /&gt;
		&amp;quot;public_transport.station&amp;quot;:{&amp;quot;label&amp;quot;:&amp;quot;fa-train&amp;quot;,&amp;quot;strokeColor&amp;quot;:&amp;quot;black&amp;quot;}}&lt;br /&gt;
}&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:2018-03-05_11h55_51.png|thumb|none|Mit obigem Beispielfile und gezeigtem data-feature_style erstellte Karte]]&lt;br /&gt;
&lt;br /&gt;
Noch etwas zusätzliches: Einge gute Möglichkeit sich geojson Files zu holen (von der auch das Beispiel stammt), ist die webseite [http://overpass-turbo.eu/]. Dort kann man sich für beliebige Gebiete per Wizard eine Abfrage basteln, die dann bestimmte Infos aus Open Street Maps herausfiltert und als geojson exportieren kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Tablet UI|Maps]]&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:FTUI_Maps_3.png&amp;diff=27976</id>
		<title>Datei:FTUI Maps 3.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:FTUI_Maps_3.png&amp;diff=27976"/>
		<updated>2018-10-05T13:39:35Z</updated>

		<summary type="html">&lt;p&gt;Eki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:FTUI_Maps_2.png&amp;diff=27975</id>
		<title>Datei:FTUI Maps 2.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:FTUI_Maps_2.png&amp;diff=27975"/>
		<updated>2018-10-05T13:35:34Z</updated>

		<summary type="html">&lt;p&gt;Eki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:2018-03-05_11h55_51.png&amp;diff=27974</id>
		<title>Datei:2018-03-05 11h55 51.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:2018-03-05_11h55_51.png&amp;diff=27974"/>
		<updated>2018-10-05T13:32:29Z</updated>

		<summary type="html">&lt;p&gt;Eki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FHEM_Tablet_UI&amp;diff=27973</id>
		<title>FHEM Tablet UI</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FHEM_Tablet_UI&amp;diff=27973"/>
		<updated>2018-10-05T13:17:31Z</updated>

		<summary type="html">&lt;p&gt;Eki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Oberfläche für FHEM&lt;br /&gt;
|ModType=x&lt;br /&gt;
|ModFTopic=34233&lt;br /&gt;
|ModForumArea=TabletUI&lt;br /&gt;
|ModTechName=n.a.&lt;br /&gt;
|ModOwner=setstate ({{Link2FU|7023|Forum}})&lt;br /&gt;
}}&lt;br /&gt;
[[FHEM Tablet UI]] (FTUI) ist ein leichtgewichtiges aber funktionsreiches Frontend-Framework zum Steuern und Überwachen von in FHEM integrierten Geräten. Es basiert auf HTML/CSS/JavaScript und stellt somit keine zusätzlichen Anforderungen an den FHEM-Server.&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe zahlreicher Widgets, die sehr leicht mit HTML Code konfiguriert werden können, ist es möglich, innerhalb kurzer Zeit ein den eigenen Wünschen entsprechendes User-Interface aufzubauen.&lt;br /&gt;
&lt;br /&gt;
Für den Betrieb ist nur eine FHEM-Installation mit [[HTTPSRV|HTTPSRV-Modul]] sowie ein gängiger Webbrowser notwendig.&lt;br /&gt;
&lt;br /&gt;
Mit wenigen Anpassungen ist es auch möglich, das UI auf anderen Webservern (Apache, u.a.) zu betreiben. Somit können FHEM und FHEM Tablet UI auch auf getrennten Systemen ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
[[File:tablet_ui.png|thumb|500px|center|Beispiel für ein mit [[FHEM Tablet UI]] erstelltes User-Interface]]&lt;br /&gt;
&lt;br /&gt;
{{Todo|Design-Möglichkeiten erklären, Navigationsmethoden ausformulieren}} &lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Die Installation von FHEM Tablet UI erzeugt keinen großen Aufwand und besteht im Großen und Ganzen aus drei Schritten:&lt;br /&gt;
*Dateien aus dem GitHub-Repository herunterladen&lt;br /&gt;
*FHEM konfigurieren ([[HTTPSRV]]-Device erstellen, [[FHEMWEB]]-Attribut longpoll einstellen)&lt;br /&gt;
*Eine Beispieldatei anlegen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Diese Anleitung geht davon aus, dass FHEM unter Debian nach der Anleitung [https://debian.fhem.de Stable build using apt] installiert wurde.&lt;br /&gt;
Ist dies nicht der Fall, muss der Pfad &#039;&#039;&#039;/opt/fhem&#039;&#039;&#039; dementsprechend angepasst werden.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.&#039;&#039;&#039; Zuerst müssen alle Dateien von FHEM Tablet UI in das FHEM-Verzeichnis &#039;&#039;&#039;/opt/fhem/www&#039;&#039;&#039; kopiert werden. Das geht mit folgendem &#039;&#039;&#039;update&#039;&#039;&#039;-Befehl über die FHEM-Befehlszeile.&lt;br /&gt;
:&amp;lt;code&amp;gt;update all https://raw.githubusercontent.com/knowthelist/fhem-tablet-ui/master/controls_fhemtabletui.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:[[Datei:FTUI_Installation_01.png|thumb|none|Schritt 1: Dateien kopieren]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2.&#039;&#039;&#039; Anschließend ist ein neues [[HTTPSRV]]-Device in FHEM anzulegen, welches auf den Ordner mit den gerade heruntergeladenen Dateien verweist.&lt;br /&gt;
:&amp;lt;code&amp;gt;define TABLETUI HTTPSRV ftui/ ./www/tablet/ Tablet-UI&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:[[Datei:FTUI_Installation_02.png|thumb|none|Schritt 2: HTTPSRV-Device anlegen]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Dieser Schritt kann ausgelassen werden, wenn die Funktionalitäten von [[FHEMWEB]] ausreichend sind. Dann muss FTUI aber in weiterer Folge unter der URL &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;http(s)://&amp;lt;fhem-server&amp;gt;:8083/fhem/tablet/index.html&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039; aufgerufen werden und es wird kein Link auf FTUI in der FHEM GUI erstellt. Vorteil ist aber, dass das FHEMWEB-Caching verwendet werden kann. Siehe dieser {{Link2Forum|Topic=86362|Message=788258}}.}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3.&#039;&#039;&#039; Damit FHEM Tablet UI mit FHEM kommunizieren kann, ist noch die &#039;&#039;&#039;longpoll&#039;&#039;&#039;-Einstellung im [[FHEMWEB]] Device festzulegen.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;attr WEB longpoll websocket&amp;lt;/code&amp;gt;&lt;br /&gt;
:bzw. bei Problemen mit &#039;&#039;websocket&#039;&#039;&lt;br /&gt;
:&amp;lt;code&amp;gt;attr WEB longpoll 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:[[Datei:FTUI_Installation_03.png|thumb|none|Schritt 3: longpoll einstellen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;4.&#039;&#039;&#039; Weil FTUI noch nichts anzuzeigen hat, wird die Datei &#039;&#039;&#039;/opt/fhem/www/tablet/index-example.html&#039;&#039;&#039; nach &#039;&#039;&#039;/opt/fhem/www/tablet/index.html&#039;&#039;&#039; kopiert.&lt;br /&gt;
:&amp;lt;code&amp;gt;sudo cp -a /opt/fhem/www/tablet/index-example.html /opt/fhem/www/tablet/index.html&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:[[Datei:FTUI_Installation_04.png|thumb|none|Schritt 4: index.html erstellen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;5.&#039;&#039;&#039; Abschließend muss FHEM noch &#039;&#039;&#039;neu gestartet&#039;&#039;&#039; werden (&#039;&#039;shutdown restart&#039;&#039;) da das Attribut &#039;&#039;&#039;longpoll&#039;&#039;&#039; geändert wurde.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Somit ist FHEM Tablet UI bereit zur Verwendung und kann durch Aufruf der URL &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;http://&amp;lt;fhem-server&amp;gt;:8083/fhem/ftui/&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039; oder den Link im FHEM-Menü geöffnet werden&lt;br /&gt;
&lt;br /&gt;
== Update ==&lt;br /&gt;
Ein Update von FTUI kann ebenfalls über die FHEM-Kommandozeile erfolgen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.&#039;&#039;&#039; Prüfen der Änderungen seit dem letzten Download/Update durch Eingabe von:&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;update check https://raw.githubusercontent.com/knowthelist/fhem-tablet-ui/master/controls_fhemtabletui.txt&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2.&#039;&#039;&#039; Update der geänderten Dateien durch Eingabe von:&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;update all https://raw.githubusercontent.com/knowthelist/fhem-tablet-ui/master/controls_fhemtabletui.txt&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Eine weitere Option ist das Hinzufügen des FTUI-Git-Repositories zum allgemeinem Update-Vorgang von FHEM. Dabei wird dann bei einem FHEM-Update auch gleich FHEM Tablet UI aktualisiert, bzw. die Änderungen angezeigt.&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;update add https://raw.githubusercontent.com/knowthelist/fhem-tablet-ui/master/controls_fhemtabletui.txt&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
===DOCTYPE===&lt;br /&gt;
In allen HTML-Dateien, die im Browser geladen werden und das typische HTML-Gerüst besitzen (also alle Hauptseiten, jedoch keine Template-Dateien), sollte eine &#039;&#039;Document Type Declaration&#039;&#039; (DTDT) eingefügt werden. Mit ihr wird festgelegt, welche &#039;&#039;Document Type Definition&#039;&#039; hier verwendet wird (das kommt aus der Metasprache XML), konkret also, in welcher Version der nachfolgende HTML-Code vom Browser interpretiert werden soll. Lässt man die DTDT weg, oder definiert sie auf verschiedenen Seiten unterschiedlich, kann ein und der selbe HTML-Code zu unterschiedlichen Darstellungen führen. Die DTDT erfolgt immer auf der ersten Zeile, noch vor dem &amp;lt;code&amp;gt;&amp;lt;html&amp;gt;&amp;lt;/code&amp;gt;-Tag. Nachfolgend wird HTML5 verwendet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;...&amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;...&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===META-Parameter===&lt;br /&gt;
Das Tablet UI lässt sich über die META-Parameter konfigurieren. Diese Parameter sind in jeder &#039;&#039;&#039;.html&#039;&#039;&#039; Datei (z.B. index.html) im Abschnitt &#039;&#039;&#039;&amp;lt;head&amp;gt;&#039;&#039;&#039; einzutragen. Ausgenommen davon sind Dateien, die als Template, Pagebutton-Zielseiten oder ähnliches eingebunden werden.&lt;br /&gt;
&lt;br /&gt;
Die Parameter sind immer nach diesem Schema aufgebaut:&lt;br /&gt;
 &amp;lt;meta name=&amp;quot;[Parameter-Name]&amp;quot; content=&amp;quot;[Parameter-Wert]&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Verbindung zu FHEM===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Parameter-Name!!Standard-Wert!!Mögliche Werte!!Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|web_device||WEB||String||FHEM-Device, welches für das Polling verwendet wird&lt;br /&gt;
|-&lt;br /&gt;
|longpoll||1||0, 1||&lt;br /&gt;
&#039;&#039;&#039;0&#039;&#039;&#039;: Longpoll deaktiviert; alle 30s ein Shortpoll (Neuladen der gesamten Statusänderungen)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1&#039;&#039;&#039;: Longpoll aktiv; geänderte Stati werden sofort aktualisiert, zusätzlich werden alle 15min die gesamten Statusänderungen geladen.&lt;br /&gt;
|-&lt;br /&gt;
|longpoll_type||websocket||websocket, ajax, 0||&lt;br /&gt;
&#039;&#039;&#039;websocket&#039;&#039;&#039;: Für die Aktualisierung der Daten wird das Websocket-Protokoll verwendet. Werden vom Browser keine Websockets unterstützt, gibt es einen automatischen Fallback auf Ajax.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ajax&#039;&#039;&#039;: Ajax wird für die Aktualisierung verwendet.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0&#039;&#039;&#039;: Longpoll deaktiviert, Shortpoll wird verwendet.&lt;br /&gt;
|-&lt;br /&gt;
|longpoll_filter||.*||RegEx||Event-Filter. Kann verwendet werden, wenn z.B. Devices, die in FTUI angezeigt werden, in einem eigenen FHEM-Room sind.&lt;br /&gt;
|-&lt;br /&gt;
|longpoll_maxage||240||Integer||Kommen in diesem Zeitraum (Sekunden) keine Longpoll-Events bei FTUI an, wird die Verbindung als &amp;quot;disconnected&amp;quot; angesehen und ein neuer Verbindungsversuch wird gestartet.&lt;br /&gt;
|-&lt;br /&gt;
|shortpoll_interval||900||Integer||Zeitraum in Sekunden, nach dem ein vollständiger Refresh stattfindet&lt;br /&gt;
|-&lt;br /&gt;
|shortpoll_only_interval||30||Integer||Zeitraum in Sekunden, nach dem ein vollständiger Refresh stattfindet, sollte Longpoll deaktiviert sein&lt;br /&gt;
|-&lt;br /&gt;
|fhemweb_url||/fhem/||Integer||URL zu FHEM. Wird benötigt wenn FTUI auf einem anderen als dem FHEM Server läuft oder nicht im Standard-Pfad installiert ist. &lt;br /&gt;
Hinweis: Wenn FHEM auf einem anderem Server/Domain läuft muss man das &amp;quot;CORS&amp;quot; Attribut im FHEMWEB Modul (s.o.) auf 1 setzen, sonst bekommt man Cross Origin Fehler. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Funktionalität===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Parameter-Name!!Standard-Wert!!Mögliche Werte!!Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|debug||0||0 - 5||Log-Level&lt;br /&gt;
|-&lt;br /&gt;
|toast||5||Integer||Anzahl an gleichzeitig angezeigten Toast-Nachrichten. Um keine anzuzeigen, ist der Wert auf 0 zu setzen.&lt;br /&gt;
|-&lt;br /&gt;
|toast_position||bottom-left||||Position im Browserfenster, wo die Toast-Nachrichten angezeigt werden.&lt;br /&gt;
|-&lt;br /&gt;
|lang||de||de||Sprache der Oberfläche (für z.B. Datums-/Zeitfunktionen)&lt;br /&gt;
|-&lt;br /&gt;
|username||||String||Benutzername für eine Basic-Authentifierung *&lt;br /&gt;
|-&lt;br /&gt;
|password||||String||Passwort für eine Basic-Authentifizierung *&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;*&#039;&#039;&#039; Derzeit wird die Basic-Authentifizierung in Kombination mit WebSockets nicht unterstützt. Die Verwendung von &#039;&#039;&#039;longpoll=1&#039;&#039;&#039; (ajax) ist daher notwendig.&lt;br /&gt;
&lt;br /&gt;
===Toast-Nachrichten===&lt;br /&gt;
[[Datei:Ftui_toast.png|thumb|Toast-Nachrichten]]&lt;br /&gt;
Tablet-UI liefert Informationen darüber, was im Moment gerade passiert. Das geschieht über Toast-Nachrichten, die in der Standardeinstellung unten links im Browser auftauchen.&lt;br /&gt;
&lt;br /&gt;
Wird beispielsweise ein Gerät eingeschaltet, so erscheint eine kleine Nachricht mit dem abgesetzten Befehl. Auch Fehlermeldungen und Statusinformationen werden angezeigt. Ob überhaupt und was konkret angezeigt wird, richtet sich nach dem eingestellten Debug-Level (siehe oben). Beim Debug-Level 5 werden alle Nachrichten angezeigt, bei 0 keine.&lt;br /&gt;
&lt;br /&gt;
Die Position der Toast-Nachrichten kann über den Meta-Tag &amp;lt;code&amp;gt;meta name=&#039;toast_position&#039;&amp;lt;/code&amp;gt; festgelegt werden. Für oben-mittig müsste folgender Code eingefügt werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;meta name=&#039;toast_position&#039; content=&#039;top-center&#039;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Möglich sind folgende Positionen:&lt;br /&gt;
* &amp;lt;code&amp;gt;top-left&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;top-right&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bottom-left&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bottom-right&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;top-center&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bottom-center&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;mid-center&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die maximale Anzahl an Nachrichten, die gleichzeitig angezeigt werden können, lässt sich mit &amp;lt;code&amp;gt;meta name=&#039;toast&#039;&amp;lt;/code&amp;gt; Sind maximal 2 Nachrichten gewünscht, muss folgender Meta-Tag gesetzt werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;meta name=&#039;toast&#039; content=&#039;2&#039;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Navigationsmethoden==&lt;br /&gt;
{{Todo|Dieser Abschnitt dient derzeit lediglich als Sammlung von Stichpunkten und muss vollständig überarbeitet werden.}} &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Unterschied zwischen Pagetab und Pagebutton:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pagetab:&#039;&#039;&#039; Ganze Seite austauschen -&amp;gt; Menü muss auf jede Seite&lt;br /&gt;
[[FTUI_Widget_Pagetab]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pagebutton:&#039;&#039;&#039; Teil der Seite austauschen -&amp;gt; Menü nur in erster Seite&lt;br /&gt;
[[FTUI_Widget_Pagebutton]]&lt;br /&gt;
&lt;br /&gt;
==Gestaltung==&lt;br /&gt;
===Layout-Optionen===&lt;br /&gt;
* [[FTUI Layout Gridster|Gridster]]&lt;br /&gt;
* [[FTUI Layout Flex|Flex]]&lt;br /&gt;
* [[FTUI Layout Sheet|Tabelle]]&lt;br /&gt;
* [[FTUI Layout Row|Reihen]]&lt;br /&gt;
&lt;br /&gt;
=== Farben ===&lt;br /&gt;
Es besteht die Möglichkeit, die Farbwerte in hexadezimaler Form, als RGB-Wert oder mit dem Farbnamen anzugeben. Zum Beispiel: &lt;br /&gt;
&lt;br /&gt;
*HEX: #ADD8E6&lt;br /&gt;
*RBG: rgb(173, 216, 230)&lt;br /&gt;
*Namen: lightblue&lt;br /&gt;
&lt;br /&gt;
Knallige Farben wie &#039;&#039;&#039;&amp;lt;span style=&amp;quot;color: #ff0000;&amp;quot;&amp;gt;#ff0000&amp;lt;/span&amp;gt;&#039;&#039;&#039; für Rot oder &#039;&#039;&#039;&amp;lt;span style=&amp;quot;color: #00ff00;&amp;quot;&amp;gt;#00ff00&amp;lt;/span&amp;gt;&#039;&#039;&#039; für Grün sollten vermieden werden.&lt;br /&gt;
Es ist besser unterhalb von #D0 (208) für die Grundfarben zu bleiben.&lt;br /&gt;
&lt;br /&gt;
Empfohlene Farben sind z.B.:&lt;br /&gt;
&lt;br /&gt;
*Orange: &amp;lt;span style=&amp;quot;color: #aa6900;&amp;quot;&amp;gt;#aa6900&amp;lt;/span&amp;gt;&lt;br /&gt;
*Rot: &amp;lt;span style=&amp;quot;color: #ad3333;&amp;quot;&amp;gt;#ad3333&amp;lt;/span&amp;gt;&lt;br /&gt;
*Grün: &amp;lt;span style=&amp;quot;color: #32a054;&amp;quot;&amp;gt;#32a054&amp;lt;/span&amp;gt;&lt;br /&gt;
*Blau: &amp;lt;span style=&amp;quot;color: #6699FF;&amp;quot;&amp;gt;#6699FF&amp;lt;/span&amp;gt;&lt;br /&gt;
*Grau: &amp;lt;span style=&amp;quot;color: #8C8C8C;&amp;quot;&amp;gt;#8C8C8C&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hilfreich bei der Suche nach den Farbwerten ist zum Beispiel der Color-Picker auf dieser Seite: http://www.colorpicker.com. Für die Suche nach Farben, die einen guten Kontrast bilden, diese Webseite: http://vanisoft.pl/~lopuszanski/public/colors/&lt;br /&gt;
&lt;br /&gt;
Im Ordner &#039;&#039;css&#039;&#039; der FTUI Installation finden sich einige vorbereitete Farbschemata. Diese können mit einem zusätzlichen Eintrag im &amp;lt;nowiki&amp;gt;&amp;lt;head&amp;gt;&amp;lt;/nowiki&amp;gt;-Bereich der FTUI-Seite(n) aktiviert werden.&lt;br /&gt;
&lt;br /&gt;
Hier am Beispiel eines blauen Farbschemas:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
   [...]&lt;br /&gt;
   &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;/fhem/tablet/css/fhem-blue-ui.css&amp;quot; /&amp;gt;&lt;br /&gt;
   [...]&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Schema-Dateien ändern alle Widgets. &lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Theme_default.png|default&lt;br /&gt;
File:Theme_blue.png|fhem-blue-ui.css&lt;br /&gt;
File:Theme_green.png|fhem-green-ui.css&lt;br /&gt;
File:Theme_mobile.png|fhem-mobile-ui.css&lt;br /&gt;
File:Theme_darkblue.png|fhem-darkblue-ui.css&lt;br /&gt;
File:Theme_darkgreen.png|fhem-darkgreen-ui.css&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Einzelne Widgets können durch Hinzufügen der jeweiligen [[#CSS-Klassen|CSS-Klasse]] geändert werden.&lt;br /&gt;
&lt;br /&gt;
===CSS-Styles===&lt;br /&gt;
Das Layout und das Aussehen des UI kann durch diverse vorgegebene CSS-Klassen beeinflusst werden. Die verfügbaren Klassen sind im Abschnitt [[#CSS-Klassen|CSS-Klassen]] aufgeführt.&lt;br /&gt;
&lt;br /&gt;
Soll das Aussehen des UI durch eigene CSS-Klassen oder durch Überschreiben der vorhandenen verändert werden, kann eine eigene CSS-Datei erstellt werden, die dann bei einem eventuellen Update von FTUI nicht überschrieben wird. Diese Datei muss den Dateinamen &#039;&#039;&#039;fhem-tablet-ui-user.css&#039;&#039;&#039; haben und im Ordner &#039;&#039;&#039;/fhem/tablet/css&#039;&#039;&#039; abgelegt werden. Sie wird dann beim Aufruf von FTUI automatisch mitgeladen.&lt;br /&gt;
&lt;br /&gt;
=== CSS-Klassen ===&lt;br /&gt;
Nicht alle Widgets unterstützen alle hier angegebenen Klassen. Welche genau unterstützt werden, kann auf der jeweiligen Widget-Seite nachgelesen werden.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: left;&amp;quot;|sheet/row/cell-Layout&lt;br /&gt;
|-&lt;br /&gt;
!class=&amp;quot;mw-collapsible-content&amp;quot;|Klasse!!Beschreibung&lt;br /&gt;
{{FTUI Klasse|sheet}}{{FTUI Klasse|row}}{{FTUI Klasse|cell}}{{FTUI Klasse|cell-1-x}}{{FTUI Klasse|cell-x}}{{FTUI Klasse|left-align}}{{FTUI Klasse|right-align}}{{FTUI Klasse|bottom-align}}{{FTUI Klasse|top-align}}{{FTUI Klasse|center-align}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: left;&amp;quot;|row/col-Layout&lt;br /&gt;
|-&lt;br /&gt;
!class=&amp;quot;mw-collapsible-content&amp;quot;|Klasse!!Beschreibung&lt;br /&gt;
{{FTUI Klasse|col}}{{FTUI Klasse|col-1-x}}{{FTUI Klasse|col-x}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: left;&amp;quot;|hbox/vbox-Layout&lt;br /&gt;
|-&lt;br /&gt;
!class=&amp;quot;mw-collapsible-content&amp;quot;|Klasse!!Beschreibung&lt;br /&gt;
{{FTUI Klasse|vbox}}{{FTUI Klasse|hbox}}{{FTUI Klasse|card}}{{FTUI Klasse|phone-width}}{{FTUI Klasse|full-height}}{{FTUI Klasse|full-width}}{{FTUI Klasse|grow-0}}{{FTUI Klasse|grow-1}}{{FTUI Klasse|grow-2}}{{FTUI Klasse|grow-x}}{{FTUI Klasse|items-top}}{{FTUI Klasse|items-center}}{{FTUI Klasse|items-bottom}}{{FTUI Klasse|items-space-between}}{{FTUI Klasse|items-space-around}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: left;&amp;quot;|Generelle Klassen für die Positionierung&lt;br /&gt;
|-&lt;br /&gt;
!class=&amp;quot;mw-collapsible-content&amp;quot;|Klasse!!Beschreibung&lt;br /&gt;
{{FTUI Klasse|inline}}{{FTUI Klasse|newline}}{{FTUI Klasse|top-space}}{{FTUI Klasse|top-space-2x}}{{FTUI Klasse|top-space-3x}}{{FTUI Klasse|left-space}}{{FTUI Klasse|left-space-2x}}{{FTUI Klasse|left-space-3x}}{{FTUI Klasse|right-space}}{{FTUI Klasse|right-space-2x}}{{FTUI Klasse|right-space-3x}}{{FTUI Klasse|top-narrow}}{{FTUI Klasse|top-narrow-2x}}{{FTUI Klasse|top-narrow-10}}{{FTUI Klasse|left-narrow}}{{FTUI Klasse|left-narrow-2x}}{{FTUI Klasse|left-narrow-3x}}{{FTUI Klasse|right-narrow}}{{FTUI Klasse|right-narrow-2x}}{{FTUI Klasse|right-narrow-3x}}{{FTUI Klasse|centered}}{{FTUI Klasse|wider}}{{FTUI Klasse|narrow}}{{FTUI Klasse|fullsize}}{{FTUI Klasse|compressed}}{{FTUI Klasse|height-narrow}}{{FTUI Klasse|w1x}}{{FTUI Klasse|w2x}}{{FTUI Klasse|w3x}}{{FTUI Klasse|maxw40}}{{FTUI Klasse|doublebox-v}}{{FTUI Klasse|doublebox-h}}{{FTUI Klasse|triplebox-v}}{{FTUI Klasse|right}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: left;&amp;quot;|Vordergrundfarben&lt;br /&gt;
|-&lt;br /&gt;
!class=&amp;quot;mw-collapsible-content&amp;quot;|Klasse!!Beschreibung&lt;br /&gt;
{{FTUI Klasse|red}}{{FTUI Klasse|green}}{{FTUI Klasse|blue}}{{FTUI Klasse|lightblue}}{{FTUI Klasse|orange}}{{FTUI Klasse|gray}}{{FTUI Klasse|lightgray}}{{FTUI Klasse|white}}{{FTUI Klasse|black}}{{FTUI Klasse|mint}}{{FTUI Klasse|yellow}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: left;&amp;quot;|Hintergrundfarben&lt;br /&gt;
|-&lt;br /&gt;
!class=&amp;quot;mw-collapsible-content&amp;quot;|Klasse!!Beschreibung&lt;br /&gt;
{{FTUI Klasse|bg-red}}{{FTUI Klasse|bg-green}}{{FTUI Klasse|bg-blue}}{{FTUI Klasse|bg-lightblue}}{{FTUI Klasse|bg-orange}}{{FTUI Klasse|bg-gray}}{{FTUI Klasse|bg-lightgray}}{{FTUI Klasse|bg-white}}{{FTUI Klasse|bg-black}}{{FTUI Klasse|bg-mint}}{{FTUI Klasse|bg-yellow}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: left;&amp;quot;|Rahmen&lt;br /&gt;
|-&lt;br /&gt;
!class=&amp;quot;mw-collapsible-content&amp;quot;|Klasse!!Beschreibung&lt;br /&gt;
{{FTUI Klasse|verticalLine}}{{FTUI Klasse|border-black}}{{FTUI Klasse|border-white}}{{FTUI Klasse|border-orange}}{{FTUI Klasse|border-red}}{{FTUI Klasse|border-green}}{{FTUI Klasse|border-mint}}{{FTUI Klasse|border-lightblue}}{{FTUI Klasse|border-blue}}{{FTUI Klasse|border-gray}}{{FTUI Klasse|border-yellow}}{{FTUI Klasse|border-lightgray}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: left;&amp;quot;|Größen&lt;br /&gt;
|-&lt;br /&gt;
!class=&amp;quot;mw-collapsible-content&amp;quot;|Klasse!!Beschreibung&lt;br /&gt;
{{FTUI Klasse|mini}}{{FTUI Klasse|tiny}}{{FTUI Klasse|small}}{{FTUI Klasse|normal}}{{FTUI Klasse|large}}{{FTUI Klasse|big}}{{FTUI Klasse|bigger}}{{FTUI Klasse|tall}}{{FTUI Klasse|great}}{{FTUI Klasse|grande}}{{FTUI Klasse|gigantic}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: left;&amp;quot;|Schriftstil&lt;br /&gt;
|-&lt;br /&gt;
!class=&amp;quot;mw-collapsible-content&amp;quot;|Klasse!!Beschreibung&lt;br /&gt;
{{FTUI Klasse|thin}}{{FTUI Klasse|bold}}{{FTUI Klasse|darker}}{{FTUI Klasse|truncate}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: left;&amp;quot;|Sonstiges&lt;br /&gt;
|-&lt;br /&gt;
!class=&amp;quot;mw-collapsible-content&amp;quot;|Klasse!!Beschreibung&lt;br /&gt;
{{FTUI Klasse|blank}}{{FTUI Klasse|transparent}}{{FTUI Klasse|half-transparent}}{{FTUI Klasse|blurry}}{{FTUI Klasse|shake}}{{FTUI Klasse|fail-shake}}{{FTUI Klasse|marquee}}{{FTUI Klasse|icon round}}{{FTUI Klasse|icon square}}{{FTUI Klasse|readonly}}{{FTUI Klasse|blink}}{{FTUI Klasse|rotate-90}}{{FTUI Klasse|horizontal}}{{FTUI Klasse|circleborder}}{{FTUI Klasse|autohide}}{{FTUI Klasse|notransmit}}{{FTUI Klasse|tap}}{{FTUI Klasse|FS20}}{{FTUI Klasse|value}}{{FTUI Klasse|novalue}}{{FTUI Klasse|timestamp}}{{FTUI Klasse|percent}}{{FTUI Klasse|nocache}}{{FTUI Klasse|fade}}{{FTUI Klasse|rotate}}{{FTUI Klasse|nolabels}}{{FTUI Klasse|default}}{{FTUI Klasse|prefetch}}{{FTUI Klasse|circulate}}{{FTUI Klasse|valueonly}}{{FTUI Klasse|positiononly}}{{FTUI Klasse|lineIndicator}}{{FTUI Klasse|barIndicator}}{{FTUI Klasse|roundIndicator}}{{FTUI Klasse|dim-tick}}{{FTUI Klasse|dim-front}}{{FTUI Klasse|dim-back}}{{FTUI Klasse|hue-tick}}{{FTUI Klasse|hue-front}}{{FTUI Klasse|hue-back}}{{FTUI Klasse|warn}}{{FTUI Klasse|activate}}{{FTUI Klasse|labelright}}{{FTUI Klasse|interlock}}{{FTUI Klasse|keepopen}}{{FTUI Klasse|noshade}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Icons ===&lt;br /&gt;
FTUI bringt einige Icons-&amp;quot;Schriftarten&amp;quot; mit, die für die Darstellung genützt werden können. Diese werden automatisch beim Start des UI eingebunden, sobald ein entsprechendes Icon-Präfix im Code der Seite vorkommt.&lt;br /&gt;
&lt;br /&gt;
Verfügbare Icon-Schriftarten sind:&lt;br /&gt;
* Eingebaute Icons &#039;&#039;ftui-window&#039;&#039; und &#039;&#039;ftui-door&#039;&#039;. Präfix &#039;&#039;&#039;ftui-&#039;&#039;&#039;. Beispiel: &amp;lt;code&amp;gt;data-icon=&amp;quot;ftui-door&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* [http://fontawesome.io/icons/ Font-Awesome]: Mehr als 500 Icons zur Auswahl. Präfix &#039;&#039;&#039;fa-&#039;&#039;&#039;. Beispiel: &amp;lt;code&amp;gt;data-icon=&amp;quot;fa-volume-up&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* [https://material.io/icons/ Material Icons]: Mehr als 900 Icons zur Auswahl. Präfix &#039;&#039;&#039;mi-&#039;&#039;&#039;. Beispiel: &amp;lt;code&amp;gt;data-icon=&amp;quot;mi-local_gas_station&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* FHEM und OpenAutomation Icons: Präfix &#039;&#039;&#039;fs-&#039;&#039;&#039; und &#039;&#039;&#039;oa-&#039;&#039;&#039;. Beispiel: &amp;lt;code&amp;gt;data-icon=&amp;quot;oa-secur_locked&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* [https://erikflowers.github.io/weather-icons/ Weather-Icons]: Präfix &#039;&#039;&#039;wi &#039;&#039;&#039;. Beispiel: &amp;lt;code&amp;gt;data-icon=&amp;quot;wi wi-day-rain-mix&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternativ können auch Bilder Icons (bspw. png) über CSS verwendet werden. Bspw:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
  &amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
        .logo-fhem {&lt;br /&gt;
            background: url(https://wiki.fhem.de/fhemlogo.png) no-repeat;&lt;br /&gt;
            width: 120px;&lt;br /&gt;
            height: 132px;&lt;br /&gt;
            background-size: contain;&lt;br /&gt;
        }&lt;br /&gt;
  &amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div data-type=&amp;quot;symbol&amp;quot; data-icon=&amp;quot;logo-fhem&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Widgets ==&lt;br /&gt;
===Allgemeine Attribute===&lt;br /&gt;
Jedes Widget kann über verschiedene Attribute konfiguriert werden. Folgende Attribute gelten für alle Widgets:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+allgemeine Attribute&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-type&lt;br /&gt;
|Widget-Typ&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-device&lt;br /&gt;
|FHEM-Name des Gerätes (mit dem Befehl &#039;list&#039; bekommt man im FHEM die kpl. Liste)&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |class&lt;br /&gt;
|CSS-Klassen für Aussehen und Formatierung des Widgets&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Daten Empfangen&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-get&lt;br /&gt;
|Reading Name&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-get-on&lt;br /&gt;
|Wert für den Status on&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-get-off&lt;br /&gt;
|Wert für den Status off&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Daten Senden&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-set&lt;br /&gt;
|Reading Name&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-set-on&lt;br /&gt;
|Wert für den Status on&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-set-off&lt;br /&gt;
|Wert für den Status off&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Widget-spezifische Attribute können auf der jeweiligen Widget-Seite nachgelesen werden.&lt;br /&gt;
&lt;br /&gt;
=== Integrierte Widgets ===&lt;br /&gt;
Folgende Widgets sind direkt in FHEM Tablet UI integriert und können &amp;quot;out of the box&amp;quot; verwendet werden.&lt;br /&gt;
&lt;br /&gt;
* [[FTUI Widget Button|button]]: Variante der push und switch Widgets, die entweder einen URL ansteuern oder einen FHEM-Befehl absetzen kann&lt;br /&gt;
* [[FTUI Widget Checkbox|checkbox]]: Umschalter zwischen zwei definierten Zuständen&lt;br /&gt;
* [[FTUI Widget Circlemenu|circlemenu]]: Mehrere Widgets hinter einem Widget verborgen, trotz des &#039;circle&#039; im Namen kann das Menue jetzt auch horizontal oder vertikal ausgeklappt werden &lt;br /&gt;
* [[FTUI Widget Clock|clock]]: Stellt eine einfache Uhr zur Verfügung&lt;br /&gt;
* [[FTUI Widget Colorwheel|colorwheel]]: Farbpalette zur Auswahl von Farben&lt;br /&gt;
* [[FTUI Widget Controlbutton|controlbutton]]: iOS-ähnlicher Button zum Schalten zwischen zwei Zuständen (z.B. on / off)&lt;br /&gt;
* [[FTUI Widget Controller|controller]]: iOS-ähnlicher vertikaler Schieberegler zum Einstellen eines Wertes&lt;br /&gt;
* [[FTUI Widget Datetimepicker|datetimepicker]]: Erstellt eine Auswahl für Datum/Uhrzeit&lt;br /&gt;
* [[FTUI Widget Departure|departure]]: Abfahrtszeiten öffentlicher Verkehrsmittel&lt;br /&gt;
* [[FTUI Widget Dimmer|dimmer]]: Ein-/Aus-Button mit integriertem Schieberegler für z.B. einen Dim-Wert&lt;br /&gt;
* [[FTUI Widget Eventmonitor|eventmonitor]]:&lt;br /&gt;
* [[FTUI Widget Homestatus|homestatus]]: Auswahl für vier oder fünf definierte Stati eines Objects (z.B.: FHEM Residents)&lt;br /&gt;
* [[FTUI Widget Html|html]]:&lt;br /&gt;
* [https://github.com/nesges/Widgets-for-fhem-tablet-ui/wiki/iframe iframe]: Widget zum Einbinden externer Inhalte in einem Iframe&lt;br /&gt;
* [[FTUI Widget Image|image]]: Zeigt ein Bild, dessen URL fest vorgegeben oder aus einem Device-Reading gelesen werden kann&lt;br /&gt;
* [[FTUI Widget Input|input]]: Erstellen eines Texteingabefeldes&lt;br /&gt;
* [https://github.com/nesges/Widgets-for-fhem-tablet-ui/wiki/joinedlabel joinedlabel]: verbindet mehrere Readings zu einem Feld&lt;br /&gt;
* [[FTUI Widget Klimatrend|klimatrend]]: wandelt Daten aus dem statistics-Modul in einen Pfeil um, der den aktuellen Trend anzeigt&lt;br /&gt;
* [[FTUI Widget Knob|knob]]: Erstellt einen Statusbalken auf einer Kreisbahn&lt;br /&gt;
* [[FTUI Widget Label|label]]: Reading als Text anzeigen&lt;br /&gt;
* [[FTUI Widget Level|level]]: Vertikale oder horizontale Leiste zur Anzeige von Werten zwischen einem Minimal- und einem Maximalwert&lt;br /&gt;
* [[FTUI Widget Link|link]]: Erstellt einen Link oder Button zum Aufrufen von URLs oder Senden von Befehlen an FHEM&lt;br /&gt;
* [[FTUI Widget Medialist|medialist]]:&lt;br /&gt;
* [[FTUI Widget Multistatebutton|multistatebutton]]: Variante des push-Widgets, welches den set-Befehl abhängig vom gelesenen Status ändert&lt;br /&gt;
* [[FTUI Widget Notify|notify]]: Blendet ein Hinweisfenster im Browser ein&lt;br /&gt;
* [[FTUI Widget Pagebutton|pagebutton]]: Button, mit dem auf andere Seiten gesprungen werden kann. Eignet sich gut für eine Navigation&lt;br /&gt;
* [[FTUI Widget Pagetab|pagetab]]: Tauscht den Inhalt einer Seite durch den einer anderen. Eignet sich gut für ein Navigationsmenü&lt;br /&gt;
* [[FTUI Widget Playstream|playstream]]: Abspielen eines Webradio-Streams per Button&lt;br /&gt;
* [[FTUI Widget Popup|popup]]: Öffnet ein Popup nach einem Klick auf ein Widget oder HTML-Element &lt;br /&gt;
* [[FTUI Widget Progress|progress]]: Zeigt einen Prozentwert in Form einer runden Fortschrittsleiste&lt;br /&gt;
* [[FTUI_Widget_Push|push]]: Button, mit dem ein Befehl an FHEM gesendet werden kann&lt;br /&gt;
* [[FTUI Widget Range|range]]: Erstellt vertikale Balken, die einen Wertebereich in unterschiedlichen Farben darstellen&lt;br /&gt;
* [[FTUI Widget Readingsgroup|readingsgroup]]: Zeigt eine Readingsgroup an, wie sie in FHEM definiert wurde&lt;br /&gt;
* [[FTUI Widget Rotor|rotor]]: Animiertes Umschalten von zwei oder mehr Widgets an einer Position&lt;br /&gt;
* [[FTUI Widget Scale|scale]]: Vertikale oder horizontale Leiste zur Anzeige von Werten zwischen einem Minimal- und einem Maximalwert&lt;br /&gt;
* [[FTUI_Widget_Select|select]]: Combobox, die eine Liste an Werten zur Auswahl anzeigt&lt;br /&gt;
* [https://github.com/nesges/Widgets-for-fhem-tablet-ui/wiki/settimer settimer]: Zum Anzeigen und Einstellen einer Uhrzeit&lt;br /&gt;
* [[FTUI Widget Simplechart|simplechart]]: Einfaches XY-Diagramm zur Anzeige eines Wertes, der direkt aus einem FHEM-Logfile gelesen wird&lt;br /&gt;
* [[FTUI Widget Slideout|slideout]]:&lt;br /&gt;
* [[FTUI Widget Slider|slider]]: Vertikaler Schieberegler zum Einstellen eines Wertes &lt;br /&gt;
* [[FTUI Widget Spinner|spinner]]: Element, um Werte durch Drücken auf Plus-/Minus- oder Höher-/Tiefer-Icons zu ändern&lt;br /&gt;
* [[FTUI Widget Swiper|swiper]]: Bietet die Möglichkeit, durch Wischen zwischen verschiedenen Seiten zu wechseln&lt;br /&gt;
* [[FTUI Widget Switch|switch]]: Button, um zwischen zwei Zuständen zu schalten (z.B. on / off)&lt;br /&gt;
* [[FTUI Widget Symbol|symbol]]: Status eines Devices als Symbol darstellen (z.B. Fenster offen)&lt;br /&gt;
* [[FTUI Widget Theme|theme]]: Kontextspezifisches Design&lt;br /&gt;
* [[FTUI Widget Thermostat|thermostat]]: Anzeige für Heizungsthermostate, mit der die gewünschte Temperatur eingestellt werden kann&lt;br /&gt;
* [[FTUI Widget Volume|volume]]: Einstellscheibe zur Änderung eines einzelnen Wertes&lt;br /&gt;
* [[FTUI Widget Weather|weather]]: Wettersymbol anzeigen&lt;br /&gt;
* [[FTUI Widget Weatherdetail|weatherdetail]]: Detaillierte Wettervorhersage über 4 Tage (Nutzt das Proplanta Modul)&lt;br /&gt;
* [[FTUI Widget WindDirection|wind_direction]]: Anzeige der Windrichtung auf einer Windrose&lt;br /&gt;
&lt;br /&gt;
===3rd Party Widgets===&lt;br /&gt;
Für diese Widgets kann nicht sichergestellt werden, dass sie mit der jeweils aktuellen Version von FTUI funktionieren.&lt;br /&gt;
* [[FTUI Widget Agenda|agenda]]: Zeigt Kalendereinträge in einer Listenform an&lt;br /&gt;
* [[FTUI_Widget_Analogclock|analogclock]]: Analoguhr&lt;br /&gt;
* [[FTUI Widget Calview|calview]]: Zeigt Einträge aus einem [[CALVIEW]]-Device an&lt;br /&gt;
* [[FTUI Widget Chart|chart]]: Diagramm mit ähnlichen Möglichkeiten wie die FHEM-Plots&lt;br /&gt;
* [[FTUI Widget Classchanger|classchanger]]: Ändert seine CSS-Klassen je nach Status eines Devices&lt;br /&gt;
* [[FTUI Widget Clicksound|clicksound]]: Mit dem Widget &amp;quot;clicksound&amp;quot; können Sounds an Click-Events von Elementen gebunden werden.&lt;br /&gt;
* [[FTUI Widget Filelog|filelog]]:&lt;br /&gt;
* [[FTUI Widget Fullcalview|fullcalview]]:&lt;br /&gt;
* [[FTUI Widget Gds|gds]]:&lt;br /&gt;
* [[FTUI Widget Maps|maps]]: Kartendarstellung mit Google Maps API&lt;br /&gt;
* [[FTUI Widget Highchart|highchart]]:&lt;br /&gt;
* [[FTUI Widget Highchart3d|highchart3d]]:&lt;br /&gt;
* [https://github.com/nesges/Widgets-for-fhem-tablet-ui/wiki/itunes_artwork itunes_artwork]: itunes_artwork durchsucht die iTunes-Datenbank anhand eines Arrays von beliebigen Suchworten nach einem Cover-Artwork und zeigt dieses an. &lt;br /&gt;
* [https://github.com/nesges/Widgets-for-fhem-tablet-ui/wiki/javascript javascript]: Ermöglicht die Ausführung beliebigen Javascript-Codes aus einem Reading.&lt;br /&gt;
* [https://github.com/nesges/Widgets-for-fhem-tablet-ui/wiki/kodinowplaying kodinowplaying]: zeigt Informationen zu grade in KODI gespielten Medien in Form eines Labels an.&lt;br /&gt;
* [[FTUI Widget Loading|loading]]:&lt;br /&gt;
* [[FTUI Widget Meteogram|meteogram]]:&lt;br /&gt;
* [https://github.com/nesges/Widgets-for-fhem-tablet-ui/wiki/mpdnowplaying mpdnowplaying]: Zeigt Titelinformationen eines per MPD-Modul angebundenen Music Player Daemon an.&lt;br /&gt;
* [https://forum.fhem.de/index.php/topic,79283.msg712855.html#msg712855 pinpad]: Pinpad für z.B. eine Alarmanlage&lt;br /&gt;
* [https://forum.fhem.de/index.php/topic,76643.msg685472.html#msg685472 postme]: Liste des PostMe-Devices anzeigen&lt;br /&gt;
* [https://github.com/nesges/Widgets-for-fhem-tablet-ui/wiki/reload reload]: auslösen eine Pagereloads&lt;br /&gt;
* [[FTUI Widget Screensaver|screensaver]]:&lt;br /&gt;
* [https://forum.fhem.de/index.php/topic,73497.0.html scrolllabel]: Texte in Laufschrift darstellen&lt;br /&gt;
* [[FTUI Widget Svgplot|svgplot]]:&lt;br /&gt;
* [https://forum.fhem.de/index.php?topic=82883.msg750237#msg750237 todoist]: einfaches widget für todoist&lt;br /&gt;
* [[FTUI Widget Tts|tts]]: Sprachausgabe eines Textes aus einem Reading auf dem Endgerät.&lt;br /&gt;
* [[FTUI Widget UWZ|uwz]]: Anzeige der Warnungen der Unwetterzentrale&lt;br /&gt;
* [[FTUI Widget Wakeup|wakeup]]:&lt;br /&gt;
* [https://github.com/svenson08/ftui-weekdaytimer-widget wdtimer]: Visualisierung des [[WeekdayTimer]] Modul&lt;br /&gt;
* [[FTUI Widget Weekprofile|weekprofile]]: Visualisierung des [[weekprofile]] Moduls&lt;br /&gt;
&lt;br /&gt;
===Anwendungsbeispiele===&lt;br /&gt;
Durch die Verbindung von Widgets mit dem FHEM-Umfeld entstehen Lösungen für typische Anwendungen.&lt;br /&gt;
* [[FTUI_Beispiel_Datetimepicker_für_Timer|Datetimepicker für Timer]]: Oberfläche für Timereinstellungen&lt;br /&gt;
* [[FTUI_Beispiel_Mondphase|Mondphase]]: Visuelle Darstellung der Mondphase&lt;br /&gt;
* [[FTUI_Beispiel_Webradio|Webradio]]&lt;br /&gt;
* [[FTUI Beispiel Zeitschaltung|Verschiedene Zeitschaltungen]]&lt;br /&gt;
&lt;br /&gt;
==Templates==&lt;br /&gt;
Kommt ein bestimmtes &amp;quot;Code-Fragment&amp;quot; auf mehreren Seiten oder öfter pro Seite vor, bietet FTUI die Option, Templates zu erstellen. Diese werden einmal gebaut und können dann mit dem Attribut &#039;&#039;&#039;data-template&#039;&#039;&#039; nach Belieben in eine Seite eingefügt werden. Dabei besteht auch die Möglichkeit, Variablen zu verwenden.&lt;br /&gt;
&lt;br /&gt;
Die Variablennamen sollten möglichst eindeutig und unverwechselbar gewählt werden, da bei der Verwendung von Templates im Prinzip Suchen &amp;amp; Ersetzen angewendet wird. Verwendet man beispielsweise die Variablen &#039;&#039;&#039;dev:Thermostat_Kueche&#039;&#039;&#039; und &#039;&#039;&#039;dev_temp:temperatue&#039;&#039;&#039;, so kann es passieren, dass die Ergebnisse im erzeugten Code dann &#039;&#039;&#039;Thermostat_Kueche&#039;&#039;&#039; und &#039;&#039;&#039;Thermostat_Kueche_temp&#039;&#039;&#039; lauten, statt wie gewünscht &#039;&#039;&#039;Thermostat_Kueche&#039;&#039;&#039; und &#039;&#039;&#039;temperature&#039;&#039;&#039;. Um dies zu vermeiden, sollten die Variablen besser &#039;&#039;&#039;device:Thermostat_Kueche&#039;&#039;&#039; und &#039;&#039;&#039;temp:temperatue&#039;&#039;&#039; lauten.&lt;br /&gt;
&lt;br /&gt;
Im Folgenden ein paar Beispiele, wie Templates verwendet werden können.&lt;br /&gt;
&lt;br /&gt;
===Einzelnes Widget===&lt;br /&gt;
Soll ein Widget an mehreren Stellen in exakt der selben Ausführung eingebunden werden, kann diese Widget in einer eigenen Datei erstellt und diese dann auf den Zielseiten automatisch mitgeladen werden.&lt;br /&gt;
&lt;br /&gt;
;Template-Seite&lt;br /&gt;
Die Template-Seite soll in diesem Beispiel &#039;&#039;template_symbol.html&#039;&#039; genannt werden. Diese wird daher zuerst im FTUI-Verzeichnis erstellt.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;symbol&amp;quot;&lt;br /&gt;
     data-device=&amp;quot;dummy1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Haupt-Seite&lt;br /&gt;
Die oben erstellte Template-Seite kann nun in jeder gewünschten Seite eingebunden werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot; highlight=&amp;quot;6&amp;quot;&amp;gt;&lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;gridster&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li data-row=&amp;quot;1&amp;quot; data-col=&amp;quot;1&amp;quot; data-sizey=&amp;quot;1&amp;quot; data-sizex=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;div data-template=&amp;quot;template_symbol.html&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Gridster-Element===&lt;br /&gt;
Natürlich kann auch ein ganzes Gridster-Element - in diesem Fall ein Menü - als Template eingebunden werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li data-row=&amp;quot;1&amp;quot; data-col=&amp;quot;1&amp;quot; data-sizex=&amp;quot;1&amp;quot; data-sizey=&amp;quot;4&amp;quot; data-template=&amp;quot;menu.html&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Widget-Gruppen ===&lt;br /&gt;
Die Template-Datei des [[#Einzelnes Widget|ersten Beispiels]] kann natürlich auch mehrere Widgets auf einmal enthalten.&lt;br /&gt;
&lt;br /&gt;
=== Verwendung von Variablen ===&lt;br /&gt;
==== Einfaches Beispiel ====&lt;br /&gt;
Oft wird ein und dasselbe Widget für verschiedenen Devices verwendet. Um nicht für jedes Device das Widget neu kopieren zu müssen (bzw. bei Änderungen alle Seiten ausbessern zu müssen), kann ein Template verwendet werden, dem einfach per Parameter mitgeteilt wird, von welchem Device es gerade die Daten empfangen soll.&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel wird ein Template erzeugt, dass nur die Temperatur verschiedenen Thermostate mittels eines [[FTUI Widget Label|Label-Widgets]] anzeigt.&lt;br /&gt;
&lt;br /&gt;
;Template-Seite&lt;br /&gt;
Die Template-Seite enthält nur ein einfaches Label-Widget und wird in diesem Beispiel &#039;&#039;template_label.html&#039;&#039; genannt. Um sie für mehrere Devices verwenden zu können, wird im Attribut &#039;&#039;&#039;data-device&#039;&#039;&#039; der Name des eigentlichen Devices durch den Parameter &#039;&#039;&#039;par01&#039;&#039;&#039; ersetzt.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot; highlight=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;label&amp;quot;&lt;br /&gt;
     data-device=&amp;quot;par01&amp;quot;&lt;br /&gt;
     data-get=&amp;quot;measured-temp&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Haupt-Seite&lt;br /&gt;
Auf der Haupt-Seite wird die Template-Seite mit dem Attribut &#039;&#039;&#039;data-template&#039;&#039;&#039; eingebunden und ihr via Attribut &#039;&#039;&#039;data-parameter&#039;&#039;&#039; das jeweils gewünschte Device übergeben.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;div data-template=&amp;quot;template_label.html&amp;quot; data-parameter=&#039;{&amp;quot;par01&amp;quot;:&amp;quot;Thermostat1&amp;quot;}&#039;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div data-template=&amp;quot;template_label.html&amp;quot; data-parameter=&#039;{&amp;quot;par01&amp;quot;:&amp;quot;Thermostat2&amp;quot;}&#039;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div data-template=&amp;quot;template_label.html&amp;quot; data-parameter=&#039;{&amp;quot;par01&amp;quot;:&amp;quot;Thermostat3&amp;quot;}&#039;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Wetter-Slider mit Template ====&lt;br /&gt;
In diesem Beispiel wird ein [[FTUI Widget Slider|Slider-Widget]] erstellt, welches die verschiedenen Tage eines Wetterberichtes anzeigt. Dabei wird für den Wetterbericht des jeweiligen Tages immer dasselbe Template verwendet um nicht für jeden Tag ein eigenes Widget schreiben zu müssen.&lt;br /&gt;
&lt;br /&gt;
;Template-Seite&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;left&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;div data-type=&amp;quot;label&amp;quot; data-device=&amp;quot;AgroWeather&amp;quot; data-get=&amp;quot;par01&amp;quot; data-unit=&amp;quot;&amp;amp;deg;C&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
   &amp;lt;div class=&amp;quot;inline&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;div data-type=&amp;quot;label&amp;quot; data-device=&amp;quot;AgroWeather&amp;quot; data-get=&amp;quot;par02&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
       &amp;lt;div data-type=&amp;quot;weather&amp;quot; data-device=&amp;quot;AgroWeather&amp;quot; data-get=&amp;quot;par02&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
       min:&amp;amp;nbsp;&amp;lt;div data-type=&amp;quot;label&amp;quot; data-device=&amp;quot;AgroWeather&amp;quot; data-get=&amp;quot;par03&amp;quot; data-unit=&amp;quot;&amp;amp;deg;C&amp;quot;&amp;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;div class=&amp;quot;left&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;div data-type=&amp;quot;label&amp;quot; data-device=&amp;quot;AgroWeather&amp;quot; data-get=&amp;quot;par04&amp;quot; data-substitution=&amp;quot;toDate().eeee()+&#039;,&#039;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
   &amp;lt;div data-type=&amp;quot;label&amp;quot; data-device=&amp;quot;AgroWeather&amp;quot; data-get=&amp;quot;par04&amp;quot; data-substitution=&amp;quot;toDate().ddmm()&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Haupt-Seite&lt;br /&gt;
In der Haupt-Seite wird das Template dann für jede Slider-Seite eingebunden und das Reading für den jeweiligen Tag via Parameter übergeben.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;swiper&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
   &amp;lt;li data-template=&amp;quot;templates/wetter.html&amp;quot; data-parameter=&#039;{&amp;quot;par01&amp;quot;:&amp;quot;fc0_tempMax&amp;quot;,&amp;quot;par02&amp;quot;:&amp;quot;fc0_weatherDay&amp;quot;,&amp;quot;par03&amp;quot;:&amp;quot;fc0_tempMin&amp;quot;,&amp;quot;par04&amp;quot;:&amp;quot;fc0_date&amp;quot;}&#039;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li data-template=&amp;quot;templates/wetter.html&amp;quot; data-parameter=&#039;{&amp;quot;par01&amp;quot;:&amp;quot;fc1_tempMax&amp;quot;,&amp;quot;par02&amp;quot;:&amp;quot;fc1_weatherDay&amp;quot;,&amp;quot;par03&amp;quot;:&amp;quot;fc1_tempMin&amp;quot;,&amp;quot;par04&amp;quot;:&amp;quot;fc1_date&amp;quot;}&#039;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li data-template=&amp;quot;templates/wetter.html&amp;quot; data-parameter=&#039;{&amp;quot;par01&amp;quot;:&amp;quot;fc2_tempMax&amp;quot;,&amp;quot;par02&amp;quot;:&amp;quot;fc2_weatherDay&amp;quot;,&amp;quot;par03&amp;quot;:&amp;quot;fc2_tempMin&amp;quot;,&amp;quot;par04&amp;quot;:&amp;quot;fc2_date&amp;quot;}&#039;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li data-template=&amp;quot;templates/wetter.html&amp;quot; data-parameter=&#039;{&amp;quot;par01&amp;quot;:&amp;quot;fc3_tempMax&amp;quot;,&amp;quot;par02&amp;quot;:&amp;quot;fc3_weatherDay&amp;quot;,&amp;quot;par03&amp;quot;:&amp;quot;fc3_tempMin&amp;quot;,&amp;quot;par04&amp;quot;:&amp;quot;fc3_date&amp;quot;}&#039;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== JavaScript-Funktionen ==&lt;br /&gt;
Neben den Widgets können auch einige JavaScript-Funktionen verwendet werden, um Befehle an FHEM zu senden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Folgende Zeile setzt einen direkten Befehl an FHEM ab (&amp;lt;code&amp;gt;set dummy1 off&amp;lt;/code&amp;gt;):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&amp;lt;div onclick=&amp;quot;ftui.setFhemStatus(&#039;set dummy1 off&#039;)&amp;quot;&amp;gt;Dummy1 aus&amp;lt;/div&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese Zeile veranlasst FHEM dazu, eine Funktion aus der 99_myUtils.pm auszuführen (&amp;lt;code&amp;gt;myUtils_HeizungUpDown(&amp;quot;WZ.Thermostat_Climate&amp;quot;,&amp;quot;up&amp;quot;)&amp;lt;/code&amp;gt;):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&amp;lt;div onclick=&amp;quot;ftui.setFhemStatus(&#039;{myUtils_HeizungUpDown(&amp;amp;quot;WZ.Thermostat_Climate&amp;amp;quot;,&amp;amp;quot;up&amp;amp;quot;)}&#039;)&amp;quot;&amp;gt;+&amp;lt;/div&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel, wie ein Kommando an FHEM gesendet wird und gleichzeitig der Wert eines bereits in FTUI angezeigten Readings verwendet werden kann:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;label&amp;quot; data-device=&amp;quot;dummy1&amp;quot; data-get=&amp;quot;temperature&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div onClick=&amp;quot;ftui.setFhemStatus(&#039;set dummy2 &#039;+ftui.getDeviceParameter(&#039;dummy1&#039;,&#039;temperature&#039;).val);&amp;quot;&amp;gt;Senden&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Eigene Widgets erstellen ==&lt;br /&gt;
Wie eigenen Widgets für FTUI erstellt werden können, ist auf der Seite [[FTUI eigene Widgets]] beschrieben.&lt;br /&gt;
&lt;br /&gt;
Eine Schritt für Schritt Anleitung für das erste eigene Widget gibts hier [[FTUI eigene Widgets - Beispiel]]&lt;br /&gt;
&lt;br /&gt;
== FAQ ==&lt;br /&gt;
Häufig gestellte Fragen zum FHEM Tablet UI sind in der [[FHEM Tablet UI FAQ]] zusammengestellt.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [https://github.com/knowthelist/fhem-tablet-ui Projekt auf Github]&lt;br /&gt;
* {{Link2Forum|Topic=34233|LinkText=Forums-Beitrag}}&lt;br /&gt;
* [[FTUI_Snippets|Snippets]]&lt;br /&gt;
* [http://knowthelist.github.io/fhem/tablet/demo_widgets.html Live-Demos]&lt;br /&gt;
* [https://waschto.eu/fhem-und-tabletui-livedemo/ FHEM und TabletUI Live-Demo]&lt;br /&gt;
* {{Link2Forum|Topic=37378|LinkText=User-Demos}}&lt;br /&gt;
* [https://github.com/ovibox/fhem-ftui-user-demos Download der User-Demo-Dateien]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Tablet UI|!]]&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FHEM_Tablet_UI&amp;diff=27972</id>
		<title>FHEM Tablet UI</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FHEM_Tablet_UI&amp;diff=27972"/>
		<updated>2018-10-05T13:16:26Z</updated>

		<summary type="html">&lt;p&gt;Eki: Vorbereitung für Wiki Seite für Maps (ehemals gmaps)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Oberfläche für FHEM&lt;br /&gt;
|ModType=x&lt;br /&gt;
|ModFTopic=34233&lt;br /&gt;
|ModForumArea=TabletUI&lt;br /&gt;
|ModTechName=n.a.&lt;br /&gt;
|ModOwner=setstate ({{Link2FU|7023|Forum}})&lt;br /&gt;
}}&lt;br /&gt;
[[FHEM Tablet UI]] (FTUI) ist ein leichtgewichtiges aber funktionsreiches Frontend-Framework zum Steuern und Überwachen von in FHEM integrierten Geräten. Es basiert auf HTML/CSS/JavaScript und stellt somit keine zusätzlichen Anforderungen an den FHEM-Server.&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe zahlreicher Widgets, die sehr leicht mit HTML Code konfiguriert werden können, ist es möglich, innerhalb kurzer Zeit ein den eigenen Wünschen entsprechendes User-Interface aufzubauen.&lt;br /&gt;
&lt;br /&gt;
Für den Betrieb ist nur eine FHEM-Installation mit [[HTTPSRV|HTTPSRV-Modul]] sowie ein gängiger Webbrowser notwendig.&lt;br /&gt;
&lt;br /&gt;
Mit wenigen Anpassungen ist es auch möglich, das UI auf anderen Webservern (Apache, u.a.) zu betreiben. Somit können FHEM und FHEM Tablet UI auch auf getrennten Systemen ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
[[File:tablet_ui.png|thumb|500px|center|Beispiel für ein mit [[FHEM Tablet UI]] erstelltes User-Interface]]&lt;br /&gt;
&lt;br /&gt;
{{Todo|Design-Möglichkeiten erklären, Navigationsmethoden ausformulieren}} &lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Die Installation von FHEM Tablet UI erzeugt keinen großen Aufwand und besteht im Großen und Ganzen aus drei Schritten:&lt;br /&gt;
*Dateien aus dem GitHub-Repository herunterladen&lt;br /&gt;
*FHEM konfigurieren ([[HTTPSRV]]-Device erstellen, [[FHEMWEB]]-Attribut longpoll einstellen)&lt;br /&gt;
*Eine Beispieldatei anlegen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Diese Anleitung geht davon aus, dass FHEM unter Debian nach der Anleitung [https://debian.fhem.de Stable build using apt] installiert wurde.&lt;br /&gt;
Ist dies nicht der Fall, muss der Pfad &#039;&#039;&#039;/opt/fhem&#039;&#039;&#039; dementsprechend angepasst werden.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.&#039;&#039;&#039; Zuerst müssen alle Dateien von FHEM Tablet UI in das FHEM-Verzeichnis &#039;&#039;&#039;/opt/fhem/www&#039;&#039;&#039; kopiert werden. Das geht mit folgendem &#039;&#039;&#039;update&#039;&#039;&#039;-Befehl über die FHEM-Befehlszeile.&lt;br /&gt;
:&amp;lt;code&amp;gt;update all https://raw.githubusercontent.com/knowthelist/fhem-tablet-ui/master/controls_fhemtabletui.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:[[Datei:FTUI_Installation_01.png|thumb|none|Schritt 1: Dateien kopieren]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2.&#039;&#039;&#039; Anschließend ist ein neues [[HTTPSRV]]-Device in FHEM anzulegen, welches auf den Ordner mit den gerade heruntergeladenen Dateien verweist.&lt;br /&gt;
:&amp;lt;code&amp;gt;define TABLETUI HTTPSRV ftui/ ./www/tablet/ Tablet-UI&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:[[Datei:FTUI_Installation_02.png|thumb|none|Schritt 2: HTTPSRV-Device anlegen]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Dieser Schritt kann ausgelassen werden, wenn die Funktionalitäten von [[FHEMWEB]] ausreichend sind. Dann muss FTUI aber in weiterer Folge unter der URL &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;http(s)://&amp;lt;fhem-server&amp;gt;:8083/fhem/tablet/index.html&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039; aufgerufen werden und es wird kein Link auf FTUI in der FHEM GUI erstellt. Vorteil ist aber, dass das FHEMWEB-Caching verwendet werden kann. Siehe dieser {{Link2Forum|Topic=86362|Message=788258}}.}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3.&#039;&#039;&#039; Damit FHEM Tablet UI mit FHEM kommunizieren kann, ist noch die &#039;&#039;&#039;longpoll&#039;&#039;&#039;-Einstellung im [[FHEMWEB]] Device festzulegen.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;attr WEB longpoll websocket&amp;lt;/code&amp;gt;&lt;br /&gt;
:bzw. bei Problemen mit &#039;&#039;websocket&#039;&#039;&lt;br /&gt;
:&amp;lt;code&amp;gt;attr WEB longpoll 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:[[Datei:FTUI_Installation_03.png|thumb|none|Schritt 3: longpoll einstellen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;4.&#039;&#039;&#039; Weil FTUI noch nichts anzuzeigen hat, wird die Datei &#039;&#039;&#039;/opt/fhem/www/tablet/index-example.html&#039;&#039;&#039; nach &#039;&#039;&#039;/opt/fhem/www/tablet/index.html&#039;&#039;&#039; kopiert.&lt;br /&gt;
:&amp;lt;code&amp;gt;sudo cp -a /opt/fhem/www/tablet/index-example.html /opt/fhem/www/tablet/index.html&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:[[Datei:FTUI_Installation_04.png|thumb|none|Schritt 4: index.html erstellen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;5.&#039;&#039;&#039; Abschließend muss FHEM noch &#039;&#039;&#039;neu gestartet&#039;&#039;&#039; werden (&#039;&#039;shutdown restart&#039;&#039;) da das Attribut &#039;&#039;&#039;longpoll&#039;&#039;&#039; geändert wurde.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Somit ist FHEM Tablet UI bereit zur Verwendung und kann durch Aufruf der URL &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;http://&amp;lt;fhem-server&amp;gt;:8083/fhem/ftui/&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039; oder den Link im FHEM-Menü geöffnet werden&lt;br /&gt;
&lt;br /&gt;
== Update ==&lt;br /&gt;
Ein Update von FTUI kann ebenfalls über die FHEM-Kommandozeile erfolgen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.&#039;&#039;&#039; Prüfen der Änderungen seit dem letzten Download/Update durch Eingabe von:&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;update check https://raw.githubusercontent.com/knowthelist/fhem-tablet-ui/master/controls_fhemtabletui.txt&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2.&#039;&#039;&#039; Update der geänderten Dateien durch Eingabe von:&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;update all https://raw.githubusercontent.com/knowthelist/fhem-tablet-ui/master/controls_fhemtabletui.txt&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Eine weitere Option ist das Hinzufügen des FTUI-Git-Repositories zum allgemeinem Update-Vorgang von FHEM. Dabei wird dann bei einem FHEM-Update auch gleich FHEM Tablet UI aktualisiert, bzw. die Änderungen angezeigt.&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;update add https://raw.githubusercontent.com/knowthelist/fhem-tablet-ui/master/controls_fhemtabletui.txt&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
===DOCTYPE===&lt;br /&gt;
In allen HTML-Dateien, die im Browser geladen werden und das typische HTML-Gerüst besitzen (also alle Hauptseiten, jedoch keine Template-Dateien), sollte eine &#039;&#039;Document Type Declaration&#039;&#039; (DTDT) eingefügt werden. Mit ihr wird festgelegt, welche &#039;&#039;Document Type Definition&#039;&#039; hier verwendet wird (das kommt aus der Metasprache XML), konkret also, in welcher Version der nachfolgende HTML-Code vom Browser interpretiert werden soll. Lässt man die DTDT weg, oder definiert sie auf verschiedenen Seiten unterschiedlich, kann ein und der selbe HTML-Code zu unterschiedlichen Darstellungen führen. Die DTDT erfolgt immer auf der ersten Zeile, noch vor dem &amp;lt;code&amp;gt;&amp;lt;html&amp;gt;&amp;lt;/code&amp;gt;-Tag. Nachfolgend wird HTML5 verwendet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;...&amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;...&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===META-Parameter===&lt;br /&gt;
Das Tablet UI lässt sich über die META-Parameter konfigurieren. Diese Parameter sind in jeder &#039;&#039;&#039;.html&#039;&#039;&#039; Datei (z.B. index.html) im Abschnitt &#039;&#039;&#039;&amp;lt;head&amp;gt;&#039;&#039;&#039; einzutragen. Ausgenommen davon sind Dateien, die als Template, Pagebutton-Zielseiten oder ähnliches eingebunden werden.&lt;br /&gt;
&lt;br /&gt;
Die Parameter sind immer nach diesem Schema aufgebaut:&lt;br /&gt;
 &amp;lt;meta name=&amp;quot;[Parameter-Name]&amp;quot; content=&amp;quot;[Parameter-Wert]&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Verbindung zu FHEM===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Parameter-Name!!Standard-Wert!!Mögliche Werte!!Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|web_device||WEB||String||FHEM-Device, welches für das Polling verwendet wird&lt;br /&gt;
|-&lt;br /&gt;
|longpoll||1||0, 1||&lt;br /&gt;
&#039;&#039;&#039;0&#039;&#039;&#039;: Longpoll deaktiviert; alle 30s ein Shortpoll (Neuladen der gesamten Statusänderungen)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1&#039;&#039;&#039;: Longpoll aktiv; geänderte Stati werden sofort aktualisiert, zusätzlich werden alle 15min die gesamten Statusänderungen geladen.&lt;br /&gt;
|-&lt;br /&gt;
|longpoll_type||websocket||websocket, ajax, 0||&lt;br /&gt;
&#039;&#039;&#039;websocket&#039;&#039;&#039;: Für die Aktualisierung der Daten wird das Websocket-Protokoll verwendet. Werden vom Browser keine Websockets unterstützt, gibt es einen automatischen Fallback auf Ajax.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ajax&#039;&#039;&#039;: Ajax wird für die Aktualisierung verwendet.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0&#039;&#039;&#039;: Longpoll deaktiviert, Shortpoll wird verwendet.&lt;br /&gt;
|-&lt;br /&gt;
|longpoll_filter||.*||RegEx||Event-Filter. Kann verwendet werden, wenn z.B. Devices, die in FTUI angezeigt werden, in einem eigenen FHEM-Room sind.&lt;br /&gt;
|-&lt;br /&gt;
|longpoll_maxage||240||Integer||Kommen in diesem Zeitraum (Sekunden) keine Longpoll-Events bei FTUI an, wird die Verbindung als &amp;quot;disconnected&amp;quot; angesehen und ein neuer Verbindungsversuch wird gestartet.&lt;br /&gt;
|-&lt;br /&gt;
|shortpoll_interval||900||Integer||Zeitraum in Sekunden, nach dem ein vollständiger Refresh stattfindet&lt;br /&gt;
|-&lt;br /&gt;
|shortpoll_only_interval||30||Integer||Zeitraum in Sekunden, nach dem ein vollständiger Refresh stattfindet, sollte Longpoll deaktiviert sein&lt;br /&gt;
|-&lt;br /&gt;
|fhemweb_url||/fhem/||Integer||URL zu FHEM. Wird benötigt wenn FTUI auf einem anderen als dem FHEM Server läuft oder nicht im Standard-Pfad installiert ist. &lt;br /&gt;
Hinweis: Wenn FHEM auf einem anderem Server/Domain läuft muss man das &amp;quot;CORS&amp;quot; Attribut im FHEMWEB Modul (s.o.) auf 1 setzen, sonst bekommt man Cross Origin Fehler. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Funktionalität===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Parameter-Name!!Standard-Wert!!Mögliche Werte!!Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|debug||0||0 - 5||Log-Level&lt;br /&gt;
|-&lt;br /&gt;
|toast||5||Integer||Anzahl an gleichzeitig angezeigten Toast-Nachrichten. Um keine anzuzeigen, ist der Wert auf 0 zu setzen.&lt;br /&gt;
|-&lt;br /&gt;
|toast_position||bottom-left||||Position im Browserfenster, wo die Toast-Nachrichten angezeigt werden.&lt;br /&gt;
|-&lt;br /&gt;
|lang||de||de||Sprache der Oberfläche (für z.B. Datums-/Zeitfunktionen)&lt;br /&gt;
|-&lt;br /&gt;
|username||||String||Benutzername für eine Basic-Authentifierung *&lt;br /&gt;
|-&lt;br /&gt;
|password||||String||Passwort für eine Basic-Authentifizierung *&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;*&#039;&#039;&#039; Derzeit wird die Basic-Authentifizierung in Kombination mit WebSockets nicht unterstützt. Die Verwendung von &#039;&#039;&#039;longpoll=1&#039;&#039;&#039; (ajax) ist daher notwendig.&lt;br /&gt;
&lt;br /&gt;
===Toast-Nachrichten===&lt;br /&gt;
[[Datei:Ftui_toast.png|thumb|Toast-Nachrichten]]&lt;br /&gt;
Tablet-UI liefert Informationen darüber, was im Moment gerade passiert. Das geschieht über Toast-Nachrichten, die in der Standardeinstellung unten links im Browser auftauchen.&lt;br /&gt;
&lt;br /&gt;
Wird beispielsweise ein Gerät eingeschaltet, so erscheint eine kleine Nachricht mit dem abgesetzten Befehl. Auch Fehlermeldungen und Statusinformationen werden angezeigt. Ob überhaupt und was konkret angezeigt wird, richtet sich nach dem eingestellten Debug-Level (siehe oben). Beim Debug-Level 5 werden alle Nachrichten angezeigt, bei 0 keine.&lt;br /&gt;
&lt;br /&gt;
Die Position der Toast-Nachrichten kann über den Meta-Tag &amp;lt;code&amp;gt;meta name=&#039;toast_position&#039;&amp;lt;/code&amp;gt; festgelegt werden. Für oben-mittig müsste folgender Code eingefügt werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;meta name=&#039;toast_position&#039; content=&#039;top-center&#039;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Möglich sind folgende Positionen:&lt;br /&gt;
* &amp;lt;code&amp;gt;top-left&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;top-right&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bottom-left&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bottom-right&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;top-center&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bottom-center&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;mid-center&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die maximale Anzahl an Nachrichten, die gleichzeitig angezeigt werden können, lässt sich mit &amp;lt;code&amp;gt;meta name=&#039;toast&#039;&amp;lt;/code&amp;gt; Sind maximal 2 Nachrichten gewünscht, muss folgender Meta-Tag gesetzt werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;meta name=&#039;toast&#039; content=&#039;2&#039;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Navigationsmethoden==&lt;br /&gt;
{{Todo|Dieser Abschnitt dient derzeit lediglich als Sammlung von Stichpunkten und muss vollständig überarbeitet werden.}} &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Unterschied zwischen Pagetab und Pagebutton:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pagetab:&#039;&#039;&#039; Ganze Seite austauschen -&amp;gt; Menü muss auf jede Seite&lt;br /&gt;
[[FTUI_Widget_Pagetab]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pagebutton:&#039;&#039;&#039; Teil der Seite austauschen -&amp;gt; Menü nur in erster Seite&lt;br /&gt;
[[FTUI_Widget_Pagebutton]]&lt;br /&gt;
&lt;br /&gt;
==Gestaltung==&lt;br /&gt;
===Layout-Optionen===&lt;br /&gt;
* [[FTUI Layout Gridster|Gridster]]&lt;br /&gt;
* [[FTUI Layout Flex|Flex]]&lt;br /&gt;
* [[FTUI Layout Sheet|Tabelle]]&lt;br /&gt;
* [[FTUI Layout Row|Reihen]]&lt;br /&gt;
&lt;br /&gt;
=== Farben ===&lt;br /&gt;
Es besteht die Möglichkeit, die Farbwerte in hexadezimaler Form, als RGB-Wert oder mit dem Farbnamen anzugeben. Zum Beispiel: &lt;br /&gt;
&lt;br /&gt;
*HEX: #ADD8E6&lt;br /&gt;
*RBG: rgb(173, 216, 230)&lt;br /&gt;
*Namen: lightblue&lt;br /&gt;
&lt;br /&gt;
Knallige Farben wie &#039;&#039;&#039;&amp;lt;span style=&amp;quot;color: #ff0000;&amp;quot;&amp;gt;#ff0000&amp;lt;/span&amp;gt;&#039;&#039;&#039; für Rot oder &#039;&#039;&#039;&amp;lt;span style=&amp;quot;color: #00ff00;&amp;quot;&amp;gt;#00ff00&amp;lt;/span&amp;gt;&#039;&#039;&#039; für Grün sollten vermieden werden.&lt;br /&gt;
Es ist besser unterhalb von #D0 (208) für die Grundfarben zu bleiben.&lt;br /&gt;
&lt;br /&gt;
Empfohlene Farben sind z.B.:&lt;br /&gt;
&lt;br /&gt;
*Orange: &amp;lt;span style=&amp;quot;color: #aa6900;&amp;quot;&amp;gt;#aa6900&amp;lt;/span&amp;gt;&lt;br /&gt;
*Rot: &amp;lt;span style=&amp;quot;color: #ad3333;&amp;quot;&amp;gt;#ad3333&amp;lt;/span&amp;gt;&lt;br /&gt;
*Grün: &amp;lt;span style=&amp;quot;color: #32a054;&amp;quot;&amp;gt;#32a054&amp;lt;/span&amp;gt;&lt;br /&gt;
*Blau: &amp;lt;span style=&amp;quot;color: #6699FF;&amp;quot;&amp;gt;#6699FF&amp;lt;/span&amp;gt;&lt;br /&gt;
*Grau: &amp;lt;span style=&amp;quot;color: #8C8C8C;&amp;quot;&amp;gt;#8C8C8C&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hilfreich bei der Suche nach den Farbwerten ist zum Beispiel der Color-Picker auf dieser Seite: http://www.colorpicker.com. Für die Suche nach Farben, die einen guten Kontrast bilden, diese Webseite: http://vanisoft.pl/~lopuszanski/public/colors/&lt;br /&gt;
&lt;br /&gt;
Im Ordner &#039;&#039;css&#039;&#039; der FTUI Installation finden sich einige vorbereitete Farbschemata. Diese können mit einem zusätzlichen Eintrag im &amp;lt;nowiki&amp;gt;&amp;lt;head&amp;gt;&amp;lt;/nowiki&amp;gt;-Bereich der FTUI-Seite(n) aktiviert werden.&lt;br /&gt;
&lt;br /&gt;
Hier am Beispiel eines blauen Farbschemas:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
   [...]&lt;br /&gt;
   &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;/fhem/tablet/css/fhem-blue-ui.css&amp;quot; /&amp;gt;&lt;br /&gt;
   [...]&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Schema-Dateien ändern alle Widgets. &lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Theme_default.png|default&lt;br /&gt;
File:Theme_blue.png|fhem-blue-ui.css&lt;br /&gt;
File:Theme_green.png|fhem-green-ui.css&lt;br /&gt;
File:Theme_mobile.png|fhem-mobile-ui.css&lt;br /&gt;
File:Theme_darkblue.png|fhem-darkblue-ui.css&lt;br /&gt;
File:Theme_darkgreen.png|fhem-darkgreen-ui.css&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Einzelne Widgets können durch Hinzufügen der jeweiligen [[#CSS-Klassen|CSS-Klasse]] geändert werden.&lt;br /&gt;
&lt;br /&gt;
===CSS-Styles===&lt;br /&gt;
Das Layout und das Aussehen des UI kann durch diverse vorgegebene CSS-Klassen beeinflusst werden. Die verfügbaren Klassen sind im Abschnitt [[#CSS-Klassen|CSS-Klassen]] aufgeführt.&lt;br /&gt;
&lt;br /&gt;
Soll das Aussehen des UI durch eigene CSS-Klassen oder durch Überschreiben der vorhandenen verändert werden, kann eine eigene CSS-Datei erstellt werden, die dann bei einem eventuellen Update von FTUI nicht überschrieben wird. Diese Datei muss den Dateinamen &#039;&#039;&#039;fhem-tablet-ui-user.css&#039;&#039;&#039; haben und im Ordner &#039;&#039;&#039;/fhem/tablet/css&#039;&#039;&#039; abgelegt werden. Sie wird dann beim Aufruf von FTUI automatisch mitgeladen.&lt;br /&gt;
&lt;br /&gt;
=== CSS-Klassen ===&lt;br /&gt;
Nicht alle Widgets unterstützen alle hier angegebenen Klassen. Welche genau unterstützt werden, kann auf der jeweiligen Widget-Seite nachgelesen werden.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: left;&amp;quot;|sheet/row/cell-Layout&lt;br /&gt;
|-&lt;br /&gt;
!class=&amp;quot;mw-collapsible-content&amp;quot;|Klasse!!Beschreibung&lt;br /&gt;
{{FTUI Klasse|sheet}}{{FTUI Klasse|row}}{{FTUI Klasse|cell}}{{FTUI Klasse|cell-1-x}}{{FTUI Klasse|cell-x}}{{FTUI Klasse|left-align}}{{FTUI Klasse|right-align}}{{FTUI Klasse|bottom-align}}{{FTUI Klasse|top-align}}{{FTUI Klasse|center-align}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: left;&amp;quot;|row/col-Layout&lt;br /&gt;
|-&lt;br /&gt;
!class=&amp;quot;mw-collapsible-content&amp;quot;|Klasse!!Beschreibung&lt;br /&gt;
{{FTUI Klasse|col}}{{FTUI Klasse|col-1-x}}{{FTUI Klasse|col-x}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: left;&amp;quot;|hbox/vbox-Layout&lt;br /&gt;
|-&lt;br /&gt;
!class=&amp;quot;mw-collapsible-content&amp;quot;|Klasse!!Beschreibung&lt;br /&gt;
{{FTUI Klasse|vbox}}{{FTUI Klasse|hbox}}{{FTUI Klasse|card}}{{FTUI Klasse|phone-width}}{{FTUI Klasse|full-height}}{{FTUI Klasse|full-width}}{{FTUI Klasse|grow-0}}{{FTUI Klasse|grow-1}}{{FTUI Klasse|grow-2}}{{FTUI Klasse|grow-x}}{{FTUI Klasse|items-top}}{{FTUI Klasse|items-center}}{{FTUI Klasse|items-bottom}}{{FTUI Klasse|items-space-between}}{{FTUI Klasse|items-space-around}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: left;&amp;quot;|Generelle Klassen für die Positionierung&lt;br /&gt;
|-&lt;br /&gt;
!class=&amp;quot;mw-collapsible-content&amp;quot;|Klasse!!Beschreibung&lt;br /&gt;
{{FTUI Klasse|inline}}{{FTUI Klasse|newline}}{{FTUI Klasse|top-space}}{{FTUI Klasse|top-space-2x}}{{FTUI Klasse|top-space-3x}}{{FTUI Klasse|left-space}}{{FTUI Klasse|left-space-2x}}{{FTUI Klasse|left-space-3x}}{{FTUI Klasse|right-space}}{{FTUI Klasse|right-space-2x}}{{FTUI Klasse|right-space-3x}}{{FTUI Klasse|top-narrow}}{{FTUI Klasse|top-narrow-2x}}{{FTUI Klasse|top-narrow-10}}{{FTUI Klasse|left-narrow}}{{FTUI Klasse|left-narrow-2x}}{{FTUI Klasse|left-narrow-3x}}{{FTUI Klasse|right-narrow}}{{FTUI Klasse|right-narrow-2x}}{{FTUI Klasse|right-narrow-3x}}{{FTUI Klasse|centered}}{{FTUI Klasse|wider}}{{FTUI Klasse|narrow}}{{FTUI Klasse|fullsize}}{{FTUI Klasse|compressed}}{{FTUI Klasse|height-narrow}}{{FTUI Klasse|w1x}}{{FTUI Klasse|w2x}}{{FTUI Klasse|w3x}}{{FTUI Klasse|maxw40}}{{FTUI Klasse|doublebox-v}}{{FTUI Klasse|doublebox-h}}{{FTUI Klasse|triplebox-v}}{{FTUI Klasse|right}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: left;&amp;quot;|Vordergrundfarben&lt;br /&gt;
|-&lt;br /&gt;
!class=&amp;quot;mw-collapsible-content&amp;quot;|Klasse!!Beschreibung&lt;br /&gt;
{{FTUI Klasse|red}}{{FTUI Klasse|green}}{{FTUI Klasse|blue}}{{FTUI Klasse|lightblue}}{{FTUI Klasse|orange}}{{FTUI Klasse|gray}}{{FTUI Klasse|lightgray}}{{FTUI Klasse|white}}{{FTUI Klasse|black}}{{FTUI Klasse|mint}}{{FTUI Klasse|yellow}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: left;&amp;quot;|Hintergrundfarben&lt;br /&gt;
|-&lt;br /&gt;
!class=&amp;quot;mw-collapsible-content&amp;quot;|Klasse!!Beschreibung&lt;br /&gt;
{{FTUI Klasse|bg-red}}{{FTUI Klasse|bg-green}}{{FTUI Klasse|bg-blue}}{{FTUI Klasse|bg-lightblue}}{{FTUI Klasse|bg-orange}}{{FTUI Klasse|bg-gray}}{{FTUI Klasse|bg-lightgray}}{{FTUI Klasse|bg-white}}{{FTUI Klasse|bg-black}}{{FTUI Klasse|bg-mint}}{{FTUI Klasse|bg-yellow}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: left;&amp;quot;|Rahmen&lt;br /&gt;
|-&lt;br /&gt;
!class=&amp;quot;mw-collapsible-content&amp;quot;|Klasse!!Beschreibung&lt;br /&gt;
{{FTUI Klasse|verticalLine}}{{FTUI Klasse|border-black}}{{FTUI Klasse|border-white}}{{FTUI Klasse|border-orange}}{{FTUI Klasse|border-red}}{{FTUI Klasse|border-green}}{{FTUI Klasse|border-mint}}{{FTUI Klasse|border-lightblue}}{{FTUI Klasse|border-blue}}{{FTUI Klasse|border-gray}}{{FTUI Klasse|border-yellow}}{{FTUI Klasse|border-lightgray}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: left;&amp;quot;|Größen&lt;br /&gt;
|-&lt;br /&gt;
!class=&amp;quot;mw-collapsible-content&amp;quot;|Klasse!!Beschreibung&lt;br /&gt;
{{FTUI Klasse|mini}}{{FTUI Klasse|tiny}}{{FTUI Klasse|small}}{{FTUI Klasse|normal}}{{FTUI Klasse|large}}{{FTUI Klasse|big}}{{FTUI Klasse|bigger}}{{FTUI Klasse|tall}}{{FTUI Klasse|great}}{{FTUI Klasse|grande}}{{FTUI Klasse|gigantic}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: left;&amp;quot;|Schriftstil&lt;br /&gt;
|-&lt;br /&gt;
!class=&amp;quot;mw-collapsible-content&amp;quot;|Klasse!!Beschreibung&lt;br /&gt;
{{FTUI Klasse|thin}}{{FTUI Klasse|bold}}{{FTUI Klasse|darker}}{{FTUI Klasse|truncate}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: left;&amp;quot;|Sonstiges&lt;br /&gt;
|-&lt;br /&gt;
!class=&amp;quot;mw-collapsible-content&amp;quot;|Klasse!!Beschreibung&lt;br /&gt;
{{FTUI Klasse|blank}}{{FTUI Klasse|transparent}}{{FTUI Klasse|half-transparent}}{{FTUI Klasse|blurry}}{{FTUI Klasse|shake}}{{FTUI Klasse|fail-shake}}{{FTUI Klasse|marquee}}{{FTUI Klasse|icon round}}{{FTUI Klasse|icon square}}{{FTUI Klasse|readonly}}{{FTUI Klasse|blink}}{{FTUI Klasse|rotate-90}}{{FTUI Klasse|horizontal}}{{FTUI Klasse|circleborder}}{{FTUI Klasse|autohide}}{{FTUI Klasse|notransmit}}{{FTUI Klasse|tap}}{{FTUI Klasse|FS20}}{{FTUI Klasse|value}}{{FTUI Klasse|novalue}}{{FTUI Klasse|timestamp}}{{FTUI Klasse|percent}}{{FTUI Klasse|nocache}}{{FTUI Klasse|fade}}{{FTUI Klasse|rotate}}{{FTUI Klasse|nolabels}}{{FTUI Klasse|default}}{{FTUI Klasse|prefetch}}{{FTUI Klasse|circulate}}{{FTUI Klasse|valueonly}}{{FTUI Klasse|positiononly}}{{FTUI Klasse|lineIndicator}}{{FTUI Klasse|barIndicator}}{{FTUI Klasse|roundIndicator}}{{FTUI Klasse|dim-tick}}{{FTUI Klasse|dim-front}}{{FTUI Klasse|dim-back}}{{FTUI Klasse|hue-tick}}{{FTUI Klasse|hue-front}}{{FTUI Klasse|hue-back}}{{FTUI Klasse|warn}}{{FTUI Klasse|activate}}{{FTUI Klasse|labelright}}{{FTUI Klasse|interlock}}{{FTUI Klasse|keepopen}}{{FTUI Klasse|noshade}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Icons ===&lt;br /&gt;
FTUI bringt einige Icons-&amp;quot;Schriftarten&amp;quot; mit, die für die Darstellung genützt werden können. Diese werden automatisch beim Start des UI eingebunden, sobald ein entsprechendes Icon-Präfix im Code der Seite vorkommt.&lt;br /&gt;
&lt;br /&gt;
Verfügbare Icon-Schriftarten sind:&lt;br /&gt;
* Eingebaute Icons &#039;&#039;ftui-window&#039;&#039; und &#039;&#039;ftui-door&#039;&#039;. Präfix &#039;&#039;&#039;ftui-&#039;&#039;&#039;. Beispiel: &amp;lt;code&amp;gt;data-icon=&amp;quot;ftui-door&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* [http://fontawesome.io/icons/ Font-Awesome]: Mehr als 500 Icons zur Auswahl. Präfix &#039;&#039;&#039;fa-&#039;&#039;&#039;. Beispiel: &amp;lt;code&amp;gt;data-icon=&amp;quot;fa-volume-up&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* [https://material.io/icons/ Material Icons]: Mehr als 900 Icons zur Auswahl. Präfix &#039;&#039;&#039;mi-&#039;&#039;&#039;. Beispiel: &amp;lt;code&amp;gt;data-icon=&amp;quot;mi-local_gas_station&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* FHEM und OpenAutomation Icons: Präfix &#039;&#039;&#039;fs-&#039;&#039;&#039; und &#039;&#039;&#039;oa-&#039;&#039;&#039;. Beispiel: &amp;lt;code&amp;gt;data-icon=&amp;quot;oa-secur_locked&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* [https://erikflowers.github.io/weather-icons/ Weather-Icons]: Präfix &#039;&#039;&#039;wi &#039;&#039;&#039;. Beispiel: &amp;lt;code&amp;gt;data-icon=&amp;quot;wi wi-day-rain-mix&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternativ können auch Bilder Icons (bspw. png) über CSS verwendet werden. Bspw:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
  &amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
        .logo-fhem {&lt;br /&gt;
            background: url(https://wiki.fhem.de/fhemlogo.png) no-repeat;&lt;br /&gt;
            width: 120px;&lt;br /&gt;
            height: 132px;&lt;br /&gt;
            background-size: contain;&lt;br /&gt;
        }&lt;br /&gt;
  &amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div data-type=&amp;quot;symbol&amp;quot; data-icon=&amp;quot;logo-fhem&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Widgets ==&lt;br /&gt;
===Allgemeine Attribute===&lt;br /&gt;
Jedes Widget kann über verschiedene Attribute konfiguriert werden. Folgende Attribute gelten für alle Widgets:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+allgemeine Attribute&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-type&lt;br /&gt;
|Widget-Typ&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-device&lt;br /&gt;
|FHEM-Name des Gerätes (mit dem Befehl &#039;list&#039; bekommt man im FHEM die kpl. Liste)&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |class&lt;br /&gt;
|CSS-Klassen für Aussehen und Formatierung des Widgets&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Daten Empfangen&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-get&lt;br /&gt;
|Reading Name&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-get-on&lt;br /&gt;
|Wert für den Status on&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-get-off&lt;br /&gt;
|Wert für den Status off&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Daten Senden&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-set&lt;br /&gt;
|Reading Name&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-set-on&lt;br /&gt;
|Wert für den Status on&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |data-set-off&lt;br /&gt;
|Wert für den Status off&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Widget-spezifische Attribute können auf der jeweiligen Widget-Seite nachgelesen werden.&lt;br /&gt;
&lt;br /&gt;
=== Integrierte Widgets ===&lt;br /&gt;
Folgende Widgets sind direkt in FHEM Tablet UI integriert und können &amp;quot;out of the box&amp;quot; verwendet werden.&lt;br /&gt;
&lt;br /&gt;
* [[FTUI Widget Button|button]]: Variante der push und switch Widgets, die entweder einen URL ansteuern oder einen FHEM-Befehl absetzen kann&lt;br /&gt;
* [[FTUI Widget Checkbox|checkbox]]: Umschalter zwischen zwei definierten Zuständen&lt;br /&gt;
* [[FTUI Widget Circlemenu|circlemenu]]: Mehrere Widgets hinter einem Widget verborgen, trotz des &#039;circle&#039; im Namen kann das Menue jetzt auch horizontal oder vertikal ausgeklappt werden &lt;br /&gt;
* [[FTUI Widget Clock|clock]]: Stellt eine einfache Uhr zur Verfügung&lt;br /&gt;
* [[FTUI Widget Colorwheel|colorwheel]]: Farbpalette zur Auswahl von Farben&lt;br /&gt;
* [[FTUI Widget Controlbutton|controlbutton]]: iOS-ähnlicher Button zum Schalten zwischen zwei Zuständen (z.B. on / off)&lt;br /&gt;
* [[FTUI Widget Controller|controller]]: iOS-ähnlicher vertikaler Schieberegler zum Einstellen eines Wertes&lt;br /&gt;
* [[FTUI Widget Datetimepicker|datetimepicker]]: Erstellt eine Auswahl für Datum/Uhrzeit&lt;br /&gt;
* [[FTUI Widget Departure|departure]]: Abfahrtszeiten öffentlicher Verkehrsmittel&lt;br /&gt;
* [[FTUI Widget Dimmer|dimmer]]: Ein-/Aus-Button mit integriertem Schieberegler für z.B. einen Dim-Wert&lt;br /&gt;
* [[FTUI Widget Eventmonitor|eventmonitor]]:&lt;br /&gt;
* [[FTUI Widget Homestatus|homestatus]]: Auswahl für vier oder fünf definierte Stati eines Objects (z.B.: FHEM Residents)&lt;br /&gt;
* [[FTUI Widget Html|html]]:&lt;br /&gt;
* [https://github.com/nesges/Widgets-for-fhem-tablet-ui/wiki/iframe iframe]: Widget zum Einbinden externer Inhalte in einem Iframe&lt;br /&gt;
* [[FTUI Widget Image|image]]: Zeigt ein Bild, dessen URL fest vorgegeben oder aus einem Device-Reading gelesen werden kann&lt;br /&gt;
* [[FTUI Widget Input|input]]: Erstellen eines Texteingabefeldes&lt;br /&gt;
* [https://github.com/nesges/Widgets-for-fhem-tablet-ui/wiki/joinedlabel joinedlabel]: verbindet mehrere Readings zu einem Feld&lt;br /&gt;
* [[FTUI Widget Klimatrend|klimatrend]]: wandelt Daten aus dem statistics-Modul in einen Pfeil um, der den aktuellen Trend anzeigt&lt;br /&gt;
* [[FTUI Widget Knob|knob]]: Erstellt einen Statusbalken auf einer Kreisbahn&lt;br /&gt;
* [[FTUI Widget Label|label]]: Reading als Text anzeigen&lt;br /&gt;
* [[FTUI Widget Level|level]]: Vertikale oder horizontale Leiste zur Anzeige von Werten zwischen einem Minimal- und einem Maximalwert&lt;br /&gt;
* [[FTUI Widget Link|link]]: Erstellt einen Link oder Button zum Aufrufen von URLs oder Senden von Befehlen an FHEM&lt;br /&gt;
* [[FTUI Widget Medialist|medialist]]:&lt;br /&gt;
* [[FTUI Widget Multistatebutton|multistatebutton]]: Variante des push-Widgets, welches den set-Befehl abhängig vom gelesenen Status ändert&lt;br /&gt;
* [[FTUI Widget Notify|notify]]: Blendet ein Hinweisfenster im Browser ein&lt;br /&gt;
* [[FTUI Widget Pagebutton|pagebutton]]: Button, mit dem auf andere Seiten gesprungen werden kann. Eignet sich gut für eine Navigation&lt;br /&gt;
* [[FTUI Widget Pagetab|pagetab]]: Tauscht den Inhalt einer Seite durch den einer anderen. Eignet sich gut für ein Navigationsmenü&lt;br /&gt;
* [[FTUI Widget Playstream|playstream]]: Abspielen eines Webradio-Streams per Button&lt;br /&gt;
* [[FTUI Widget Popup|popup]]: Öffnet ein Popup nach einem Klick auf ein Widget oder HTML-Element &lt;br /&gt;
* [[FTUI Widget Progress|progress]]: Zeigt einen Prozentwert in Form einer runden Fortschrittsleiste&lt;br /&gt;
* [[FTUI_Widget_Push|push]]: Button, mit dem ein Befehl an FHEM gesendet werden kann&lt;br /&gt;
* [[FTUI Widget Range|range]]: Erstellt vertikale Balken, die einen Wertebereich in unterschiedlichen Farben darstellen&lt;br /&gt;
* [[FTUI Widget Readingsgroup|readingsgroup]]: Zeigt eine Readingsgroup an, wie sie in FHEM definiert wurde&lt;br /&gt;
* [[FTUI Widget Rotor|rotor]]: Animiertes Umschalten von zwei oder mehr Widgets an einer Position&lt;br /&gt;
* [[FTUI Widget Scale|scale]]: Vertikale oder horizontale Leiste zur Anzeige von Werten zwischen einem Minimal- und einem Maximalwert&lt;br /&gt;
* [[FTUI_Widget_Select|select]]: Combobox, die eine Liste an Werten zur Auswahl anzeigt&lt;br /&gt;
* [https://github.com/nesges/Widgets-for-fhem-tablet-ui/wiki/settimer settimer]: Zum Anzeigen und Einstellen einer Uhrzeit&lt;br /&gt;
* [[FTUI Widget Simplechart|simplechart]]: Einfaches XY-Diagramm zur Anzeige eines Wertes, der direkt aus einem FHEM-Logfile gelesen wird&lt;br /&gt;
* [[FTUI Widget Slideout|slideout]]:&lt;br /&gt;
* [[FTUI Widget Slider|slider]]: Vertikaler Schieberegler zum Einstellen eines Wertes &lt;br /&gt;
* [[FTUI Widget Spinner|spinner]]: Element, um Werte durch Drücken auf Plus-/Minus- oder Höher-/Tiefer-Icons zu ändern&lt;br /&gt;
* [[FTUI Widget Swiper|swiper]]: Bietet die Möglichkeit, durch Wischen zwischen verschiedenen Seiten zu wechseln&lt;br /&gt;
* [[FTUI Widget Switch|switch]]: Button, um zwischen zwei Zuständen zu schalten (z.B. on / off)&lt;br /&gt;
* [[FTUI Widget Symbol|symbol]]: Status eines Devices als Symbol darstellen (z.B. Fenster offen)&lt;br /&gt;
* [[FTUI Widget Theme|theme]]: Kontextspezifisches Design&lt;br /&gt;
* [[FTUI Widget Thermostat|thermostat]]: Anzeige für Heizungsthermostate, mit der die gewünschte Temperatur eingestellt werden kann&lt;br /&gt;
* [[FTUI Widget Volume|volume]]: Einstellscheibe zur Änderung eines einzelnen Wertes&lt;br /&gt;
* [[FTUI Widget Weather|weather]]: Wettersymbol anzeigen&lt;br /&gt;
* [[FTUI Widget Weatherdetail|weatherdetail]]: Detaillierte Wettervorhersage über 4 Tage (Nutzt das Proplanta Modul)&lt;br /&gt;
* [[FTUI Widget WindDirection|wind_direction]]: Anzeige der Windrichtung auf einer Windrose&lt;br /&gt;
&lt;br /&gt;
===3rd Party Widgets===&lt;br /&gt;
Für diese Widgets kann nicht sichergestellt werden, dass sie mit der jeweils aktuellen Version von FTUI funktionieren.&lt;br /&gt;
* [[FTUI Widget Agenda|agenda]]: Zeigt Kalendereinträge in einer Listenform an&lt;br /&gt;
* [[FTUI_Widget_Analogclock|analogclock]]: Analoguhr&lt;br /&gt;
* [[FTUI Widget Calview|calview]]: Zeigt Einträge aus einem [[CALVIEW]]-Device an&lt;br /&gt;
* [[FTUI Widget Chart|chart]]: Diagramm mit ähnlichen Möglichkeiten wie die FHEM-Plots&lt;br /&gt;
* [[FTUI Widget Classchanger|classchanger]]: Ändert seine CSS-Klassen je nach Status eines Devices&lt;br /&gt;
* [[FTUI Widget Clicksound|clicksound]]: Mit dem Widget &amp;quot;clicksound&amp;quot; können Sounds an Click-Events von Elementen gebunden werden.&lt;br /&gt;
* [[FTUI Widget Filelog|filelog]]:&lt;br /&gt;
* [[FTUI Widget Fullcalview|fullcalview]]:&lt;br /&gt;
* [[FTUI Widget Gds|gds]]:&lt;br /&gt;
* [[FTUI Widget Maps]]: Kartendarstellung mit Google Maps API&lt;br /&gt;
* [[FTUI Widget Highchart|highchart]]:&lt;br /&gt;
* [[FTUI Widget Highchart3d|highchart3d]]:&lt;br /&gt;
* [https://github.com/nesges/Widgets-for-fhem-tablet-ui/wiki/itunes_artwork itunes_artwork]: itunes_artwork durchsucht die iTunes-Datenbank anhand eines Arrays von beliebigen Suchworten nach einem Cover-Artwork und zeigt dieses an. &lt;br /&gt;
* [https://github.com/nesges/Widgets-for-fhem-tablet-ui/wiki/javascript javascript]: Ermöglicht die Ausführung beliebigen Javascript-Codes aus einem Reading.&lt;br /&gt;
* [https://github.com/nesges/Widgets-for-fhem-tablet-ui/wiki/kodinowplaying kodinowplaying]: zeigt Informationen zu grade in KODI gespielten Medien in Form eines Labels an.&lt;br /&gt;
* [[FTUI Widget Loading|loading]]:&lt;br /&gt;
* [[FTUI Widget Meteogram|meteogram]]:&lt;br /&gt;
* [https://github.com/nesges/Widgets-for-fhem-tablet-ui/wiki/mpdnowplaying mpdnowplaying]: Zeigt Titelinformationen eines per MPD-Modul angebundenen Music Player Daemon an.&lt;br /&gt;
* [https://forum.fhem.de/index.php/topic,79283.msg712855.html#msg712855 pinpad]: Pinpad für z.B. eine Alarmanlage&lt;br /&gt;
* [https://forum.fhem.de/index.php/topic,76643.msg685472.html#msg685472 postme]: Liste des PostMe-Devices anzeigen&lt;br /&gt;
* [https://github.com/nesges/Widgets-for-fhem-tablet-ui/wiki/reload reload]: auslösen eine Pagereloads&lt;br /&gt;
* [[FTUI Widget Screensaver|screensaver]]:&lt;br /&gt;
* [https://forum.fhem.de/index.php/topic,73497.0.html scrolllabel]: Texte in Laufschrift darstellen&lt;br /&gt;
* [[FTUI Widget Svgplot|svgplot]]:&lt;br /&gt;
* [https://forum.fhem.de/index.php?topic=82883.msg750237#msg750237 todoist]: einfaches widget für todoist&lt;br /&gt;
* [[FTUI Widget Tts|tts]]: Sprachausgabe eines Textes aus einem Reading auf dem Endgerät.&lt;br /&gt;
* [[FTUI Widget UWZ|uwz]]: Anzeige der Warnungen der Unwetterzentrale&lt;br /&gt;
* [[FTUI Widget Wakeup|wakeup]]:&lt;br /&gt;
* [https://github.com/svenson08/ftui-weekdaytimer-widget wdtimer]: Visualisierung des [[WeekdayTimer]] Modul&lt;br /&gt;
* [[FTUI Widget Weekprofile|weekprofile]]: Visualisierung des [[weekprofile]] Moduls&lt;br /&gt;
&lt;br /&gt;
===Anwendungsbeispiele===&lt;br /&gt;
Durch die Verbindung von Widgets mit dem FHEM-Umfeld entstehen Lösungen für typische Anwendungen.&lt;br /&gt;
* [[FTUI_Beispiel_Datetimepicker_für_Timer|Datetimepicker für Timer]]: Oberfläche für Timereinstellungen&lt;br /&gt;
* [[FTUI_Beispiel_Mondphase|Mondphase]]: Visuelle Darstellung der Mondphase&lt;br /&gt;
* [[FTUI_Beispiel_Webradio|Webradio]]&lt;br /&gt;
* [[FTUI Beispiel Zeitschaltung|Verschiedene Zeitschaltungen]]&lt;br /&gt;
&lt;br /&gt;
==Templates==&lt;br /&gt;
Kommt ein bestimmtes &amp;quot;Code-Fragment&amp;quot; auf mehreren Seiten oder öfter pro Seite vor, bietet FTUI die Option, Templates zu erstellen. Diese werden einmal gebaut und können dann mit dem Attribut &#039;&#039;&#039;data-template&#039;&#039;&#039; nach Belieben in eine Seite eingefügt werden. Dabei besteht auch die Möglichkeit, Variablen zu verwenden.&lt;br /&gt;
&lt;br /&gt;
Die Variablennamen sollten möglichst eindeutig und unverwechselbar gewählt werden, da bei der Verwendung von Templates im Prinzip Suchen &amp;amp; Ersetzen angewendet wird. Verwendet man beispielsweise die Variablen &#039;&#039;&#039;dev:Thermostat_Kueche&#039;&#039;&#039; und &#039;&#039;&#039;dev_temp:temperatue&#039;&#039;&#039;, so kann es passieren, dass die Ergebnisse im erzeugten Code dann &#039;&#039;&#039;Thermostat_Kueche&#039;&#039;&#039; und &#039;&#039;&#039;Thermostat_Kueche_temp&#039;&#039;&#039; lauten, statt wie gewünscht &#039;&#039;&#039;Thermostat_Kueche&#039;&#039;&#039; und &#039;&#039;&#039;temperature&#039;&#039;&#039;. Um dies zu vermeiden, sollten die Variablen besser &#039;&#039;&#039;device:Thermostat_Kueche&#039;&#039;&#039; und &#039;&#039;&#039;temp:temperatue&#039;&#039;&#039; lauten.&lt;br /&gt;
&lt;br /&gt;
Im Folgenden ein paar Beispiele, wie Templates verwendet werden können.&lt;br /&gt;
&lt;br /&gt;
===Einzelnes Widget===&lt;br /&gt;
Soll ein Widget an mehreren Stellen in exakt der selben Ausführung eingebunden werden, kann diese Widget in einer eigenen Datei erstellt und diese dann auf den Zielseiten automatisch mitgeladen werden.&lt;br /&gt;
&lt;br /&gt;
;Template-Seite&lt;br /&gt;
Die Template-Seite soll in diesem Beispiel &#039;&#039;template_symbol.html&#039;&#039; genannt werden. Diese wird daher zuerst im FTUI-Verzeichnis erstellt.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;symbol&amp;quot;&lt;br /&gt;
     data-device=&amp;quot;dummy1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Haupt-Seite&lt;br /&gt;
Die oben erstellte Template-Seite kann nun in jeder gewünschten Seite eingebunden werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot; highlight=&amp;quot;6&amp;quot;&amp;gt;&lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;gridster&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li data-row=&amp;quot;1&amp;quot; data-col=&amp;quot;1&amp;quot; data-sizey=&amp;quot;1&amp;quot; data-sizex=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;div data-template=&amp;quot;template_symbol.html&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Gridster-Element===&lt;br /&gt;
Natürlich kann auch ein ganzes Gridster-Element - in diesem Fall ein Menü - als Template eingebunden werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li data-row=&amp;quot;1&amp;quot; data-col=&amp;quot;1&amp;quot; data-sizex=&amp;quot;1&amp;quot; data-sizey=&amp;quot;4&amp;quot; data-template=&amp;quot;menu.html&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Widget-Gruppen ===&lt;br /&gt;
Die Template-Datei des [[#Einzelnes Widget|ersten Beispiels]] kann natürlich auch mehrere Widgets auf einmal enthalten.&lt;br /&gt;
&lt;br /&gt;
=== Verwendung von Variablen ===&lt;br /&gt;
==== Einfaches Beispiel ====&lt;br /&gt;
Oft wird ein und dasselbe Widget für verschiedenen Devices verwendet. Um nicht für jedes Device das Widget neu kopieren zu müssen (bzw. bei Änderungen alle Seiten ausbessern zu müssen), kann ein Template verwendet werden, dem einfach per Parameter mitgeteilt wird, von welchem Device es gerade die Daten empfangen soll.&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel wird ein Template erzeugt, dass nur die Temperatur verschiedenen Thermostate mittels eines [[FTUI Widget Label|Label-Widgets]] anzeigt.&lt;br /&gt;
&lt;br /&gt;
;Template-Seite&lt;br /&gt;
Die Template-Seite enthält nur ein einfaches Label-Widget und wird in diesem Beispiel &#039;&#039;template_label.html&#039;&#039; genannt. Um sie für mehrere Devices verwenden zu können, wird im Attribut &#039;&#039;&#039;data-device&#039;&#039;&#039; der Name des eigentlichen Devices durch den Parameter &#039;&#039;&#039;par01&#039;&#039;&#039; ersetzt.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot; highlight=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;label&amp;quot;&lt;br /&gt;
     data-device=&amp;quot;par01&amp;quot;&lt;br /&gt;
     data-get=&amp;quot;measured-temp&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Haupt-Seite&lt;br /&gt;
Auf der Haupt-Seite wird die Template-Seite mit dem Attribut &#039;&#039;&#039;data-template&#039;&#039;&#039; eingebunden und ihr via Attribut &#039;&#039;&#039;data-parameter&#039;&#039;&#039; das jeweils gewünschte Device übergeben.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;div data-template=&amp;quot;template_label.html&amp;quot; data-parameter=&#039;{&amp;quot;par01&amp;quot;:&amp;quot;Thermostat1&amp;quot;}&#039;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div data-template=&amp;quot;template_label.html&amp;quot; data-parameter=&#039;{&amp;quot;par01&amp;quot;:&amp;quot;Thermostat2&amp;quot;}&#039;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div data-template=&amp;quot;template_label.html&amp;quot; data-parameter=&#039;{&amp;quot;par01&amp;quot;:&amp;quot;Thermostat3&amp;quot;}&#039;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Wetter-Slider mit Template ====&lt;br /&gt;
In diesem Beispiel wird ein [[FTUI Widget Slider|Slider-Widget]] erstellt, welches die verschiedenen Tage eines Wetterberichtes anzeigt. Dabei wird für den Wetterbericht des jeweiligen Tages immer dasselbe Template verwendet um nicht für jeden Tag ein eigenes Widget schreiben zu müssen.&lt;br /&gt;
&lt;br /&gt;
;Template-Seite&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;left&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;div data-type=&amp;quot;label&amp;quot; data-device=&amp;quot;AgroWeather&amp;quot; data-get=&amp;quot;par01&amp;quot; data-unit=&amp;quot;&amp;amp;deg;C&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
   &amp;lt;div class=&amp;quot;inline&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;div data-type=&amp;quot;label&amp;quot; data-device=&amp;quot;AgroWeather&amp;quot; data-get=&amp;quot;par02&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
       &amp;lt;div data-type=&amp;quot;weather&amp;quot; data-device=&amp;quot;AgroWeather&amp;quot; data-get=&amp;quot;par02&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
       min:&amp;amp;nbsp;&amp;lt;div data-type=&amp;quot;label&amp;quot; data-device=&amp;quot;AgroWeather&amp;quot; data-get=&amp;quot;par03&amp;quot; data-unit=&amp;quot;&amp;amp;deg;C&amp;quot;&amp;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;div class=&amp;quot;left&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;div data-type=&amp;quot;label&amp;quot; data-device=&amp;quot;AgroWeather&amp;quot; data-get=&amp;quot;par04&amp;quot; data-substitution=&amp;quot;toDate().eeee()+&#039;,&#039;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
   &amp;lt;div data-type=&amp;quot;label&amp;quot; data-device=&amp;quot;AgroWeather&amp;quot; data-get=&amp;quot;par04&amp;quot; data-substitution=&amp;quot;toDate().ddmm()&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Haupt-Seite&lt;br /&gt;
In der Haupt-Seite wird das Template dann für jede Slider-Seite eingebunden und das Reading für den jeweiligen Tag via Parameter übergeben.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;swiper&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
   &amp;lt;li data-template=&amp;quot;templates/wetter.html&amp;quot; data-parameter=&#039;{&amp;quot;par01&amp;quot;:&amp;quot;fc0_tempMax&amp;quot;,&amp;quot;par02&amp;quot;:&amp;quot;fc0_weatherDay&amp;quot;,&amp;quot;par03&amp;quot;:&amp;quot;fc0_tempMin&amp;quot;,&amp;quot;par04&amp;quot;:&amp;quot;fc0_date&amp;quot;}&#039;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li data-template=&amp;quot;templates/wetter.html&amp;quot; data-parameter=&#039;{&amp;quot;par01&amp;quot;:&amp;quot;fc1_tempMax&amp;quot;,&amp;quot;par02&amp;quot;:&amp;quot;fc1_weatherDay&amp;quot;,&amp;quot;par03&amp;quot;:&amp;quot;fc1_tempMin&amp;quot;,&amp;quot;par04&amp;quot;:&amp;quot;fc1_date&amp;quot;}&#039;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li data-template=&amp;quot;templates/wetter.html&amp;quot; data-parameter=&#039;{&amp;quot;par01&amp;quot;:&amp;quot;fc2_tempMax&amp;quot;,&amp;quot;par02&amp;quot;:&amp;quot;fc2_weatherDay&amp;quot;,&amp;quot;par03&amp;quot;:&amp;quot;fc2_tempMin&amp;quot;,&amp;quot;par04&amp;quot;:&amp;quot;fc2_date&amp;quot;}&#039;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li data-template=&amp;quot;templates/wetter.html&amp;quot; data-parameter=&#039;{&amp;quot;par01&amp;quot;:&amp;quot;fc3_tempMax&amp;quot;,&amp;quot;par02&amp;quot;:&amp;quot;fc3_weatherDay&amp;quot;,&amp;quot;par03&amp;quot;:&amp;quot;fc3_tempMin&amp;quot;,&amp;quot;par04&amp;quot;:&amp;quot;fc3_date&amp;quot;}&#039;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== JavaScript-Funktionen ==&lt;br /&gt;
Neben den Widgets können auch einige JavaScript-Funktionen verwendet werden, um Befehle an FHEM zu senden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Folgende Zeile setzt einen direkten Befehl an FHEM ab (&amp;lt;code&amp;gt;set dummy1 off&amp;lt;/code&amp;gt;):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&amp;lt;div onclick=&amp;quot;ftui.setFhemStatus(&#039;set dummy1 off&#039;)&amp;quot;&amp;gt;Dummy1 aus&amp;lt;/div&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese Zeile veranlasst FHEM dazu, eine Funktion aus der 99_myUtils.pm auszuführen (&amp;lt;code&amp;gt;myUtils_HeizungUpDown(&amp;quot;WZ.Thermostat_Climate&amp;quot;,&amp;quot;up&amp;quot;)&amp;lt;/code&amp;gt;):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&amp;lt;div onclick=&amp;quot;ftui.setFhemStatus(&#039;{myUtils_HeizungUpDown(&amp;amp;quot;WZ.Thermostat_Climate&amp;amp;quot;,&amp;amp;quot;up&amp;amp;quot;)}&#039;)&amp;quot;&amp;gt;+&amp;lt;/div&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel, wie ein Kommando an FHEM gesendet wird und gleichzeitig der Wert eines bereits in FTUI angezeigten Readings verwendet werden kann:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;label&amp;quot; data-device=&amp;quot;dummy1&amp;quot; data-get=&amp;quot;temperature&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div onClick=&amp;quot;ftui.setFhemStatus(&#039;set dummy2 &#039;+ftui.getDeviceParameter(&#039;dummy1&#039;,&#039;temperature&#039;).val);&amp;quot;&amp;gt;Senden&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Eigene Widgets erstellen ==&lt;br /&gt;
Wie eigenen Widgets für FTUI erstellt werden können, ist auf der Seite [[FTUI eigene Widgets]] beschrieben.&lt;br /&gt;
&lt;br /&gt;
Eine Schritt für Schritt Anleitung für das erste eigene Widget gibts hier [[FTUI eigene Widgets - Beispiel]]&lt;br /&gt;
&lt;br /&gt;
== FAQ ==&lt;br /&gt;
Häufig gestellte Fragen zum FHEM Tablet UI sind in der [[FHEM Tablet UI FAQ]] zusammengestellt.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [https://github.com/knowthelist/fhem-tablet-ui Projekt auf Github]&lt;br /&gt;
* {{Link2Forum|Topic=34233|LinkText=Forums-Beitrag}}&lt;br /&gt;
* [[FTUI_Snippets|Snippets]]&lt;br /&gt;
* [http://knowthelist.github.io/fhem/tablet/demo_widgets.html Live-Demos]&lt;br /&gt;
* [https://waschto.eu/fhem-und-tabletui-livedemo/ FHEM und TabletUI Live-Demo]&lt;br /&gt;
* {{Link2Forum|Topic=37378|LinkText=User-Demos}}&lt;br /&gt;
* [https://github.com/ovibox/fhem-ftui-user-demos Download der User-Demo-Dateien]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Tablet UI|!]]&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Slider&amp;diff=27906</id>
		<title>FTUI Widget Slider</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Slider&amp;diff=27906"/>
		<updated>2018-09-18T14:46:09Z</updated>

		<summary type="html">&lt;p&gt;Eki: Anpassung der Rolladendarstellung aufgrund von Änderungen in FTUI 2.7.2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das [[{{PAGENAME}}|Slider Widget]] ist ein Widget für [[FHEM Tablet UI]] in Form eines Schiebereglers, mit dem ein beliebiger Wert zwischen zwei festgelegten Grenzwerten auswählen lässt. Es eignet sich zum Beispiel zum Einstellen der Lautstärke eines Audio-Gerätes oder der Helligkeit einer Lampe.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Slider_tabletUI.png&lt;br /&gt;
File:Slider_tabletUI2.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Steuer-Attribute==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-device&#039;&#039;&#039;||FHEM-Device, dessen Reading gesetzt werden soll (&amp;lt;command&amp;gt; &#039;&#039;&#039;&amp;lt;device&amp;gt;&#039;&#039;&#039; &amp;lt;reading&amp;gt; &amp;lt;value&amp;gt;)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-get&#039;&#039;&#039;||Reading, dessen Inhalt den aktuellen Wert wiedergibt||&#039;STATE&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-set&#039;&#039;&#039;||Reading, das gesetzt werden soll (&amp;lt;command&amp;gt; &amp;lt;device&amp;gt; &#039;&#039;&#039;&amp;lt;reading&amp;gt;&#039;&#039;&#039; &amp;lt;value&amp;gt;)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-on&#039;&#039;&#039;||Wert, bei dem der Slider zum maximalen Ausschlag springt||&#039;on&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-off&#039;&#039;&#039;||Wert, bei dem der Slider minimalen Ausschlag springt||&#039;off&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-part&#039;&#039;&#039;||Wählt bei Werten, die durch Leerzeichen getrennt sind, den Teil aus, der angezeigt werden soll. Der Teil kann auch mit RegEx ermittelt werden.||&#039;-1&#039;: alles Anzeigen||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-set-value&#039;&#039;&#039;||Format, wie der eingestellte Wert an FHEM übergeben werden soll||&#039;$v&#039;: Nur den Wert||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-cmd&#039;&#039;&#039;||Befehl, der gesendet werden soll (&#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; &amp;lt;device&amp;gt; &amp;lt;reading&amp;gt; &amp;lt;value&amp;gt;) (z.B. setstate, set, setreading, trigger)||set||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-min&#039;&#039;&#039;||Minimaler Wert, der eingestellt werden kann||0||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-max&#039;&#039;&#039;||Maximaler Wert, der eingestellt werden kann||100||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-step&#039;&#039;&#039;||Schrittweite beim Schieben des Sliders||1||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-width&#039;&#039;&#039;||Breite des Sliders, wenn er horizontal ausgerichtet ist||normal &#039;120px&#039;, mini &#039;60px&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-height&#039;&#039;&#039;||Höhe des Sliders, wenn er vertikal ausgerichtet ist||normal &#039;120px&#039;, mini &#039;60px&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-color&#039;&#039;&#039;||Farbe des Sliders für den Bereich 0...&amp;lt;eingestellter Wert&amp;gt;||&#039;#aa6900&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-background-color&#039;&#039;&#039;||Farbe des Sliders für den Bereich &amp;lt;eingestellter Wert&amp;gt;...&amp;lt;Maximaler Wert&amp;gt;||&#039;#404040&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-handle-diameter&#039;&#039;&#039;||Größe des Griffs||&#039;20&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-touch-diameter&#039;&#039;&#039;||Größe des Griffs, wenn er bewegt wird||wie &#039;&#039;&#039;data-handle-diameter&#039;&#039;&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-timer-state&#039;&#039;&#039;||Statusvariable mit der eine timergesteuerte Bewegung des Sliders ausgelöst werden kann||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-timer-state-on&#039;&#039;&#039;||Zustand der Statusvariablen der die Bewegung startet||&#039;on&#039;||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;data-timer-state-off&#039;&#039;&#039;||Zustand der Statusvariablen der die Bewegung stoppt||&#039;off&#039;||!on (alles was nicht on ist stoppt den Timer)&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;data-timer-step&#039;&#039;&#039;||Erhöhung des Wertes pro Timer-Intervall||1||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;data-timer-interval&#039;&#039;&#039;||Timer-Intervall in Millisekunden||1000||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==CSS-Klassen==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Klasse&lt;br /&gt;
!Beschreibung&lt;br /&gt;
{{FTUI Klasse|mini}}{{FTUI Klasse|big}}{{FTUI Klasse|bigger}}{{FTUI Klasse|large}}{{FTUI Klasse|horizontal}}{{FTUI Klasse|right}}{{FTUI Klasse|negated}}{{FTUI Klasse|value}}{{FTUI Klasse|FS20}}{{FTUI Klasse|tap}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Der Slider unterstützt &#039;&#039;tap to target&#039;&#039;, also das Springen zum gewünschten Wert durch einfaches Antippen, nur, wenn die CSS-Klasse &#039;&#039;&#039;tap&#039;&#039;&#039; verwendet wird.&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
===Vertikaler Schieberegler===&lt;br /&gt;
Einfacher Schieberegler mit dem Einstellbereich 10...90&lt;br /&gt;
&lt;br /&gt;
[[File:Slider_tabletUI.png]]&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;slider&amp;quot; &lt;br /&gt;
     data-device=&#039;Dummy1&#039; &lt;br /&gt;
     data-min=&amp;quot;10&amp;quot; &lt;br /&gt;
     data-max=&amp;quot;90&amp;quot; &lt;br /&gt;
     class=&amp;quot;cell&amp;quot; &amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;label&amp;quot; class=&amp;quot;cell&amp;quot;&amp;gt;Light1&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Horizontaler Schieberegler===&lt;br /&gt;
Einfacher Schieberegler mit dem Einstellbereich 0...100&lt;br /&gt;
&lt;br /&gt;
[[File:Slider_tabletUI2.jpg]]&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;slider&amp;quot;&lt;br /&gt;
     data-device=&#039;Dummy1&#039; &lt;br /&gt;
     data-min=&amp;quot;0&amp;quot; &lt;br /&gt;
     data-max=&amp;quot;100&amp;quot; &lt;br /&gt;
     class=&amp;quot;horizontal&amp;quot; &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Retro-Schieberegler mit Skala und rechteckigem Riffelknopf===&lt;br /&gt;
Kombination aus Slider- und Scale-Widget und Modifikation des Buttons in fhem-tablet-ui-user.css&lt;br /&gt;
&lt;br /&gt;
[[File:retroslider.jpg]]&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;doublebox-h&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;right-narrow&amp;quot;&lt;br /&gt;
		 data-type=&amp;quot;scale&amp;quot;&lt;br /&gt;
		 data-orientation=&amp;quot;vertical&amp;quot;&lt;br /&gt;
		 data-device=&amp;quot;amp&amp;quot;&lt;br /&gt;
		 data-get=&amp;quot;volume&amp;quot; &lt;br /&gt;
		 data-set=&amp;quot;volume&amp;quot;&lt;br /&gt;
		 data-height=&amp;quot;155&amp;quot;&lt;br /&gt;
		 data-width=&amp;quot;45&amp;quot;&lt;br /&gt;
		 data-value-interval=&amp;quot;50&amp;quot;&lt;br /&gt;
		 data-tick=&amp;quot;5&amp;quot;&lt;br /&gt;
		 data-extra-tick=&amp;quot;25&amp;quot;&lt;br /&gt;
		 data-font-size=&amp;quot;16&amp;quot;&lt;br /&gt;
		 data-colors=&#039;[&amp;quot;green&amp;quot;,&amp;quot;#FFBF00&amp;quot;,&amp;quot;#EF0002&amp;quot;]&#039;&lt;br /&gt;
		 data-limits=&#039;[&amp;quot;1&amp;quot;,&amp;quot;50&amp;quot;,&amp;quot;75&amp;quot;]&#039;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class = &amp;quot;value left-narrow&amp;quot;&lt;br /&gt;
		 data-type=&amp;quot;slider&amp;quot;&lt;br /&gt;
		 data-height=&amp;quot;150&amp;quot;&lt;br /&gt;
		 data-device=&amp;quot;amp&amp;quot;&lt;br /&gt;
		 data-get=&amp;quot;volume&amp;quot; &lt;br /&gt;
		 data-set=&amp;quot;volume&amp;quot;&lt;br /&gt;
		 data-color=&amp;quot;grey&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Eintrag in fhem-tablet-ui-user.css:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
.vertical .range-handle {&lt;br /&gt;
    left: -17px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.range-handle {&lt;br /&gt;
  width: 35px !important;&lt;br /&gt;
  height: 15px !important;&lt;br /&gt;
  border-radius: 3px !important;&lt;br /&gt;
  background-color: black;&lt;br /&gt;
  background-image: linear-gradient(180deg, white,black);&lt;br /&gt;
  background-size: 2px 2px;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Darstellungsmöglichkeit bei Nutzung des Schiebereglers für Rolladen-/Jalousien-/Markisensteuerung===&lt;br /&gt;
&lt;br /&gt;
[[File:blindsslider.png|200px]] [[File:DarstellungSliderRolladenBunt.png|240px]]&lt;br /&gt;
&lt;br /&gt;
Folgende Anpasssungen sind zu machen:&lt;br /&gt;
&lt;br /&gt;
im file fhem-tablet-ui-user.css (falls das noch nicht verwendet wird, muss es natürlich noch in das html file, das aufgerufen wird, eingetragen werden) folgende Zeilen einfügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* Definition for styles to be used for extension of slider widget for display of blinds, awnings etc. */&lt;br /&gt;
/* normal lines */&lt;br /&gt;
&lt;br /&gt;
.blind .vertical.range-container {&lt;br /&gt;
	width: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.blind&amp;gt; .vertical .range-bar {&lt;br /&gt;
    width: 70%;&lt;br /&gt;
	border-radius: 2px;&lt;br /&gt;
	background-image: url(../blinds.jpg);&lt;br /&gt;
	background-position: center bottom;&lt;br /&gt;
	background-blend-mode: multiply;&lt;br /&gt;
	background-size: cover;&lt;br /&gt;
	background-color: rgb(150,150,150) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.blind&amp;gt; .vertical .range-quantity {&lt;br /&gt;
	border-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.blind&amp;gt; .vertical .range-handle {&lt;br /&gt;
	margin-left: 52% !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.blindview&amp;gt; .vertical .range-quantity {&lt;br /&gt;
	border-radius: 2px;&lt;br /&gt;
	background-image: url(../windowContentSimpleGrey.png);&lt;br /&gt;
	background-repeat: no-repeat;&lt;br /&gt;
	background-position: center bottom;&lt;br /&gt;
	background-size: cover;&lt;br /&gt;
	background-blend-mode: difference;&lt;br /&gt;
	background-color: rgb(64,64,64) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.awning .vertical.range-container {&lt;br /&gt;
	width: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.awning&amp;gt; .vertical .range-bar {&lt;br /&gt;
    width: 70%;&lt;br /&gt;
	border-radius: 2px;&lt;br /&gt;
	background-image: url(../awningContentSimpleGrey.png);&lt;br /&gt;
	background-position: center bottom;&lt;br /&gt;
	background-blend-mode: difference;&lt;br /&gt;
	background-size: 100% 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.awning&amp;gt; .vertical .range-quantity {&lt;br /&gt;
	border-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.awning&amp;gt; .vertical .range-handle {&lt;br /&gt;
	margin-left: 52% !important;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die nachfolgenden Grafiken müssen in das Verzeichnis oberhalb des css directories kopiert werden (zumindest die, die im css File auch referenziert werden. Es gibt eine Graustufenvariante und eine farbige, entsprechend müssen die Filenamen im css file ausgetauscht werden also jeweils das &amp;quot;Grey&amp;quot; im Filenamen weglassen wenn man bunte Fenster will. Wer will, kann sich natürlich auch eigene Fenster und Rolladenbildchen basteln, ein Beispiel für den &amp;quot;Fensterausblick&amp;quot; ist auch noch enthalten).&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:windowContentSimple.png&lt;br /&gt;
File:awningContentSimple.png&lt;br /&gt;
File:windowContentSimpleGrey.png&lt;br /&gt;
File:awningContentSimpleGrey.png&lt;br /&gt;
File:windowContentGrey.jpg&lt;br /&gt;
File:windowContent.jpg&lt;br /&gt;
File:blinds.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
im &amp;quot;class&amp;quot; parameter des Sliders müssen folgende Klassen hinzugefügt werden:&lt;br /&gt;
blind (dadurch wird die Darstellung eines verschiebbaren Rollladens bewirkt)&lt;br /&gt;
awning (dadurch wird die Darstellung einer Markise bewirkt)&lt;br /&gt;
blindview (dadurch wird im Hintergrund ein Fenster symbolisiert)&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für die Definition eines Sliders mit Rolladendarstellung und Fenster als Hintergrundbild wäre:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;slider&amp;quot;&lt;br /&gt;
    data-handle-diameter=&amp;quot;15&amp;quot;&lt;br /&gt;
    data-device=&amp;quot;&amp;quot;&lt;br /&gt;
    data-color=&amp;quot;#969696&amp;quot;&lt;br /&gt;
    data-height=&amp;quot;125&amp;quot;&lt;br /&gt;
    data-device=&amp;quot;dg_SZ_Rolladen&amp;quot;&lt;br /&gt;
    class=&amp;quot;blind blindview&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wird in der Klasse &amp;quot;awning&amp;quot; statt &amp;quot;blind&amp;quot; gesetzt, so wird eine Markisendarstellung erzeugt.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Tablet UI|Slider]]&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Chart&amp;diff=27295</id>
		<title>FTUI Widget Chart</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Chart&amp;diff=27295"/>
		<updated>2018-07-03T11:46:28Z</updated>

		<summary type="html">&lt;p&gt;Eki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das [[{{PAGENAME}}|Chart Widget]] ist ein Widget für [[FHEM Tablet UI]], mit dem sich verschiedenste Diagramme darstellen lassen. Die Aneinanderreihung mehrerer Werte eines Device-Readings zu einem zeitlichen Verlauf wird dabei als Graph bezeichnet.&lt;br /&gt;
&lt;br /&gt;
Es können beliebige Werte dargestellt und entsprechend der Sinnhaftigkeit, oder persönlichem Geschmack, formatiert werden. Farbe und Form der Linien sind je Graph einstellbar, auch wenn mehrere gleichzeitig in einem Diagramm angezeigt werden.&lt;br /&gt;
&lt;br /&gt;
Jedes Diagramm kann zwei Y-Achsen besitzen. Die primäre Y-Achse (primary) wird auf der linken Seite angezeigt, die sekundäre Y-Achse (secondary) auf der rechten Seite. Beide Achsen können unterschiedlich formatiert werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Chart_tabletUI.png&lt;br /&gt;
Datei:FTUI Widget Chart Stacked.png&lt;br /&gt;
Datei:FTUI Widget Chart-fc-Proplanta.png&lt;br /&gt;
Datei:Wetterchart2.png&lt;br /&gt;
Datei:PieChart.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Attribute==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:150px&amp;quot;|Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-device&#039;&#039;&#039;||Name des FHEM-Device, das die Aktualisierung des Charts triggert||||data-device=&amp;quot;WohnzimmerHeizung&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-get&#039;&#039;&#039;||Reading, das das Update des Diagramms triggert||&#039;STATE&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-logdevice&#039;&#039;&#039;||Name des Log-Device, das dargestellt werden soll, oder ein Array, um mehrere Werte in einem Diagramm darzustellen||||data-logdevice=&amp;quot;FileLog_WohnzimmerHeizung&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-logfile&#039;&#039;&#039;|| Name des Log-Files, aus dem die Daten entnommen werden sollen (oder Array)||&#039;-&#039; = aktuelle Datei||data-logfile=&amp;quot;WohnzimmerHeizung-2015.log&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-columnspec&#039;&#039;&#039;||Ermittelt den Wert aus dem Log-File, der angezeigt werden soll (oder Array)||||data-columnspec=&amp;quot;4:meas.*&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-style&#039;&#039;&#039;||Stil, wie die Graph-Linien dargestellt werden sollen (z.B. &#039;SVGplot l0&#039; oder &#039;ftui l0dash&#039;), oder ein Array, wenn mehrere Linien unterschiedlich dargestellt werden sollen (siehe [[#Aussehen_der_Linien|Hinweise]])||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-ptype&#039;&#039;&#039;||Form, wie die Graphen dargestellt werden sollen (z.B. &#039;lines&#039;, &#039;cubic&#039; oder &#039;fa-cog&#039;), oder ein Array (siehe [[#Form_der_Linien|Hinweise]])||&#039;lines&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-uaxis&#039;&#039;&#039;||Name der Achse, die verwendet werden soll (&#039;primary&#039; = links, oder &#039;secondary&#039; = rechts), oder ein Array||&#039;primary&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-legend&#039;&#039;&#039;||Bezeichnung des Graphen (wird in Legende und am Cursor angezeigt), oder ein Array||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-minvalue&#039;&#039;&#039;||Minimaler Wert, der auf der linken Y-Achse (&#039;primary&#039;) angezeigt werden soll. &#039;auto&#039; = automatische Berechnung||&#039;10&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-maxvalue&#039;&#039;&#039;||Maximaler Wert, der auf der linken Y-Achse (&#039;primary&#039;) angezeigt werden soll. &#039;auto&#039; = automatische Berechnung||&#039;30&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-minvalue_sec&#039;&#039;&#039;||Minimaler Wert, der auf der rechten Y-Achse (&#039;secondary&#039;) angezeigt werden soll. &#039;auto&#039; = automatische Berechnung||&#039;auto&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-maxvalue_sec&#039;&#039;&#039;||Maximaler Wert, der auf der rechten Y-Achse (&#039;secondary&#039;) angezeigt werden soll. &#039;auto&#039; = automatische Berechnung||&#039;auto&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-xticks&#039;&#039;&#039;||Abstand zwischen den vertikalen Hilfslinien (bezogen auf die X-Achse) in Minuten. &#039;auto&#039; = automatische Berechnung||&#039;auto&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yticks&#039;&#039;&#039;||Abstand zwischen den horizontalen Hilfslinien (bezogen auf die linke Y-Achse). Kann auch ein Array mit Werte-Paaren enthalten, um die Linien mit Text zu beschriften.||&#039;auto&#039;||data-yticks=&#039;[[0,&amp;quot;open&amp;quot;],[1,&amp;quot;closed&amp;quot;]]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yticks_format&#039;&#039;&#039;||Dient zur Formatierung der Ticks der Y-Achse. Die Formatierung geschieht über Platzhalter, Trenner und einen beliebigen durch &#039; &#039; getrennten Text. Als Platzhalter dient ein oder mehrere &#039;#&#039;, als Trenner können &#039;.&#039;, &#039;,&#039; und &#039;:&#039; verwendet werden. Ist ein Trenner enthalten (z.B. &#039;#.##&#039;) dann bedeutet das in dem Beispiel, dass der Ytick mit 2 Nachkommastellen versehen wird und vorne Platz für eine Stelle vor dem Komma vorgehalten wird (führende Nullen werden nicht dargestellt, aber de Platz wird reserviert so dass das ganze rechtsbündig immer passt). Ist kein Trenner vorhanden, dann wird der Ytick auf die Summe der Platzhalter mit einer festen Gesamtbreite gesetzt (#### würde also bedeuten, dass immer 4 Stellen (ohne Trenner) verwendet werden. aus 0.4 würde 0.400 aus 10.437 würde 10.44). Als Trenner kann man z.B. für Zeiten auch einen &#039;:&#039; verwenden und dadurch auch so etwas wie &amp;quot;12:00 Uhr&amp;quot; realisieren (in dem Beispiel wäre data-yticks_format=&amp;quot;##:## Uhr&amp;quot; und kein data-yunit oder data-yticks=&amp;quot;##:##&amp;quot; und data-yunit=&amp;quot;Uhr&amp;quot;).||||data-yticks_format=&amp;quot;#.##&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yticks_sec&#039;&#039;&#039;||Abstand zwischen den horizontalen Hilfslinien (bezogen auf die rechte Y-Achse). Kann auch ein Array mit Werte-Paaren enthalten, um die Linien mit Text zu beschriften.||&#039;auto&#039;||data-yticks=&#039;[[0,&amp;quot;open&amp;quot;],[1,&amp;quot;closed&amp;quot;]]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yticks_format_sec&#039;&#039;&#039;||Dient zur Formatierung der Ticks der Y-Achse. Die Formatierung geschieht über Platzhalter, Trenner und einen beliebigen durch &#039; &#039; getrennten Text. Als Platzhalter dient ein oder mehrere &#039;#&#039;, als Trenner können &#039;.&#039;, &#039;,&#039; und &#039;:&#039; verwendet werden. Ist ein Trenner enthalten (z.B. &#039;#.##&#039;) dann bedeutet das in dem Beispiel, dass der Ytick mit 2 Nachkommastellen versehen wird und vorne Platz für eine Stelle vor dem Komma vorgehalten wird (führende Nullen werden nicht dargestellt, aber de Platz wird reserviert so dass das ganze rechtsbündig immer passt). Ist kein Trenner vorhanden, dann wird der Ytick auf die Summe der Platzhalter mit einer festen Gesamtbreite gesetzt (#### würde also bedeuten, dass immer 4 Stellen (ohne Trenner) verwendet werden. aus 0.4 würde 0.400 aus 10.437 würde 10.44). Als Trenner kann man z.B. für Zeiten auch einen &#039;:&#039; verwenden und dadurch auch so etwas wie &amp;quot;12:00 Uhr&amp;quot; realisieren (in dem Beispiel wäre data-yticks_format=&amp;quot;##:## Uhr&amp;quot; und kein data-yunit oder data-yticks=&amp;quot;##:##&amp;quot; und data-yunit=&amp;quot;Uhr&amp;quot;).||||data-yticks_format_sec=&amp;quot;#.##&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yticks_prio&#039;&#039;&#039;||Legt fest, ob die horizontalen Hilfslinien der linken (primary) oder der rechten (secondary) Y-Achse zugeordnet werden sollen||||data-yticks_prio=&#039;secondary&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-ytype&#039;&#039;&#039;||Legt fest, ob die primäre y Achse logarithmisch sein soll (wert &amp;quot;log&amp;quot;)||||data-ytype=&amp;quot;log&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-ytype_sec&#039;&#039;&#039;||Legt fest, ob die sekundäre y Achse logarithmisch sein soll (wert &amp;quot;log&amp;quot;)||||data-ytype_sec=&amp;quot;log&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-y_margin&#039;&#039;&#039;|||Gibt die Möglichkeit, Abstände zwischen den Graphen und dem oberen Rand des Plots zu definieren (Einheit Pixel). Falls der Wert skalar ist, werden oben und unten die gleichen Abstände eingehalten. Falls ein 2D Array angegeben wird, können die Werte unten (erster Wert im Array) und oben (zweiter Wert im Array) getrennt festgelegt werden||&amp;quot;0&amp;quot;|||data-y_margin=&#039;[&amp;quot;10&amp;quot;,&amp;quot;20&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-y_margin_sec&#039;&#039;&#039;|||Gibt die Möglichkeit, Abstände zwischen den Graphen und dem oberen Rand des Plots zu definieren (Einheit Pixel). Falls der Wert skalar ist, werden oben und unten die gleichen Abstände eingehalten. Falls ein 2D Array angegeben wird, können die Werte unten (erster Wert im Array) und oben (zweiter Wert im Array) getrennt festgelegt werden||&amp;quot;0&amp;quot;|||data-y_margin=&#039;[&amp;quot;10&amp;quot;,&amp;quot;20&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-daysago_start&#039;&#039;&#039;||Anzahl der vergangenen Tage, wo das Diagramm beginnen soll. &#039;0&#039; = Beginn heute 0:00 Uhr. (siehe [[#Zeitstrahl_.2F_Start_.26_Ende_auf_der_X-Achse|Hinweise]])||&#039;0&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-daysago_end&#039;&#039;&#039;||Anzahl der vergangenen Tage, wo das Diagramm enden soll. &#039;-1&#039; = Ende heute 24:00 Uhr. (siehe [[#Zeitstrahl_.2F_Start_.26_Ende_auf_der_X-Achse|Hinweise]])||&#039;-1&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-xticks_round&#039;&#039;&#039;||Wenn vorhanden und entweder &#039;h&#039;, &#039;d&#039;, &#039;w&#039;, wird auf Stunde, Tag oder Woche bei den xticks gerundet (also die Tickmarks und die Gridlines bei den entsprechend gerundeten Zeiten gesetzt). Es kann auch &#039;auto&#039; angegeben werden, um eine autmoatische Rundung durchzuführen||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-nofulldays&#039;&#039;&#039;||Aktiviert/deaktiviert die Rundung der X-Achse auf ganze Tage. Binärwert (&#039;true&#039; oder &#039;false&#039;)||&#039;false&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-timeformat&#039;&#039;&#039;||Zeitformat für die Anzeige an der X-Achse (siehe [[#Zeitformat_der_X-Achse|Hinweise]])||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-timeranges&#039;&#039;&#039;||Hierdurch können vordefinierte Zeiträume für die X-Achse festgelegt werden, die dann durch eine pulldown menu (neuer Button oben neben dem &amp;quot;-&amp;quot; Button) direkt ausgewählt werden können. Der Parameter ist ein Array aus Array Einträgen, welche jeweils [&amp;lt;Name&amp;gt;,&amp;lt;daysago_start&amp;gt;,&amp;lt;daysago_end&amp;gt;] enthalten)||&lt;br /&gt;
||data-timeranges=&#039;[&amp;lt;br&amp;gt;&lt;br /&gt;
[&amp;quot;Actual Year&amp;quot;,&amp;quot;0Y&amp;quot;,&amp;quot;-1Y&amp;quot;],&amp;lt;br&amp;gt;&lt;br /&gt;
[&amp;quot;Last Year&amp;quot;,&amp;quot;1Y&amp;quot;,&amp;quot;0Y&amp;quot;],&amp;lt;br&amp;gt;&lt;br /&gt;
[&amp;quot;Actual Month&amp;quot;,&amp;quot;0M&amp;quot;,&amp;quot;-1M&amp;quot;],&amp;lt;br&amp;gt;&lt;br /&gt;
[&amp;quot;Last Month&amp;quot;,&amp;quot;1M&amp;quot;,&amp;quot;0M&amp;quot;],&amp;lt;br&amp;gt;&lt;br /&gt;
[&amp;quot;Actual Week&amp;quot;,&amp;quot;0W&amp;quot;,&amp;quot;-1W&amp;quot;],&amp;lt;br&amp;gt;&lt;br /&gt;
[&amp;quot;Last Week&amp;quot;,&amp;quot;1W&amp;quot;,&amp;quot;0W&amp;quot;],&amp;lt;br&amp;gt;&lt;br /&gt;
[&amp;quot;Today&amp;quot;,&amp;quot;0D&amp;quot;,&amp;quot;-1D&amp;quot;],&amp;lt;br&amp;gt;&lt;br /&gt;
[&amp;quot;Yesterday&amp;quot;,&amp;quot;1D&amp;quot;,&amp;quot;0D&amp;quot;]&amp;lt;br&amp;gt;&lt;br /&gt;
]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-ytext&#039;&#039;&#039;||Text, der neben der linken Y-Achse angezeigt wird||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-ytext_sec&#039;&#039;&#039;||Text, der neben der rechten Y-Achse angezeigt wird||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yunit&#039;&#039;&#039;||Einheit, die an der linken Y-Achse angezeigt wird||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yunit_sec&#039;&#039;&#039;||Einheit, die an der rechten Y-Achse angezeigt wird||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-show_both_axes&#039;&#039;&#039;||Legt fest ob beide Y-Achsen Linien gezeichnet werden sollen||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-crosshair&#039;&#039;&#039;||Aktiviert/deaktiviert den Fadenkreuz-Cursor. Binärwert (&#039;true&#039; oder &#039;false&#039;)||&#039;false&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-cursorgroup&#039;&#039;&#039;||Zahl zur Gruppierung der Werte am Fadenkreuz-Cursor ([[#Fadenkreuz-Cursor|Hinweise]])||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-scrollgroup&#039;&#039;&#039;||Zahl zur Gruppierung der Graphen beim Bewegen und Zoomen. Alle Linien mit der selben Zahl werden miteinander gekoppelt und bewegen sich gemeinsam.||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-showlegend&#039;&#039;&#039;||Aktiviert/deaktiviert die Anzeige der Legene. Binärwert (&#039;true&#039; oder &#039;false&#039;)||&#039;false&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-legendpos&#039;&#039;&#039;||Array von zwei Werten, die die horizontale und vertikale Position der Legende festlegen ([[#Legende|Hinweise]])||&#039;[&amp;quot;top&amp;quot;,&amp;quot;right&amp;quot;]&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-legend_horiz&#039;&#039;&#039;||legt fest, dass die Legendeneinträge horizontal angeordnet sind (anstatt vertikal wie im default Fall)||false||data-legend_horiz=&amp;quot;true&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-width&#039;&#039;&#039;||Breite des Diagramms (in % oder px)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-height&#039;&#039;&#039;||Höhe des Diagramms (in % oder px)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-graphsshown&#039;&#039;&#039;||Aktiviert/deaktiviert die initiale Anzeige von Graphen. Binärwert (&#039;true&#039; oder &#039;false&#039;). Array, wenn mehrere Linien angezeigt werden sollen.||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-ddd&#039;&#039;&#039;||Einstellung für die 3D-Drehung ([[#3-dimensionale_Drehung|Hinweise]])||||data-ddd=&#039;[&amp;quot;40&amp;quot;,&amp;quot;60&amp;quot;,&amp;quot;0&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-dddspace&#039;&#039;&#039;||Abstand zwischen zwei Graphen, wenn die 3D-Anzeige aktiviert wurde (px)||&#039;15&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-dddwidth&#039;&#039;&#039;||Breite, bzw. Tiefe der Graphen, wenn diese 3-dimensional angezeigt werden (px)||&#039;10&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-title&#039;&#039;&#039;||Titel, der über dem Diagramm angezeigt werden soll. Der Inhalt kann auch dynamisch erzeugt werden ([[#Diagrammtitel|Hinweise]])||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-title_class&#039;&#039;&#039;||Klassenname für die Formatierung des Titels. Die Eigenschaften müssen dann entsprechend in einem CSS File angegeben werden (z.B. in fhem-tablet-ui-user.css)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-prefetch&#039;&#039;&#039;||Legt fest, ob zusätzliche Daten rechts und links des Plots im Hintergrund vom Server geholt werden sollen||false||data-prefetch=&amp;quot;true&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
Einige Parameter (style, maxvalue, minvalue, maxvalue_sec, minvalue_sec) können auch aus Readings dynamisch gesetzt werden wenn &amp;quot;&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;&amp;quot; als Parameter gesetzt wird. Damit kann man z.B. in FHEM über notify etc. die Linientypen dynamisch anpassen (z.B. wenn der Wert eines Devices in einem bestimmten Bereich liegt, ändert sich die Farbe des Graphen).&lt;br /&gt;
&lt;br /&gt;
==CSS Klassen==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Klasse!!Beschreibung&lt;br /&gt;
{{FTUI Klasse|fullsize}}{{FTUI Klasse|noticks}}{{FTUI Klasse|nobuttons}}{{FTUI Klasse|small}}{{FTUI Klasse|normal}}{{FTUI Klasse|big}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Folgende Widget-spezifsche Klassen können zusätzlich in einer eigenen CSS-Datei definiert werden:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Klasse&lt;br /&gt;
!Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;chart-background&#039;&#039;&#039;||Hintergrundfarbe des Diagramms&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;buttons&#039;&#039;&#039;||Größe und Farbe der Buttons&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;text.axes&#039;&#039;&#039;||Generelle Schriftart und Farbe der Achsen&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;gridlines&#039;&#039;&#039;||Generelle Farbe und Größe der Gitternetzlinien&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;xaxis&#039;&#039;&#039;||Schriftart, Größe und Farbe der X-Achse&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;yaxis&#039;&#039;&#039;||Schriftart, Größe und Farbe der Y-Achse&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;xticks&#039;&#039;&#039;||Schriftart, Größe und Farbe der X-Achse (Zwischenlinien)&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;yticks&#039;&#039;&#039;||Schriftart, Größe und Farbe der Y-Achse (Zwischenlinien)&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;crosshair&#039;&#039;&#039;||Schriftart, Größe und Vordergrund/Hintergrundfarbe der Momentanwerte am Fadenkreuzcursor&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;caption&#039;&#039;&#039;||Schriftart, Größe und Farbe der Text-Buttons für Legende und Cursor&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;legend&#039;&#039;&#039;||Schriftart, Größe und Farbe der Legende&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Standardwerte sind in der Datei &amp;lt;code&amp;gt;css/ftui_chart.css&amp;lt;/code&amp;gt; zu finden.&lt;br /&gt;
&lt;br /&gt;
==Datenquellen==&lt;br /&gt;
Beim Chart-Widget können die gleichen Datenquellen genutzt werden, die auch für SVG-Plots verwendet werden können:&lt;br /&gt;
# [[FileLog]]: Verlaufsdaten einer Textdatei entnehmen&lt;br /&gt;
# [[DbLog]]: Verlaufsdaten einer Datenbank entnehmen&lt;br /&gt;
# [[LogProxy]]: Daten dynamisch berechnet&lt;br /&gt;
&lt;br /&gt;
===FileLog===&lt;br /&gt;
Um [[FileLog]] zu nutzen, wird als &#039;&#039;&#039;data-logdevice&#039;&#039;&#039; das FHEM-Device für das FileLog angegeben. In der Regel entstehen hier im Laufe der Zeit mehrere Log-Dateien. Name und Anzahl sind von der Definition abhängig - meist wird jeden Monat oder jedes Jahr eine neue Datei angelegt. Die gewünschte Datei kann mit &#039;&#039;&#039;data-logfile&#039;&#039;&#039; ausgewählt werden. Möchte man stets die aktuelle Datei verwenden (macht vor allem dann Sinn, wenn man die neusten Daten anzeigen will), kann das Attribut weggelassen, oder explizit &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt; eingetragen werden. Zuletzt wird &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; benötigt, um die gewünschten Daten zu in der Logdatei zu identifizieren. Hier wird die Spalte, in der die Daten stehen, gefolgt von Doppelpunkt und Readingname angegeben.&lt;br /&gt;
&lt;br /&gt;
Für ein Heizungsthermostat von Homematic mit dem Namen &#039;&#039;DG.wz.HZ.Heizungsventil&#039;&#039; ergibt sich somit beispielhaft folgende Definition, um gemessene Temperatur, Sollwert und Ventilstellung im Diagramm darzustellen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;DG.wz.HZ.Heizungsventil&amp;quot;&lt;br /&gt;
	 data-logdevice=&amp;quot;FileLog_DG.wz.HZ.Heizungsventil&amp;quot;&lt;br /&gt;
	 data-logfile=&amp;quot;-&amp;quot;&lt;br /&gt;
	 data-columnspec=&#039;[&amp;quot;4:measured-temp&amp;quot;,&amp;quot;4:desired-temp&amp;quot;,&amp;quot;4:actuator&amp;quot;]&#039;&lt;br /&gt;
	 ...&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollen Daten von unterschiedlichen Geräten in einem Diagramm angezeigt werden, muss &#039;&#039;&#039;data-logdevice&#039;&#039;&#039; als Array nach dem Schema &amp;lt;code&amp;gt;data-logdevice=&#039;[&amp;quot;&amp;lt;Logdatei_1&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Logdatei_2&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Logdatei_3&amp;gt;&amp;quot;]&#039;&amp;lt;/code&amp;gt; definiert werden. Für jeden Eintrag in &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; muss es auch den passenden Eintrag in &#039;&#039;&#039;data-logdevice&#039;&#039;&#039; geben (auch die Reihenfolge ist relevant).&lt;br /&gt;
&lt;br /&gt;
===DbLog===&lt;br /&gt;
Um die Daten aus [[DbLog]] anzeigen zu können, werden die gleichen Attribute verwendet und mit für die Datenbank angepassten Werten beschrieben. Bei &#039;&#039;&#039;data-logdevice&#039;&#039;&#039; das FHEM-Device für die Datenbank angegeben. Im nachfolgenden Beispiel heißt diese &amp;lt;code&amp;gt;logdb&amp;lt;/code&amp;gt; und besitzt wie üblich zwei Tabellen: &amp;lt;code&amp;gt;current&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;history&amp;lt;/code&amp;gt; (der zeitliche Verlauf liegt in letzterer). Der Tabellenname wird bei &#039;&#039;&#039;data-logfile&#039;&#039;&#039; eingetragen. Da die Daten in der Datenbank etwas anders abgelegt werden, muss auch &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; entsprechend angepasst werden. Statt der Spalte wird hier das FHEM-Device, gefolgt von Doppelpunkt und Readingname angegeben.&lt;br /&gt;
&lt;br /&gt;
Für das oben beschriebene Homematic-Heizungsthermostat ergibt sich dann folgende Definition, um die gleichen Daten aus einer Datenbank, statt einem LogFile zu lesen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;DG.wz.HZ.Heizungsventil&amp;quot;&lt;br /&gt;
	 data-logdevice=&amp;quot;logdb&amp;quot;&lt;br /&gt;
	 data-logfile=&amp;quot;HISTORY&amp;quot;&lt;br /&gt;
	 data-columnspec=&#039;[&amp;quot;DG.wz.HZ.Heizungsventil:measured-temp&amp;quot;,&amp;quot;DG.wz.HZ.Heizungsventil:desired-temp&amp;quot;,&amp;quot;DG.wz.HZ.Heizungsventil:actuator&amp;quot;]&#039;&lt;br /&gt;
	 ...&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die Anzeige von unterschiedlichen Geräten in einem Diagramm, muss nur &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; entsprechend angepasst werden, solange sich alle Daten in der Datenbank befinden.&lt;br /&gt;
&lt;br /&gt;
===LogProxy===&lt;br /&gt;
Um die Daten mittels [[LogProxy]] berechnen und anzeigen zu können, muss in FHEM ein LogProxy-Device definiert sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define myLogProxy logProxy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Einstellungen am LogProxy sind nicht nötig, die bloße Existenz reicht.&lt;br /&gt;
&lt;br /&gt;
Bei &#039;&#039;&#039;data-logdevice&#039;&#039;&#039; wird das FHEM-Device für den LogProxy angegeben. Im nachfolgenden Beispiel heißt dieses &amp;lt;code&amp;gt;myLogProxy&amp;lt;/code&amp;gt;. Das Attribut &#039;&#039;&#039;data-logfile&#039;&#039;&#039; wird für LogProxy nicht benötigt. Befinden sich nur LogProxy-Werte im Diagramm kann das Attribut komplett entfallen. Sollen weitere Werte angezeigt werden, bleibt die Definition im Array einfach leer.&lt;br /&gt;
&lt;br /&gt;
Im Attribut &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; wird eine Formel angegeben, wie die Werte berechnet werden sollen. Hier können die Formeln 1:1 von einem eventuell vorhandenen SVG-Plot übernommen werden. &#039;&#039;&#039;Dabei gibt es jedoch folgendes zu beachten:&#039;&#039;&#039; Befindet sich die Formel in einem Array, dürfen die Formeln keine Anführungszeichen (&amp;lt;code&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;) beinhalten. Stattdessen müssen sie als escapter Ascii-Code (&amp;lt;code&amp;gt;\\x22&amp;lt;/code&amp;gt;) eingefügt werden.&lt;br /&gt;
&lt;br /&gt;
Das nachfolgende Beispiel zeigt, wie Vorhersagewerte aus einem FHEM-Device vom Typ Proplanta (Name hier &amp;lt;code&amp;gt;AU.xx.WE.Proplanta&amp;lt;/code&amp;gt;) angezeigt werden können.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;AU.xx.WE.Proplanta&amp;quot;&lt;br /&gt;
	 data-logdevice=&#039;[&lt;br /&gt;
						&amp;quot;myLogProxy&amp;quot;,&lt;br /&gt;
						&amp;quot;myLogProxy&amp;quot;,&lt;br /&gt;
						&amp;quot;myLogProxy&amp;quot;,&lt;br /&gt;
						&amp;quot;myLogProxy&amp;quot;&lt;br /&gt;
					]&#039;&lt;br /&gt;
	 data-columnspec=&#039;[&lt;br /&gt;
						&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22temp_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
						&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22rain_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
						&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22chOfRain_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
						&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22cloud_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;&lt;br /&gt;
					]&#039;&lt;br /&gt;
	 ...&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Auch alle anderen Funktionen, die [[LogProxy]] bietet, können hier angewendet werden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Hinweise==&lt;br /&gt;
===Aktualisierung des Charts===&lt;br /&gt;
Damit der Refresh des Charts funktioniert, muss auch ein Device angegeben werden, der das Refresh triggert. Das Diagramm wird immer dann aktualisiert, wenn sich der Inhalt von &#039;&#039;&#039;data-get&#039;&#039;&#039; ändert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	data-device=&amp;quot;WohnzimmerHeizung&amp;quot;&lt;br /&gt;
	data-logdevice=&amp;quot;FileLog_WohnzimmerHeizung&amp;quot;&lt;br /&gt;
	...&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Aussehen der Linien===&lt;br /&gt;
Mit dem Attribut &#039;&#039;&#039;data-style&#039;&#039;&#039; kann das Aussehen der Linien des jeweiligen Graphen verändert werden. Hierfür können die Standard-FHEM-Styles verwendet werden. Dazu wird das Attribut mit &amp;lt;code&amp;gt;SVGplot&amp;lt;/code&amp;gt;, gefolgt von einem Leerzeichen und der gewünschten Farbe/Stil befüllt. Es existieren jedoch auch noch weitere, an FTUI angepasste Styles, zu finden in der CSS-Datei &amp;lt;code&amp;gt;css/ftui_chart.css&amp;lt;/code&amp;gt;. Um diese zu verwenden, wird das Attribut mit &amp;lt;code&amp;gt;ftui&amp;lt;/code&amp;gt;, gefolgt von einem Leerzeichen und der gewünschten Farbe/Stil befüllt. Eigene Styles können zum Beispiel in der Datei &amp;lt;code&amp;gt;css/fhem-table-ui-user.css&amp;lt;/code&amp;gt; definiert werden.&lt;br /&gt;
&lt;br /&gt;
Folgende Übersicht zeigt die im Standard verfügbaren &#039;&#039;&#039;Farben&#039;&#039;&#039;, alle Abbildungen sind mit im FTUI-Style entstanden:&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f0.png|thumb|none|150px|Farbe &amp;quot;l0&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f1.png|thumb|none|150px|Farbe &amp;quot;l1&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f2.png|thumb|none|150px|Farbe &amp;quot;l2&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f3.png|thumb|none|150px|Farbe &amp;quot;l3&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f4.png|thumb|none|150px|Farbe &amp;quot;l4&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f5.png|thumb|none|150px|Farbe &amp;quot;l5&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f6.png|thumb|none|150px|Farbe &amp;quot;l6&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Angabe zur Farbe kann dann mit der Linienart kombiniert werden. Dazu stehen folgende &#039;&#039;&#039;Stile&#039;&#039;&#039; zur Verfügung:&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-2D-normal.png|thumb|none|225px|Darstellung in 2D: Stil &amp;quot;normal&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-2D-dot.png|thumb|none|225px|Darstellung in 2D: Stil &amp;quot;dot&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-2D-dash.png|thumb|none|225px|Darstellung in 2D: Stil &amp;quot;dash&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-2D-fill.png|thumb|none|225px|Darstellung in 2D: Stil &amp;quot;fill&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-2D-sym.png|thumb|none|225px|Darstellung in 2D: Stil &amp;quot;sym&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-3D-normal.png|thumb|none|225px|Darstellung in 3D: Stil &amp;quot;normal&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-3D-dot.png|thumb|none|225px|Darstellung in 3D: Stil &amp;quot;dot&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-3D-dash.png|thumb|none|225px|Darstellung in 3D: Stil &amp;quot;dash&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-3D-fill.png|thumb|none|225px|Darstellung in 3D: Stil &amp;quot;fill&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-3D-sym.png|thumb|none|225px|Darstellung in 3D: Stil &amp;quot;sym&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Farbe und Stil werden kombiniert (zusammengeschrieben) beim Attribut &#039;&#039;&#039;data-style&#039;&#039;&#039; angegeben, sodass sich beispielsweise für eine graue Punktlinie folgendes ergibt: &amp;lt;code&amp;gt;data-style=&amp;quot;ftui l1dot&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
Um die Darstellung als normale Linie zu erhalten, darf im Gegensatz zu den anderen Linienformen der Stil &amp;lt;code&amp;gt;normal&amp;lt;/code&amp;gt; nicht angegeben werden. Für eine einfache graue Linie ist also die Angabe &amp;lt;code&amp;gt;data-style=&amp;quot;ftui l1&amp;quot;&amp;lt;/code&amp;gt; korrekt, wohingegen &amp;lt;code&amp;gt;data-style=&amp;quot;ftui l1normal&amp;quot;&amp;lt;/code&amp;gt; zu einer fehlerhaften Anzeige führt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Der Stil &#039;&#039;sym&#039;&#039; ist speziell dafür geeignet, Symbole statt Linien zu zeichnen. Dazu kann beim Attribut &#039;&#039;&#039;data-ptype&#039;&#039;&#039; als Linienform ein beliebiges Font-Awsome-, oder Open Automation-Icon angegeben werden. Alle in diesem Abschnitt enthaltenen Abbildungen sind mit &amp;lt;code&amp;gt;data-ptype=&amp;quot;lines&amp;quot;&amp;lt;/code&amp;gt; entstanden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Übergänge mit datenabhängigen Grenzen:&#039;&#039;&#039; Plotstile (data-style) können auch direkt als Gradienten auf Basis von Plot-Datenwerten definiert werden. Dazu muss der Plotstil als Array angegeben werden. Der erste Wert des Arrays gibt an, ob nur die Linie gezeichnet werden soll (Zahl angeben, die die Dicke der Linie definiert) oder gefüllt (&amp;quot;fill&amp;quot; eintragen). Alle danach folgenden Array Elemente sind beliebig viele Stopp Punkte für die Farbübergänge, welche wiederum aus Arrays mit 3 Parametern bestehen. Für jeden Stopp Punkt werden der Datenwert, die Farbe und die Durchsichtigkeit gesetzt. Hierdurch lassen sich z.B. Einfärbungen setzen, die für Temperaturplots immer negative Werte blau einfärben und positive Werte rot. Zwischen den Stop Punkten wird die Farbe interpoliert, also ein weicher Übergang generiert. Will man harte Übergänge muss man Zwei Stopp Punkte mit unterschiedlichen Farbwerten aber dem gleichen Datenwert erzeugen.&amp;lt;br&amp;gt;&lt;br /&gt;
Beispiel 1 für einen weichen Gradienten, der bei 0 von blau nach rot übergeht, bei diesem Übergang durchsichtig ist und von dort nach negativen bzw. positiven Werden immer deckender wird:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;data-style=&#039;[&amp;quot;fill&amp;quot;,[&amp;quot;-20&amp;quot;,&amp;quot;#0000ff&amp;quot;,&amp;quot;0.7&amp;quot;],[&amp;quot;0&amp;quot;,&amp;quot;#0000ff&amp;quot;,&amp;quot;0&amp;quot;],[&amp;quot;0&amp;quot;,&amp;quot;#ff0000&amp;quot;,&amp;quot;0&amp;quot;],[&amp;quot;302&amp;quot;,&amp;quot;#ff0000&amp;quot;,&amp;quot;0.7&amp;quot;]]&#039;&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Beispiel 2 mit einem harten Übergang von blau nach rot bei 0:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;data-style=&#039;[&amp;quot;fill&amp;quot;,[&amp;quot;-20&amp;quot;,&amp;quot;#0000ff&amp;quot;,&amp;quot;0.7&amp;quot;],[&amp;quot;0&amp;quot;,&amp;quot;#0000ff&amp;quot;,&amp;quot;0.7&amp;quot;],[&amp;quot;0&amp;quot;,&amp;quot;#ff0000&amp;quot;,&amp;quot;0.7&amp;quot;],[&amp;quot;50&amp;quot;,&amp;quot;#ff0000&amp;quot;,&amp;quot;0.7&amp;quot;]]&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
Es gibt auch die Möglichkeit den Bereich zwischen zwei Graphen einzufärben. Dazu muss ein Wert in Columnspec als Array angegeben werden. Ist dies der Fall, dann wird der zweite Graph umgekehrt an den ersten angehängt.&amp;lt;br&amp;gt;&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
data-columnspec=&#039;[&lt;br /&gt;
    &amp;quot;Func:logProxy_proplanta2Plot(\\x22AgroWeather\\x22,\\x22weatherIcon\\x22,$from,$to,12)&amp;quot;,&lt;br /&gt;
    [&lt;br /&gt;
        &amp;quot;Func:logProxy_proplanta2Plot(\\x22AgroWeather\\x22,\\x22tempMax\\x22,$from,$to,12)&amp;quot;,&lt;br /&gt;
        &amp;quot;Func:logProxy_proplanta2Plot(\\x22AgroWeather\\x22,\\x22tempMin\\x22,$from,$to,12)&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;Func:logProxy_proplanta2Plot(\\x22AgroWeather\\x22,\\x22rain\\x22,$from,$to,0,\\x22day\\x22)&amp;quot;&lt;br /&gt;
]&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:FTUI Widget Chart DynamicStyles.png|thumb|none|225px|dynamischer Übergang]]&lt;br /&gt;
&lt;br /&gt;
===Form der Linien===&lt;br /&gt;
Das Attribut &#039;&#039;&#039;data-ptype&#039;&#039;&#039; beeinflusst die Form der Linien. Hier sind folgende Werte möglich:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;lines&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;steps&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;fsteps&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;histeps&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bars&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ibars&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;cubic&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;quadratic&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;quadraticSmooth&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusätzlich ist es möglich, Symbole anzeigen zu lassen. Unterstützt werden Font-Awesome (&#039;fa-...&#039;), Open Automation (&#039;oa-...&#039;) und FHEM-Symbole (&#039;fs-...&#039;)). Damit die Symbole korrekt angezeigt werden, muss  im Attribut &#039;&#039;&#039;data-style&#039;&#039;&#039; der Stil &amp;lt;code&amp;gt;sym&amp;lt;/code&amp;gt; gewählt werden, da sonst nur Punkte, statt der Symbole gezeichnet werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;DG.wz.HZ.Heizungsventil&amp;quot;&lt;br /&gt;
	 data-logdevice=&amp;quot;FileLog_DG.wz.HZ.Heizungsventil&amp;quot;&lt;br /&gt;
	 ...&lt;br /&gt;
	 data-style=&amp;quot;ftui l1sym&amp;quot;&lt;br /&gt;
	 data-ptype=&amp;quot;fa-cog&amp;quot;&lt;br /&gt;
	 ...&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Größe der Symbole ist in der Datei &amp;lt;code&amp;gt;css/ftui_chart.css&amp;lt;/code&amp;gt; auf 12px festgelegt. Dieser Wert kann in einer eigenen CSS-Datei durch Anpassung von &amp;lt;code&amp;gt;stroke-width&amp;lt;/code&amp;gt; überschrieben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.ftui.l0sym		{ stroke:#DDA400; stroke-width:12px; fill:none; }&lt;br /&gt;
.ftui.l1sym		{ stroke:#BBBBBB; stroke-width:12px; fill:none; }&lt;br /&gt;
.ftui.l2sym		{ stroke:#CC0000; stroke-width:12px; fill:none; }&lt;br /&gt;
.ftui.l3sym		{ stroke:#CCCC00; stroke-width:12px; fill:none; }&lt;br /&gt;
.ftui.l4sym		{ stroke:#33CC33; stroke-width:12px; fill:none; }&lt;br /&gt;
.ftui.l5sym		{ stroke:#33CCCC; stroke-width:12px; fill:none; }&lt;br /&gt;
.ftui.l6sym		{ stroke:#3333CC; stroke-width:12px; fill:none; }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;data-ptype&#039;&#039;&#039; kann auch Inhalt im Format &amp;lt;code&amp;gt;&#039;icon:1&#039;&amp;lt;/code&amp;gt; verarbeiten. Dann muss der zugehörige Wert in &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; den Pfad zu einem Icon (z.B. für Wettervorhersagen) beinhalten. Der Y-Wert wird dann vom ersten Graphen übernommen. Weitere Ausführungen hierzu im Beispiel [[#Darstellung der Wetter Icons im Diagramm]]. &lt;br /&gt;
&lt;br /&gt;
===Stapeln von Linien===&lt;br /&gt;
Über &#039;&#039;&#039;data-ptype&#039;&#039;&#039; kann zusätzlich festgelegt werden, ob Graphen übereinander gestapelt werden sollen. &amp;lt;code&amp;gt;data-ptype=&#039;lines:1&#039;&amp;lt;/code&amp;gt; bedeutet, dass der zugehörige Graph auf den Graph mit der Nummer 1 gestapelt werden soll. So etwas kann z.B. Sinn machen, wenn man den Stromverbrauch einzelner Devices darstellen und zusätzlich sehen will, wie hoch die Summe ist. Beispiel siehe unten.&lt;br /&gt;
&lt;br /&gt;
[[Datei:FTUI Widget Chart Stacked.png]]&lt;br /&gt;
&lt;br /&gt;
===Zeitstrahl / Start &amp;amp; Ende auf der X-Achse===&lt;br /&gt;
Die Attribute &#039;&#039;&#039;data-daysago_start&#039;&#039;&#039; und &#039;&#039;&#039;data-daysago_end&#039;&#039;&#039; dienen der Definition von Anfang und Ende der X-Achse. Im einfachsten Fall wird eine Anzahl an Tagen eingegeben, die sich auf das aktuelle Datum beziehen. Dabei gilt es zu beachten, dass es sich um &#039;&#039;vergangene Tage&#039;&#039; handelt. Das bedeutet, dass Tage in der Vergangenheit als positive Zahl angegeben werden, Tage in der Zukunft hingegen als negative Zahl. Es kann jeweils  auch ein fixes Datum (z.B. &#039;2013-10-23&#039;) angegeben werden. Uhrzeitangaben werden nur berücksichtigt, wenn &#039;&#039;&#039;data-nofulldays=&#039;true&#039; &#039;&#039;&#039; verwendet wird.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Relative Zeitangabe in Stunden&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Zur Ausgabe einer Anzahl an zurückliegenden Stunden bis zum aktuellen Zeitpunkt wird als Startzeitpunkt die Anzahl der Stunden angegeben werden, die angezeigt werden sollen, gefolgt vom Kleinbuchstaben &#039;&#039;&#039;h&#039;&#039;&#039;. Als Endzeitpunkt wird &#039;&#039;&#039;now&#039;&#039;&#039; gewählt.&amp;lt;br /&amp;gt;&lt;br /&gt;
Das nachfolgende Beispiel zeigt die Werte der vergangenen 3 Stunden an:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
data-nofulldays=&amp;quot;true&amp;quot;&lt;br /&gt;
data-daysago_start=&amp;quot;3h&amp;quot;&lt;br /&gt;
data-daysago_end=&amp;quot;now&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fester Zeitbereich des heutigen Tages (Stunden)&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Um ein festes Stundenfenster des heutigen Tages anzuzeigen, werden die absoluten Stundenzahlen mit negativem Vorzeichen, gefolgt vom Großbuchstaben &#039;&#039;&#039;H&#039;&#039;&#039; angegeben. Wird &#039;&#039;&#039;data-daysago_start&#039;&#039;&#039; als positiver Wert angegeben, wird die Anzahl der Stunden von heute 0:00 Uhr subtrahiert (siehe Rechenweg weiter unten).&amp;lt;br /&amp;gt;&lt;br /&gt;
Das Beispiel zeigt den Zeitbereich von heute 5:00 Uhr bis heute 22:00 Uhr:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
data-nofulldays=&amp;quot;true&amp;quot;&lt;br /&gt;
data-daysago_start=&amp;quot;-5H&amp;quot;&lt;br /&gt;
data-daysago_end=&amp;quot;-22H&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fester Zeitbereich Tage-übergreifend&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Die Zeit in Tagen kann als Gleitkommazahl angegeben werden. Damit ist es möglich, Tage und Uhrzeiten zu kombinieren. Die Werte sind dann als Teil eines ganzen Tages, bezogen auf heute 0:00 Uhr zu errechnen und mit &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; als Teiler anzugeben.&amp;lt;br /&amp;gt;&lt;br /&gt;
Das nachfolgende Beispiel zeigt einen Zeitbereich von &#039;&#039;&#039;gestern 15:00 Uhr&#039;&#039;&#039; bis &#039;&#039;&#039;morgen 3:00 Uhr&#039;&#039;&#039;.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
data-nofulldays=&amp;quot;true&amp;quot;&lt;br /&gt;
data-daysago_start=&amp;quot;0.375&amp;quot;&lt;br /&gt;
data-daysago_end=&amp;quot;-1.125&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die nachfolgenden Rechenwege sind die Einheiten nur zur Verdeutlichung angegeben. Die Einheiten werden im Attribut nicht angegeben.&lt;br /&gt;
&lt;br /&gt;
Der Wert für &#039;&#039;&#039;GESTERN&#039;&#039;&#039; wird wie folgt ermittelt:&amp;lt;br /&amp;gt;&lt;br /&gt;
Ausgangspunkt ist heute 0:00 Uhr, gestern 15:00 Uhr liegt also 9 Stunden davor. Diese 9 Stunden sind ein &amp;lt;code&amp;gt;9/24 Tag&amp;lt;/code&amp;gt; und errechnet sich so:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1d / 24h = 0.0416666...d/h&lt;br /&gt;
0.0416d/h * 9h = 0.375d&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Wert für &#039;&#039;&#039;MORGEN&#039;&#039;&#039; wird wie folgt ermittelt:&amp;lt;br /&amp;gt;&lt;br /&gt;
Ausgangspunkt ist wieder heute 0:00 Uhr, morgen 3:00 Uhr liegt dann 27 Stunden dahinter. Der Einfachheit halber werden hier nur die 3 Stunden errechnet und dann ein ganzer Tag addiert:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1d / 24h = 0.0416666...d/h&lt;br /&gt;
0.0416d/h * 3h = 0.125d&lt;br /&gt;
&lt;br /&gt;
0.125d + 1d = 1.125d&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Da das Attribut Tage in der Vergangenheit erwartet, muss für einen Wert in der Zukunft wieder eine negative Zahl angegeben werden.&lt;br /&gt;
&lt;br /&gt;
===Zeitformat der X-Achse===&lt;br /&gt;
Die Zeitanzeige auf der X-Achse kann sehr flexibel eingestellt werden. Dafür stehen verschiedene Platzhalter zur Verfügung, die durch spezielle Zeichen (&amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt; &amp;lt;/code&amp;gt; (Leerzeichen), &amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;,&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;\&amp;lt;/code&amp;gt;) getrennt werden. Alle Zeichen werden trotz Escape-Zeichen (&amp;lt;code&amp;gt;\&amp;lt;/code&amp;gt;) in der Ausgabe angezeigt.&lt;br /&gt;
&lt;br /&gt;
Folgende Platzhalter werden unterstützt:&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;mm&#039;&amp;lt;/code&amp;gt;: Minuten als zweistellige Zahl&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;hh&#039;&amp;lt;/code&amp;gt;: Stunden als zweistellige Zahl&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;dd&#039;&amp;lt;/code&amp;gt;: Tag als zweistellige Zahl (Kalenderdatum)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;MM&#039;&amp;lt;/code&amp;gt;: Monat als zweistellige Zahl (z.B. 02 für Februar)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;MMM&#039;&amp;lt;/code&amp;gt;: Monat als dreistellige Abkürzung (z.B. Dec für Dezember)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;MMMM&#039;&amp;lt;/code&amp;gt;: Langname des Monats (z.B. March)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;ee&#039;&amp;lt;/code&amp;gt;: Wochentag als zweistellige Zahl (z.B. 00 für Sonntag)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;eee&#039;&amp;lt;/code&amp;gt;: Wochentag als dreistellige Abkürzung (z.B. Mon für Montag)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;eeee&#039;&amp;lt;/code&amp;gt;: Langname des Wochentags (z.B. Tuesday)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;yy&#039;&amp;lt;/code&amp;gt;: Jahr als zweistellige Zahl (z.B. 16 für 2016)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;yyyy&#039;&amp;lt;/code&amp;gt;: Jahr als vierstellige Zahl (z.B. 2016)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;LF&#039;&amp;lt;/code&amp;gt;: Fügt einen Zeilenumbruch hinzu&lt;br /&gt;
&lt;br /&gt;
Beispiel: Der String &amp;lt;code&amp;gt;&#039;MMM\LF\yyyy&#039;&amp;lt;/code&amp;gt; zeigt &amp;lt;code&amp;gt;&#039;Jan&#039;&amp;lt;/code&amp;gt; in der ersten, und &amp;lt;code&amp;gt;&#039;2016&#039;&amp;lt;/code&amp;gt; in der zweiten Zeile. &amp;lt;code&amp;gt;&#039;MM.dd 2016&#039;&amp;lt;/code&amp;gt; wird zu &amp;lt;code&amp;gt;&#039;03.05 2016&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Fadenkreuz-Cursor===&lt;br /&gt;
Der Fadenkreuz-Cursor zeigt die Momentanwerte, indem man ihn über die Graphen bewegt. In Desktop-Browsern reicht einfaches Bewegen des Maus. Unter iOS und Android kann der Cursor wird der Cursor durch einfaches Tippen auf die neue Position bewegt.&lt;br /&gt;
&lt;br /&gt;
Mit dem Attribut &#039;&#039;&#039;data-cursorgroup&#039;&#039;&#039; können Graphen gruppiert werden. Am Cursor werden dann die Momentanwerte aller Graphen gleichzeitig angezeigt, die die selbe Zahl besitzen, sobald man die Maus über einen aus der Gruppe bewegt.&lt;br /&gt;
&lt;br /&gt;
===Legende===&lt;br /&gt;
Mit dem Attribut &#039;&#039;&#039;data-legendpos&#039;&#039;&#039; kann die Position der Legende innerhalb des Diagramms festgelegt werden. Die Position wird mit einem Array, bestehend aus zwei Werten im Format &amp;lt;code&amp;gt;&#039;[&amp;quot;&amp;lt;horizontal&amp;gt;&amp;quot;,&amp;quot;&amp;lt;vertikal&amp;gt;&amp;quot;]&#039;&amp;lt;/code&amp;gt; angegeben. Für die horizontale Positionierung sind &amp;lt;code&amp;gt;&#039;left&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&#039;right&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&#039;before&#039;&amp;lt;/code&amp;gt;, und &amp;lt;code&amp;gt;&#039;behind&#039;&amp;lt;/code&amp;gt;, die vertikale Positionierung &amp;lt;code&amp;gt;&#039;top&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&#039;bottom&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&#039;above&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&#039;below&#039;&amp;lt;/code&amp;gt; erlaubt (der Unterschied zwischen &amp;lt;code&amp;gt;&#039;left&#039;&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;&#039;before&#039;&amp;lt;/code&amp;gt; liegt darin, dass im zweiten Fall die Legende nicht in den Zeichenbereich gesetzt wird sondern vor das ganze Chart (entsprechend für &amp;lt;code&amp;gt;&#039;after&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&#039;above&#039;&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;&#039;below&#039;&amp;lt;/code&amp;gt;). Alternativ können auch Zahlen verwendet werden, die die Position in Prozent angeben. Durch verschieben mit der Maus oder durch verschieben mit dem Finger oder Stift auf Touch Devices kann die Legende auch an eine andere Position verschoben werden.&lt;br /&gt;
&lt;br /&gt;
Wenn die Legende eingeblendet ist, kann mittels Klick auf einen Legendeneintrag der zugehörige Graph ein- und ausgeblendet werden.&lt;br /&gt;
&lt;br /&gt;
===3-dimensionale Drehung===&lt;br /&gt;
&#039;&#039;&#039;data-ddd&#039;&#039;&#039; ermöglicht, den Graphen 3-dimensional zu drehen. Als Wert wird ein Array mit den 3 Winkeln für x, y und z erwartet, wobei z selbst bisher nicht unterstützt wird.&lt;br /&gt;
&lt;br /&gt;
Beispiel: &amp;lt;code&amp;gt;data-ddd=&#039;[&amp;quot;40&amp;quot;,&amp;quot;60&amp;quot;,&amp;quot;0&amp;quot;]&#039;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Wenn der 3D Modus aktiv ist (&#039;&#039;&#039;data-ddd&#039;&#039;&#039; gesetzt) sind 2 zusätzliche Parameter verfügbar um das Aussehen der Graphen zu beeinflussen. &#039;&#039;&#039;data-dddspace&#039;&#039;&#039; gibt an, wie viele pixel der Raum zwischen den einzelnen in z-Richtung hintereinander angeordneten Graphen betragen soll.&lt;br /&gt;
&#039;&#039;&#039;data-dddwidth&#039;&#039;&#039; legt fest, wie viele pixel die einzelnen Graphen tief (oder dick) sein sollen.&lt;br /&gt;
&lt;br /&gt;
Wenn das Array angegeben wird, erscheinen zwei zusätzliche Buttons im Diagramm, mit denen die Drehung in X- und Y-Richtung verändert werden kann.&lt;br /&gt;
&lt;br /&gt;
===Diagrammtitel===&lt;br /&gt;
Mit dem Attribut &#039;&#039;&#039;data-title&#039;&#039;&#039; kann dem Diagramm, ähnlich wie in FHEM-SVG-Plots, ein Titel hinzugefügt werden.&lt;br /&gt;
&lt;br /&gt;
Folgende Platzhalter werden unterstützt:&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;min1&#039;&amp;lt;/code&amp;gt;: Minimaler Y-Wert des ersten Graphs&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;max1&#039;&amp;lt;/code&amp;gt;: Maximaler Y-Wert des ersten Graphs&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;avg1&#039;&amp;lt;/code&amp;gt;: Mittlerer Y-Wert des ersten Graphs&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;cnt1&#039;&amp;lt;/code&amp;gt;: Anzahl der dargestellten Einzelwerte im ersten Graph&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;currval1&#039;&amp;lt;/code&amp;gt;: Letzter, bzw. aktuellster Y-Wert des ersten Graphs&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;mindate1&#039;&amp;lt;/code&amp;gt;: Niedrigster Wert auf der X-Achse des ersten Graphs&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;maxdate1&#039;&amp;lt;/code&amp;gt;: Höchster Wert auf der X-Achse vom ersten Graphs&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;currdate1&#039;&amp;lt;/code&amp;gt;: Letzter, bzw. aktuellster Wert auf der X-Achse des ersten Graphs&lt;br /&gt;
&lt;br /&gt;
Durch Einsetzen einer anderen Zahl statt &#039;1&#039; können auch die Werte der anderen Graphen angezeigt werden. Das Weglassen der Zahl bewirkt, dass der jeweils zutreffende Wert automatisch ermittelt wird. Bedeutet: &amp;lt;code&amp;gt;max&amp;lt;/code&amp;gt; führt dazu, dass der höchste Wert aller angezeigter Graphen verwendet wird.&lt;br /&gt;
Zusätzlich ist es möglich durch &amp;quot;$eval(&amp;lt;regexp&amp;gt;)&amp;quot; regular Expressions auszuwerten (also z.B. Berechnungen durchzuführen). In &amp;lt;regexp&amp;gt; können auch &amp;quot;$data()&amp;quot; vorkommen.&lt;br /&gt;
&lt;br /&gt;
Beispiel: &amp;lt;code&amp;gt;data-title=&amp;quot;Klima Wohnzimmer Average: $eval(parseInt($data{avg1}*10)/10)°C / Max: $eval(parseInt($data{max1}*10)/10)°C&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Buttons im Diagramm===&lt;br /&gt;
Es gibt mehrere Buttons, mit denen sich die Anzeige des Diagramms verändern lässt. &amp;lt;code&amp;gt;&amp;lt;-&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;-&amp;gt;&amp;lt;/code&amp;gt; bewegen die Graphen nach links und rechts. &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt; zoomen die Anzeige. &amp;lt;code&amp;gt;legend&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;cursor&amp;lt;/code&amp;gt; schalten die zugehörigen Anzeigen ein und aus. Falls der 3D Modus eingeschaltet ist, gibt es Buttons zum Drehen der Darstellung um die X- und Y-Achse. Falls &amp;lt;code&amp;gt;data-timeranges&amp;lt;/code&amp;gt; gesetzt ist, wird ein Pulldown Menü dargestellt, welches die Auswahl von dort definierten Zeiträumen für die X-Achse erlaubt.&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
===Einfaches Diagramm===&lt;br /&gt;
Das Beispiel zeigt ein einfaches Diagramm mit 4 unterschiedlich formatierten Graphen, Legende und Momentanwerten am Fadenkreuz-Cursor.&lt;br /&gt;
&lt;br /&gt;
[[File:Chart_tabletUI.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	data-logdevice=&#039;[&amp;quot;Log.Garden&amp;quot;,&amp;quot;Log.Garden&amp;quot;,&amp;quot;Log.Garden&amp;quot;,&amp;quot;Log.Predicted&amp;quot;]&#039;&lt;br /&gt;
	data-columnspec=&#039;[&amp;quot;4:Garden.T:15:&amp;quot;,&amp;quot;10:Garden.T:0:delta-h&amp;quot;,&amp;quot;10:Garden.T:0:delta-d&amp;quot;,&amp;quot;4:predicted.*:15:&amp;quot;]&#039;&lt;br /&gt;
	data-style=&#039;[&amp;quot;ftui l0fill&amp;quot;,&amp;quot;ftui l1fill&amp;quot;,&amp;quot;ftui l2&amp;quot;,&amp;quot;ftui l3dot&amp;quot;]&#039;&lt;br /&gt;
	data-ptype=&#039;[&amp;quot;lines&amp;quot;,&amp;quot;histeps&amp;quot;,&amp;quot;histeps&amp;quot;,&amp;quot;cubic&amp;quot;]&#039;&lt;br /&gt;
	data-uaxis=&#039;[&amp;quot;primary&amp;quot;,&amp;quot;secondary&amp;quot;,&amp;quot;secondary&amp;quot;,&amp;quot;primary&amp;quot;]&#039;&lt;br /&gt;
	data-legend=&#039;[&amp;quot;Temperature&amp;quot;,&amp;quot;Rain/hour&amp;quot;,&amp;quot;Rain/day&amp;quot;,&amp;quot;Predicted Temp.&amp;quot;]&#039;&lt;br /&gt;
	data-yunit=&amp;quot;°C&amp;quot;&lt;br /&gt;
	data-ytext=&amp;quot;Temperature&amp;quot;&lt;br /&gt;
	data-minvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	data-maxvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	data-yunit_sec=&amp;quot;mm&amp;quot;&lt;br /&gt;
	data-ytext_sec=&amp;quot;Rain (mm)&amp;quot;&lt;br /&gt;
	data-height=&amp;quot;250&amp;quot;&lt;br /&gt;
	data-yticks=&amp;quot;auto&amp;quot;&lt;br /&gt;
	data-minvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	data-maxvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	data-nofulldays=&amp;quot;true&amp;quot;&lt;br /&gt;
	data-daysago_start=&amp;quot;2013-08-13T00:00:00&amp;quot;&lt;br /&gt;
	data-daysago_end=&amp;quot;2013-08-14T00:00:00&amp;quot;&lt;br /&gt;
	data-cursorgroup=&amp;quot;1&amp;quot;&lt;br /&gt;
	data-scrollgroup=&amp;quot;1&amp;quot;&lt;br /&gt;
	data-xticks=&amp;quot;auto&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===7-Tage-Wettervorhersage mit Proplanta===&lt;br /&gt;
In diesem Beispiel wird gezeigt, wie die Vorhersagewerte von [[PROPLANTA]] in einem Diagramm dargestellt werden können. Da die Werte nicht in einer Datenbank oder einem FileLog vorliegen, müssen sie über [[LogProxy]] verarbeitet werden. Dafür sind einige Vorbereitungen in FHEM nötig.&lt;br /&gt;
&lt;br /&gt;
[[File:FTUI_Widget_Chart-fc-Proplanta.png|941px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.&#039;&#039;&#039; Ein LogProxy-Device muss vorhanden sein:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define myLogProxy logProxy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2.&#039;&#039;&#039; In der Datei &amp;lt;code&amp;gt;99_myUtils.pm&amp;lt;/code&amp;gt; muss folgende Routine hinzugefügt werden, die die Daten bereitstellt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#---------------------------------------&lt;br /&gt;
# Proplanta LogProxy-Funktion&lt;br /&gt;
#---------------------------------------&lt;br /&gt;
sub logProxy_proplanta2Plot($$$$;$$) {&lt;br /&gt;
	my ($device, $fcValue, $from, $to, $fcHour, $expMode) = @_;&lt;br /&gt;
    my $regex;&lt;br /&gt;
    my @rl;&lt;br /&gt;
    &lt;br /&gt;
	return undef if(!$device);&lt;br /&gt;
    &lt;br /&gt;
    if($fcValue =~ s/_$//) {&lt;br /&gt;
        $regex = &amp;quot;^fc[\\d]+_&amp;quot;.$fcValue.&amp;quot;[\\d]{2}\$&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
        $regex = &amp;quot;^fc[\\d]+_&amp;quot;.$fcValue.&amp;quot;\$&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    $fcHour = 12 if(!defined $fcHour);&lt;br /&gt;
    $expMode = &amp;quot;point&amp;quot; if(!defined $expMode);&lt;br /&gt;
&lt;br /&gt;
	if( defined($defs{$device}) ) {&lt;br /&gt;
		if( $defs{$device}{TYPE} eq &amp;quot;PROPLANTA&amp;quot; ) {&lt;br /&gt;
            @rl = sort{&lt;br /&gt;
                my ($an) = ($a =~ m/fc(\d+)_.*/);&lt;br /&gt;
                my ($bn) = ($b =~ m/fc(\d+)_.*/);&lt;br /&gt;
                $an &amp;lt;=&amp;gt; $bn or $a cmp $b;&lt;br /&gt;
                }( grep /${regex}/,keys %{$defs{$device}{READINGS}} );&lt;br /&gt;
			return undef if( !@rl );&lt;br /&gt;
		} else {&lt;br /&gt;
			Log3 undef, 2, &amp;quot;logProxy_proplanta2Plot: $device is not a PROPLANTA device&amp;quot;;&lt;br /&gt;
			return undef;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	my $fromsec = SVG_time_to_sec($from);&lt;br /&gt;
	my $tosec   = SVG_time_to_sec($to);&lt;br /&gt;
	my $sec = $fromsec;&lt;br /&gt;
	my ($h,$fcDay,$mday,$mon,$year);&lt;br /&gt;
	my $timestamp;&lt;br /&gt;
    &lt;br /&gt;
	my $reading;&lt;br /&gt;
	my $value;&lt;br /&gt;
	my $prev_value;&lt;br /&gt;
	my $min = 999999;&lt;br /&gt;
	my $max = -999999;&lt;br /&gt;
	my $ret = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	# while not end of plot range reached&lt;br /&gt;
	while(($sec &amp;lt; $tosec) &amp;amp;&amp;amp; @rl) {&lt;br /&gt;
		#remember previous value for start of plot range&lt;br /&gt;
		$prev_value = $value;&lt;br /&gt;
&lt;br /&gt;
		$reading = shift @rl;&lt;br /&gt;
        ($fcDay) = $reading =~ m/^fc(\d+).*/;&lt;br /&gt;
   		$h = ($reading =~ m/.*(\d\d)$/)?$1:$fcHour;&lt;br /&gt;
		$value = ReadingsVal($device,$reading,undef);&lt;br /&gt;
        &lt;br /&gt;
		($mday,$mon,$year) = split(&#039;\.&#039;,ReadingsVal($device,&amp;quot;fc&amp;quot;.$fcDay.&amp;quot;_date&amp;quot;,undef));&lt;br /&gt;
		$timestamp = sprintf(&amp;quot;%04d-%02d-%02d_%02d:%02d:%02d&amp;quot;, $year, $mon, $mday, $h, 0, 0);&lt;br /&gt;
		$sec = SVG_time_to_sec($timestamp);&lt;br /&gt;
        &lt;br /&gt;
		# skip all values before start of plot range&lt;br /&gt;
		next if( SVG_time_to_sec($timestamp) &amp;lt; $fromsec );&lt;br /&gt;
&lt;br /&gt;
		# add first value at start of plot range&lt;br /&gt;
		if( !$ret &amp;amp;&amp;amp; $prev_value ) {&lt;br /&gt;
		  $min = $prev_value if( (looks_like_number($prev_value) &amp;amp;&amp;amp; ($prev_value &amp;lt; $min)) || ($prev_value lt $min) );&lt;br /&gt;
		  $max = $prev_value if( (looks_like_number($prev_value) &amp;amp;&amp;amp; ($prev_value &amp;gt; $max)) || ($prev_value gt $max) );&lt;br /&gt;
		  $ret .= &amp;quot;$from $prev_value\n&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		# done if after end of plot range&lt;br /&gt;
		last if($sec &amp;gt; $tosec);&lt;br /&gt;
&lt;br /&gt;
		$min = $value if( (looks_like_number($value) &amp;amp;&amp;amp; ($value &amp;lt; $min )) || ($value lt $min) );&lt;br /&gt;
		$max = $value if( (looks_like_number($value) &amp;amp;&amp;amp; ($value &amp;gt; $max )) || ($value gt $max) );&lt;br /&gt;
&lt;br /&gt;
		# add actual controll point&lt;br /&gt;
		$ret .= &amp;quot;$timestamp $value\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#		Log 1, &amp;quot;$timestamp $value -0- $reading&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
    if(($sec &amp;lt; $tosec) &amp;amp;&amp;amp; !@rl &amp;amp;&amp;amp; ($expMode eq &amp;quot;day&amp;quot;)) {&lt;br /&gt;
    	$timestamp = sprintf(&amp;quot;%04d-%02d-%02d_%02d:%02d:%02d&amp;quot;, $year, $mon, $mday, 23, 59, 59);&lt;br /&gt;
    	if(SVG_time_to_sec($timestamp) &amp;lt; $tosec) {&lt;br /&gt;
        	$ret .= &amp;quot;$timestamp $value\n&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
			$ret .= &amp;quot;$to $value\n&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    elsif(($sec &amp;gt; $tosec) &amp;amp;&amp;amp; ($expMode eq &amp;quot;day&amp;quot;)) {&lt;br /&gt;
       	$value = $prev_value + ($value - $prev_value)*(86400 + ($tosec - $sec))/86400;&lt;br /&gt;
       	$ret .= &amp;quot;$to $value\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
	return ($ret,$min,$max,$prev_value);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend können die Daten im Chart-Widget angezeigt werden. Der Device-Name von Proplanta heißt hier im Beispiel &amp;lt;code&amp;gt;AU.xx.WE.Proplanta&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;AU.xx.WE.Proplanta&amp;quot;&lt;br /&gt;
	 data-logdevice=&#039;[&lt;br /&gt;
	 					&amp;quot;myLogProxy&amp;quot;,&lt;br /&gt;
	 					&amp;quot;myLogProxy&amp;quot;,&lt;br /&gt;
	 					&amp;quot;myLogProxy&amp;quot;&lt;br /&gt;
	 				]&#039;&lt;br /&gt;
	 data-columnspec=&#039;[&lt;br /&gt;
	 					&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22rain_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
	 					&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22chOfRain_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
	 					&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22cloud_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;&lt;br /&gt;
	 				]&#039;&lt;br /&gt;
	 data-style=&#039;[&lt;br /&gt;
	 					&amp;quot;ftui l6fill&amp;quot;,&lt;br /&gt;
	 					&amp;quot;ftui l5fill&amp;quot;,&lt;br /&gt;
	 					&amp;quot;ftui l1fill&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-ptype=&#039;[&lt;br /&gt;
	 					&amp;quot;steps&amp;quot;,&lt;br /&gt;
	 					&amp;quot;quadraticSmooth&amp;quot;,&lt;br /&gt;
	 					&amp;quot;quadraticSmooth&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-uaxis=&#039;[&lt;br /&gt;
	 					&amp;quot;primary&amp;quot;,&lt;br /&gt;
	 					&amp;quot;secondary&amp;quot;,&lt;br /&gt;
	 					&amp;quot;secondary&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-legend=&#039;[&lt;br /&gt;
	 					&amp;quot;Regen&amp;quot;,&lt;br /&gt;
	 					&amp;quot;Regenwahrscheinlichkeit&amp;quot;,&lt;br /&gt;
	 					&amp;quot;Wolken&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-yunit=&amp;quot;mm&amp;quot;&lt;br /&gt;
	 data-ytext=&amp;quot;Regen&amp;quot;&lt;br /&gt;
	 data-yunit_sec=&amp;quot;%&amp;quot;&lt;br /&gt;
	 data-ytext_sec=&amp;quot;Chance auf Regen / Wolken&amp;quot;&lt;br /&gt;
	 data-timeformat=&amp;quot;eeee&amp;quot;&lt;br /&gt;
	 data-minvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-maxvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-minvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-maxvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-daysago_start = &amp;quot;0&amp;quot;&lt;br /&gt;
	 data-daysago_end = &amp;quot;-7&amp;quot;&lt;br /&gt;
	 data-xticks=&amp;quot;1440&amp;quot;&lt;br /&gt;
	 data-yticks=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-title=&amp;quot;7-Tage-Wettervorhersage&amp;quot;&lt;br /&gt;
	 data-showlegend=&amp;quot;true&amp;quot;&lt;br /&gt;
	 class=&amp;quot;nobuttons fullsize&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hilfreiche Links und Quellen zu diesem Beispiel:&#039;&#039;&#039;&lt;br /&gt;
*[[LogProxy|LogProxy im FHEM-Wiki]]&lt;br /&gt;
*{{Link2Forum|Topic=22967|Message=246973|LinkText=Stundengenaue Wettervorhersage (#1) im FHEM-Forum}}&lt;br /&gt;
*{{Link2Forum|Topic=22967|Message=334713|LinkText=Stundengenaue Wettervorhersage (#2) im FHEM-Forum}}&lt;br /&gt;
&lt;br /&gt;
===Darstellung der Wetter Icons im Diagramm===&lt;br /&gt;
&lt;br /&gt;
[[File:Wetterchart2.png]]&lt;br /&gt;
&lt;br /&gt;
Wie oben bereits beschrieben, gibt es beim Chart grundsätzlich die Möglichkeit, Icons, welche in Form von URLs in den Logs abgelegt sind oder welche per logProxy generiert werden, darzustellen. Die Icons werden auf genau dem gleichen Weg von FHEM gelesen, wie alle anderen Datenpunkte. Im Folgenden wird ein Beispiel gezeigt, mit dem die im Proplanta Modul als Readings abgelegten Icons per logProxy Funktion gelesen und in ein Chart eingebaut werden könnnen.&lt;br /&gt;
Da es beim Proplanta Modul für die ersten 7 Tage nicht das Reading &amp;lt;code&amp;gt;fc#_weatherIcon&amp;lt;/code&amp;gt; gibt, sondern mehrere Readings für unterschiedliche Tageszeiten wogegen für die zweiten 7 Tage ausschließlich das Reading &amp;lt;code&amp;gt;fc#_weatherIcon&amp;lt;/code&amp;gt; vorhanden ist, sollte per &amp;lt;code&amp;gt;attr device userReading&amp;lt;/code&amp;gt; mit folgendem Eintrag dafür gesorgt werden, dass für alle Tage ein Reading &amp;lt;code&amp;gt;fc#_weatherIcon&amp;lt;/code&amp;gt; vorhanden ist (alternativ könnten auch 2 Graphen gezeichnet werden, wobei der erste dann nur die ersten 7 Tage enthält und der zweite die letzen 7 Tage, will man nur die ersten 7 Tage darstellen braucht man das userReading nicht unbedingt).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
fc0_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc0_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);},&lt;br /&gt;
fc1_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc1_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);},&lt;br /&gt;
fc2_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc2_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);},&lt;br /&gt;
fc3_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc3_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);},&lt;br /&gt;
fc4_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc4_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);},&lt;br /&gt;
fc5_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc5_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);},&lt;br /&gt;
fc6_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc6_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Um die Icons darzustellen muss ein zusätzlicher Graph definiert werden. Dieser nutzt neben der Columnspec, die die URLs abruft den Parameter &amp;lt;code&amp;gt;data-ptype=&amp;quot;icons:#&amp;quot;&amp;lt;/code&amp;gt; (# ist eine Zahl und steht für die Nummer, beginnend bei 0 des Graphen, welcher für die y-Position der Icons verwendet werden soll) und den Stil &amp;lt;code&amp;gt;sym&amp;lt;/code&amp;gt;. Der Wert für die Symbolgröße sollte z.B. durch eine zusätzliche Definition im File fhem-tablet-ui-user.css in der Form:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* icon lines */&lt;br /&gt;
.ftui.l99icon	{ stroke:#DDA400; stroke-width:48px; fill:none; }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Im folgenden ein Beispiel, welches eine Linie für die Maximale Tagestemperatur zeichnet und auf dieser Linie die Wetter Icons darstellt.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;AU.xx.WE.Proplanta&amp;quot;&lt;br /&gt;
	 data-logdevice=&#039;[&lt;br /&gt;
	 					&amp;quot;myLogProxy&amp;quot;,&lt;br /&gt;
	 					&amp;quot;myLogProxy&amp;quot;&lt;br /&gt;
	 				]&#039;&lt;br /&gt;
	 data-columnspec=&#039;[&lt;br /&gt;
	 					&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22weatherIcon\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
	 					&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22tempMax\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;&lt;br /&gt;
	 				]&#039;&lt;br /&gt;
	 data-style=&#039;[&lt;br /&gt;
	 					&amp;quot;ftui l99icon&amp;quot;,&lt;br /&gt;
	 					&amp;quot;ftui l1fill&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-ptype=&#039;[&lt;br /&gt;
	 					&amp;quot;icons:1&amp;quot;,&lt;br /&gt;
	 					&amp;quot;quadraticSmooth&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-uaxis=&#039;[&lt;br /&gt;
	 					&amp;quot;primary&amp;quot;,&lt;br /&gt;
	 					&amp;quot;primary&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-legend=&#039;[&lt;br /&gt;
	 					&amp;quot;Wetterbedingung&amp;quot;,&lt;br /&gt;
	 					&amp;quot;Max. Temperature&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-yunit=&amp;quot;°C&amp;quot;&lt;br /&gt;
	 data-ytext=&amp;quot;Temperature (°C)&amp;quot;&lt;br /&gt;
	 data-timeformat=&amp;quot;ee\LF\dd.MM&amp;quot;&lt;br /&gt;
	 data-minvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-maxvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-minvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-maxvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-daysago_start=&amp;quot;-1w&amp;quot;&lt;br /&gt;
	 data-y_margin=&amp;quot;20&amp;quot;&lt;br /&gt;
	 data-daysago_end=&amp;quot;-3w&amp;quot;&lt;br /&gt;
	 data-xticks=&amp;quot;1440&amp;quot;&lt;br /&gt;
	 data-yticks=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-title=&amp;quot;14-Tage-Wettervorhersage&amp;quot;&lt;br /&gt;
	 data-showlegend=&amp;quot;true&amp;quot;&lt;br /&gt;
	 class=&amp;quot;nobuttons fullsize&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Kuchendiagramme===&lt;br /&gt;
In folgendem Beispiel wird gezeigt, wie man ein &amp;quot;Kuchendiagramm&amp;quot; darstellen kann.&lt;br /&gt;
&lt;br /&gt;
[[File:PieChart.png]]&lt;br /&gt;
&lt;br /&gt;
Ähnlich wie bei den Beispielen für die Wetter Darstellungen wird hierzu auch wieder logProxy benötigt. Zunächst muss die folgende zusätzliche Funktion in &amp;lt;code&amp;gt;99_myUtils.pm&amp;lt;/code&amp;gt; einfügen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#---------------------------------------&lt;br /&gt;
# Funktion zum Erzeugen der Inputs für Kuchendiagramme&lt;br /&gt;
#---------------------------------------&lt;br /&gt;
sub logProxy_values2PieChart($$$$;$$) {&lt;br /&gt;
	my ($device, $reading, $angle_start, $angle_dif, $inner_rad, $show_text) = @_;&lt;br /&gt;
	Log3 undef, 1, &amp;quot;$device, $reading, $angle_start, $angle_dif, $inner_rad, $show_text\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	use constant PI =&amp;gt; 4 * atan2(1,1);&lt;br /&gt;
	&lt;br /&gt;
	my $value=ReadingsVal($device,$reading,0);&lt;br /&gt;
&lt;br /&gt;
	my $angle_delta = $value/100*360;&lt;br /&gt;
	$angle_start = $angle_start/100*360;&lt;br /&gt;
	&lt;br /&gt;
	my $rad=10;&lt;br /&gt;
	my $irad=0;&lt;br /&gt;
	if ($inner_rad) {&lt;br /&gt;
		$irad = $rad*$inner_rad;&lt;br /&gt;
	}&lt;br /&gt;
	my $angle=$angle_start/360*2.0*PI;&lt;br /&gt;
	my $x=$irad*sin($angle);&lt;br /&gt;
	my $y=$irad*cos($angle);&lt;br /&gt;
	my $ret .= &amp;quot;;p &amp;quot;.$x.&amp;quot; &amp;quot;.$y.&amp;quot;\n&amp;quot;; # add segment at angle $angle&lt;br /&gt;
	&lt;br /&gt;
	for (my $i=$angle_start; $i&amp;lt;=$angle_start+$angle_delta; $i+=$angle_dif) {&lt;br /&gt;
		$angle = $i/360*2.0*PI;&lt;br /&gt;
		$x = $rad*sin($angle);&lt;br /&gt;
		$y = $rad*cos($angle);&lt;br /&gt;
		$ret .= &amp;quot;;p &amp;quot;.$x.&amp;quot; &amp;quot;.$y.&amp;quot;\n&amp;quot;; # add segment at angle $angle&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	$angle = ($angle_start+$angle_delta)/360*2.0*PI; # add last segment &lt;br /&gt;
	$ret .= &amp;quot;;p &amp;quot;.$rad*sin($angle).&amp;quot; &amp;quot;.$rad*cos($angle).&amp;quot;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	if ($inner_rad) {&lt;br /&gt;
		for (my $i=$angle_start; $i&amp;lt;$angle_start+$angle_delta; $i+=$angle_dif) {&lt;br /&gt;
			$angle = ($angle_start+$angle_start+$angle_delta-$i)/360*2.0*PI;&lt;br /&gt;
			$x = $irad*sin($angle);&lt;br /&gt;
			$y = $irad*cos($angle);&lt;br /&gt;
			$ret .= &amp;quot;;p &amp;quot;.$x.&amp;quot; &amp;quot;.$y.&amp;quot;\n&amp;quot;; # add segment at angle $angle&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$angle = ($angle_start)/360*2.0*PI; # add last segment &lt;br /&gt;
	$ret .= &amp;quot;;p &amp;quot;.$irad*sin($angle).&amp;quot; &amp;quot;.$irad*cos($angle).&amp;quot;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	if ($show_text) { # show text values&lt;br /&gt;
		$x = ($rad+$irad)/2*sin((2*$angle_start+$angle_delta)/2/360*2.0*PI);&lt;br /&gt;
		$y = ($rad+$irad)/2*cos((2*$angle_start+$angle_delta)/2/360*2.0*PI);&lt;br /&gt;
&lt;br /&gt;
		$ret .= &amp;quot;;t &amp;quot;.$x.&amp;quot; &amp;quot;.$y.&amp;quot; middle &amp;quot;.$show_text.&amp;quot;:&amp;quot;.$value.&amp;quot;%\n&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return($ret);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
In FHEM braucht man Readings, welche eine Zahl enthalten, die als Prozentwert interpretiert wird. Für jeden Prozentwert (also für jedes Reading) generiert die o.a. Funktion nun den Chart Input für ein Kuchenstück und liefert diesen als Antwort auf das GET, welches das Chart Widget auslöst. Dazu braucht die Funktion folgende Parameter: (Name des FHEM Devices, Name des Readings, Start Winkel des Kuchenstücks (Mathematisch gegen den Uhrzeigersinn in Grad), Delta Winkel zum Zeichnen (legt fest in welchen Schritten der Teilkreis des Kuchenstücks gezeichnet wird), Skalierungsfaktor für inneren Ring wenn ein Ring gezeichtnet werden soll (0 bedeutet komplette Kuchenstücke), optionaler Text der ins Kuchenstück vor die Prozentzahl geschrieben wird).&lt;br /&gt;
Im Folgenden eine Beispielkonfiguration für die Darstellung als Kuchendiagramm, die Readings heißen hier dPer1 bis dPer4. Der Startwinkel wird duch Aufsummierung der jeweils vorher schon gezeichneten Kuchenstücke gebildet, dadurch entstehen aneinander hängende Stücke.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
[[Datei:[[Datei:Beispiel.jpg]]]]&amp;lt;div class=&amp;quot;normal noaxes nobuttons&amp;quot;&lt;br /&gt;
        data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
        data-logdevice=&#039;[&amp;quot;lp&amp;quot;]&#039;&lt;br /&gt;
		data-logfile=&amp;quot;CURRENT&amp;quot;&lt;br /&gt;
        data-columnspec=&#039;[&lt;br /&gt;
			&amp;quot;Func:logProxy_values2PieChart(\&amp;quot;dPer1\&amp;quot;,\&amp;quot;state\&amp;quot;,ReadingsVal(\&amp;quot;dPer4\&amp;quot;,\&amp;quot;state\&amp;quot;,0)+ReadingsVal(\&amp;quot;dPer3\&amp;quot;,\&amp;quot;state\&amp;quot;,0),5,0,\&amp;quot;first\&amp;quot;)&amp;quot;,&lt;br /&gt;
			&amp;quot;Func:logProxy_values2PieChart(\&amp;quot;dPer2\&amp;quot;,\&amp;quot;state\&amp;quot;,ReadingsVal(\&amp;quot;dPer4\&amp;quot;,\&amp;quot;state\&amp;quot;,0)+ReadingsVal(\&amp;quot;dPer3\&amp;quot;,\&amp;quot;state\&amp;quot;,0)+ReadingsVal(\&amp;quot;dPer1\&amp;quot;,\&amp;quot;state\&amp;quot;,0),5,0,\&amp;quot;second\&amp;quot;)&amp;quot;,&lt;br /&gt;
			&amp;quot;Func:logProxy_values2PieChart(\&amp;quot;dPer3\&amp;quot;,\&amp;quot;state\&amp;quot;,ReadingsVal(\&amp;quot;dPer4\&amp;quot;,\&amp;quot;state\&amp;quot;,0),5,0,\&amp;quot;third\&amp;quot;)&amp;quot;,&lt;br /&gt;
			&amp;quot;Func:logProxy_values2PieChart(\&amp;quot;dPer4\&amp;quot;,\&amp;quot;state\&amp;quot;,0,5,0,\&amp;quot;fourth\&amp;quot;)&amp;quot;&lt;br /&gt;
		]&#039;&lt;br /&gt;
        data-style=&#039;[&amp;quot;ftui l0fill&amp;quot;,&amp;quot;ftui l1fill&amp;quot;,&amp;quot;ftui l2fill&amp;quot;,&amp;quot;ftui l3fill&amp;quot;]&#039;&lt;br /&gt;
        data-ptype=&#039;[&amp;quot;lines&amp;quot;]&#039;&lt;br /&gt;
        data-uaxis=&#039;[&amp;quot;primary&amp;quot;]&#039;&lt;br /&gt;
        data-legend=&#039;[&amp;quot;First&amp;quot;,&amp;quot;Second&amp;quot;,&amp;quot;Third&amp;quot;,&amp;quot;Fourth&amp;quot;]&#039;&lt;br /&gt;
		data-legendpos=&#039;[&amp;quot;left&amp;quot;,&amp;quot;top&amp;quot;]&#039;&lt;br /&gt;
        data-yunit=&amp;quot;&amp;quot;&lt;br /&gt;
        data-height=&amp;quot;300&amp;quot;&lt;br /&gt;
        data-width=&amp;quot;300&amp;quot;&lt;br /&gt;
		data-ddd=&#039;[&amp;quot;-40&amp;quot;,&amp;quot;0&amp;quot;,&amp;quot;0&amp;quot;]&#039;&lt;br /&gt;
		data-dddspace=&#039;[&amp;quot;-10&amp;quot;]&#039;&lt;br /&gt;
		data-dddwidth=&#039;[&amp;quot;10&amp;quot;]&#039;&lt;br /&gt;
		data-showlegend=&amp;quot;true&amp;quot;&lt;br /&gt;
		data-legend_horiz=&amp;quot;true&amp;quot;&lt;br /&gt;
        data-xticks=&amp;quot;auto&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Fensterstatus offen/geschlossen===&lt;br /&gt;
Dieses Beispiel zeigt, wie ein Fensterkontakt, dessen Reading die Werte &amp;lt;code&amp;gt;closed&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;open&amp;lt;/code&amp;gt; einnimmt, als Graph gezeichnet werden kann. Technisch gesehen werden hier die Werte &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; gezeichnet, indem über das Attribut &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; dem Zustand &amp;lt;code&amp;gt;open&amp;lt;/code&amp;gt; der Wert &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; und allen anderen Zuständen der Wert &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; zugeordnet wird. Über das Attribut &#039;&#039;&#039;data-yticks&#039;&#039;&#039; wird die Beschriftung an der Y-Achse (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;) gegen einen frei definierbaren Text ausgetauscht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	data-device=&amp;quot;wz_fensterstatus&amp;quot;&lt;br /&gt;
	data-logdevice=&#039;[&amp;quot;myDbLog&amp;quot;]&#039;&lt;br /&gt;
	data-logfile=&#039;[&amp;quot;HISTORY&amp;quot;]&#039;&lt;br /&gt;
	data-columnspec=&#039;[&amp;quot;wz_fensterstatus:state:0::$val=($val=~\\x22open\\x22?1:0)&amp;quot;]&#039;&lt;br /&gt;
	data-style=&#039;[&amp;quot;ftui l4fill&amp;quot;]&#039;&lt;br /&gt;
	data-ptype=&#039;[&amp;quot;steps&amp;quot;]&#039;&lt;br /&gt;
	data-height=&amp;quot;290&amp;quot;&lt;br /&gt;
	data-yticks=&#039;[[0,&amp;quot;geschlossen&amp;quot;],[1,&amp;quot;offen&amp;quot;]]&#039;&lt;br /&gt;
	data-minvalue=&amp;quot;0&amp;quot;&lt;br /&gt;
	data-maxvalue=&amp;quot;1.1&amp;quot;&lt;br /&gt;
	data-nofulldays=&amp;quot;true&amp;quot;&lt;br /&gt;
	data-daysago_start=&amp;quot;1&amp;quot;&lt;br /&gt;
	data-daysago_end=&amp;quot;-1&amp;quot;&lt;br /&gt;
	data-cursorgroup=&amp;quot;1&amp;quot;&lt;br /&gt;
	data-scrollgroup=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Das Beispiel funktioniert nur mit DbLog. Falls Logfiles verwendet werden muss statt &#039;$val&#039; &#039;$fld[&#039;&#039;num&#039;&#039;]&#039; verwendet werden. Hierbei steht &#039;&#039;num&#039;&#039; für die Spalte (beginnend bei 0) in der die Daten stehen.&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
{{Link2Forum|Topic= 48450 |Message=401006|LinkText=Thread im FHEM-Forum}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Tablet UI|Chart]]&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Chart&amp;diff=27294</id>
		<title>FTUI Widget Chart</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Chart&amp;diff=27294"/>
		<updated>2018-07-03T11:09:19Z</updated>

		<summary type="html">&lt;p&gt;Eki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das [[{{PAGENAME}}|Chart Widget]] ist ein Widget für [[FHEM Tablet UI]], mit dem sich verschiedenste Diagramme darstellen lassen. Die Aneinanderreihung mehrerer Werte eines Device-Readings zu einem zeitlichen Verlauf wird dabei als Graph bezeichnet.&lt;br /&gt;
&lt;br /&gt;
Es können beliebige Werte dargestellt und entsprechend der Sinnhaftigkeit, oder persönlichem Geschmack, formatiert werden. Farbe und Form der Linien sind je Graph einstellbar, auch wenn mehrere gleichzeitig in einem Diagramm angezeigt werden.&lt;br /&gt;
&lt;br /&gt;
Jedes Diagramm kann zwei Y-Achsen besitzen. Die primäre Y-Achse (primary) wird auf der linken Seite angezeigt, die sekundäre Y-Achse (secondary) auf der rechten Seite. Beide Achsen können unterschiedlich formatiert werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Chart_tabletUI.png&lt;br /&gt;
Datei:FTUI Widget Chart Stacked.png&lt;br /&gt;
Datei:FTUI Widget Chart-fc-Proplanta.png&lt;br /&gt;
Datei:Wetterchart2.png&lt;br /&gt;
Datei:PieChart.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Attribute==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:150px&amp;quot;|Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-device&#039;&#039;&#039;||Name des FHEM-Device, das die Aktualisierung des Charts triggert||||data-device=&amp;quot;WohnzimmerHeizung&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-get&#039;&#039;&#039;||Reading, das das Update des Diagramms triggert||&#039;STATE&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-logdevice&#039;&#039;&#039;||Name des Log-Device, das dargestellt werden soll, oder ein Array, um mehrere Werte in einem Diagramm darzustellen||||data-logdevice=&amp;quot;FileLog_WohnzimmerHeizung&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-logfile&#039;&#039;&#039;|| Name des Log-Files, aus dem die Daten entnommen werden sollen (oder Array)||&#039;-&#039; = aktuelle Datei||data-logfile=&amp;quot;WohnzimmerHeizung-2015.log&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-columnspec&#039;&#039;&#039;||Ermittelt den Wert aus dem Log-File, der angezeigt werden soll (oder Array)||||data-columnspec=&amp;quot;4:meas.*&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-style&#039;&#039;&#039;||Stil, wie die Graph-Linien dargestellt werden sollen (z.B. &#039;SVGplot l0&#039; oder &#039;ftui l0dash&#039;), oder ein Array, wenn mehrere Linien unterschiedlich dargestellt werden sollen (siehe [[#Aussehen_der_Linien|Hinweise]])||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-ptype&#039;&#039;&#039;||Form, wie die Graphen dargestellt werden sollen (z.B. &#039;lines&#039;, &#039;cubic&#039; oder &#039;fa-cog&#039;), oder ein Array (siehe [[#Form_der_Linien|Hinweise]])||&#039;lines&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-uaxis&#039;&#039;&#039;||Name der Achse, die verwendet werden soll (&#039;primary&#039; = links, oder &#039;secondary&#039; = rechts), oder ein Array||&#039;primary&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-legend&#039;&#039;&#039;||Bezeichnung des Graphen (wird in Legende und am Cursor angezeigt), oder ein Array||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-minvalue&#039;&#039;&#039;||Minimaler Wert, der auf der linken Y-Achse (&#039;primary&#039;) angezeigt werden soll. &#039;auto&#039; = automatische Berechnung||&#039;10&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-maxvalue&#039;&#039;&#039;||Maximaler Wert, der auf der linken Y-Achse (&#039;primary&#039;) angezeigt werden soll. &#039;auto&#039; = automatische Berechnung||&#039;30&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-minvalue_sec&#039;&#039;&#039;||Minimaler Wert, der auf der rechten Y-Achse (&#039;secondary&#039;) angezeigt werden soll. &#039;auto&#039; = automatische Berechnung||&#039;auto&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-maxvalue_sec&#039;&#039;&#039;||Maximaler Wert, der auf der rechten Y-Achse (&#039;secondary&#039;) angezeigt werden soll. &#039;auto&#039; = automatische Berechnung||&#039;auto&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-xticks&#039;&#039;&#039;||Abstand zwischen den vertikalen Hilfslinien (bezogen auf die X-Achse) in Minuten. &#039;auto&#039; = automatische Berechnung||&#039;auto&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yticks&#039;&#039;&#039;||Abstand zwischen den horizontalen Hilfslinien (bezogen auf die linke Y-Achse). Kann auch ein Array mit Werte-Paaren enthalten, um die Linien mit Text zu beschriften.||&#039;auto&#039;||data-yticks=&#039;[[0,&amp;quot;open&amp;quot;],[1,&amp;quot;closed&amp;quot;]]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yticks_format&#039;&#039;&#039;||Dient zur Formatierung der Ticks der Y-Achse. Die Formatierung geschieht über Platzhalter, Trenner und einen beliebigen durch &#039; &#039; getrennten Text. Als Platzhalter dient ein oder mehrere &#039;#&#039;, als Trenner können &#039;.&#039;, &#039;,&#039; und &#039;:&#039; verwendet werden. Ist ein Trenner enthalten (z.B. &#039;#.##&#039;) dann bedeutet das in dem Beispiel, dass der Ytick mit 2 Nachkommastellen versehen wird und vorne Platz für eine Stelle vor dem Komma vorgehalten wird (führende Nullen werden nicht dargestellt, aber de Platz wird reserviert so dass das ganze rechtsbündig immer passt). Ist kein Trenner vorhanden, dann wird der Ytick auf die Summe der Platzhalter mit einer festen Gesamtbreite gesetzt (#### würde also bedeuten, dass immer 4 Stellen (ohne Trenner) verwendet werden. aus 0.4 würde 0.400 aus 10.437 würde 10.44). Als Trenner kann man z.B. für Zeiten auch einen &#039;:&#039; verwenden und dadurch auch so etwas wie &amp;quot;12:00 Uhr&amp;quot; realisieren (in dem Beispiel wäre data-yticks_format=&amp;quot;##:## Uhr&amp;quot; und kein data-yunit oder data-yticks=&amp;quot;##:##&amp;quot; und data-yunit=&amp;quot;Uhr&amp;quot;).||||data-yticks_format=&amp;quot;#.##&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yticks_sec&#039;&#039;&#039;||Abstand zwischen den horizontalen Hilfslinien (bezogen auf die rechte Y-Achse). Kann auch ein Array mit Werte-Paaren enthalten, um die Linien mit Text zu beschriften.||&#039;auto&#039;||data-yticks=&#039;[[0,&amp;quot;open&amp;quot;],[1,&amp;quot;closed&amp;quot;]]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yticks_format_sec&#039;&#039;&#039;||Dient zur Formatierung der Ticks der Y-Achse. Die Formatierung geschieht über Platzhalter, Trenner und einen beliebigen durch &#039; &#039; getrennten Text. Als Platzhalter dient ein oder mehrere &#039;#&#039;, als Trenner können &#039;.&#039;, &#039;,&#039; und &#039;:&#039; verwendet werden. Ist ein Trenner enthalten (z.B. &#039;#.##&#039;) dann bedeutet das in dem Beispiel, dass der Ytick mit 2 Nachkommastellen versehen wird und vorne Platz für eine Stelle vor dem Komma vorgehalten wird (führende Nullen werden nicht dargestellt, aber de Platz wird reserviert so dass das ganze rechtsbündig immer passt). Ist kein Trenner vorhanden, dann wird der Ytick auf die Summe der Platzhalter mit einer festen Gesamtbreite gesetzt (#### würde also bedeuten, dass immer 4 Stellen (ohne Trenner) verwendet werden. aus 0.4 würde 0.400 aus 10.437 würde 10.44). Als Trenner kann man z.B. für Zeiten auch einen &#039;:&#039; verwenden und dadurch auch so etwas wie &amp;quot;12:00 Uhr&amp;quot; realisieren (in dem Beispiel wäre data-yticks_format=&amp;quot;##:## Uhr&amp;quot; und kein data-yunit oder data-yticks=&amp;quot;##:##&amp;quot; und data-yunit=&amp;quot;Uhr&amp;quot;).||||data-yticks_format_sec=&amp;quot;#.##&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yticks_prio&#039;&#039;&#039;||Legt fest, ob die horizontalen Hilfslinien der linken (primary) oder der rechten (secondary) Y-Achse zugeordnet werden sollen||||data-yticks_prio=&#039;secondary&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-ytype&#039;&#039;&#039;||Legt fest, ob die primäre y Achse logarithmisch sein soll (wert &amp;quot;log&amp;quot;)||||data-ytype=&amp;quot;log&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-ytype_sec&#039;&#039;&#039;||Legt fest, ob die sekundäre y Achse logarithmisch sein soll (wert &amp;quot;log&amp;quot;)||||data-ytype_sec=&amp;quot;log&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-y_margin&#039;&#039;&#039;|||Gibt die Möglichkeit, Abstände zwischen den Graphen und dem oberen Rand des Plots zu definieren (Einheit Pixel). Falls der Wert skalar ist, werden oben und unten die gleichen Abstände eingehalten. Falls ein 2D Array angegeben wird, können die Werte unten (erster Wert im Array) und oben (zweiter Wert im Array) getrennt festgelegt werden||&amp;quot;0&amp;quot;|||data-y_margin=&#039;[&amp;quot;10&amp;quot;,&amp;quot;20&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-y_margin_sec&#039;&#039;&#039;|||Gibt die Möglichkeit, Abstände zwischen den Graphen und dem oberen Rand des Plots zu definieren (Einheit Pixel). Falls der Wert skalar ist, werden oben und unten die gleichen Abstände eingehalten. Falls ein 2D Array angegeben wird, können die Werte unten (erster Wert im Array) und oben (zweiter Wert im Array) getrennt festgelegt werden||&amp;quot;0&amp;quot;|||data-y_margin=&#039;[&amp;quot;10&amp;quot;,&amp;quot;20&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-daysago_start&#039;&#039;&#039;||Anzahl der vergangenen Tage, wo das Diagramm beginnen soll. &#039;0&#039; = Beginn heute 0:00 Uhr. (siehe [[#Zeitstrahl_.2F_Start_.26_Ende_auf_der_X-Achse|Hinweise]])||&#039;0&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-daysago_end&#039;&#039;&#039;||Anzahl der vergangenen Tage, wo das Diagramm enden soll. &#039;-1&#039; = Ende heute 24:00 Uhr. (siehe [[#Zeitstrahl_.2F_Start_.26_Ende_auf_der_X-Achse|Hinweise]])||&#039;-1&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-xticks_round&#039;&#039;&#039;||Wenn vorhanden und entweder &#039;h&#039;, &#039;d&#039;, &#039;w&#039;, wird auf Stunde, Tag oder Woche bei den xticks gerundet (also die Tickmarks und die Gridlines bei den entsprechend gerundeten Zeiten gesetzt). Es kann auch &#039;auto&#039; angegeben werden, um eine autmoatische Rundung durchzuführen||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-nofulldays&#039;&#039;&#039;||Aktiviert/deaktiviert die Rundung der X-Achse auf ganze Tage. Binärwert (&#039;true&#039; oder &#039;false&#039;)||&#039;false&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-timeformat&#039;&#039;&#039;||Zeitformat für die Anzeige an der X-Achse (siehe [[#Zeitformat_der_X-Achse|Hinweise]])||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-timeranges&#039;&#039;&#039;||Hierdurch können vordefinierte Zeiträume für die X-Achse festgelegt werden, die dann durch eine pulldown menu (neuer Button oben neben dem &amp;quot;-&amp;quot; Button) direkt ausgewählt werden können. Der Parameter ist ein Array aus Array Einträgen, welche jeweils [&amp;lt;Name&amp;gt;,&amp;lt;daysago_start&amp;gt;,&amp;lt;daysago_end&amp;gt;] enthalten)||&lt;br /&gt;
||data-timeranges=&#039;[&amp;lt;br&amp;gt;&lt;br /&gt;
[&amp;quot;Actual Year&amp;quot;,&amp;quot;0Y&amp;quot;,&amp;quot;-1Y&amp;quot;],&amp;lt;br&amp;gt;&lt;br /&gt;
[&amp;quot;Last Year&amp;quot;,&amp;quot;1Y&amp;quot;,&amp;quot;0Y&amp;quot;],&amp;lt;br&amp;gt;&lt;br /&gt;
[&amp;quot;Actual Month&amp;quot;,&amp;quot;0M&amp;quot;,&amp;quot;-1M&amp;quot;],&amp;lt;br&amp;gt;&lt;br /&gt;
[&amp;quot;Last Month&amp;quot;,&amp;quot;1M&amp;quot;,&amp;quot;0M&amp;quot;],&amp;lt;br&amp;gt;&lt;br /&gt;
[&amp;quot;Actual Week&amp;quot;,&amp;quot;0W&amp;quot;,&amp;quot;-1W&amp;quot;],&amp;lt;br&amp;gt;&lt;br /&gt;
[&amp;quot;Last Week&amp;quot;,&amp;quot;1W&amp;quot;,&amp;quot;0W&amp;quot;],&amp;lt;br&amp;gt;&lt;br /&gt;
[&amp;quot;Today&amp;quot;,&amp;quot;0D&amp;quot;,&amp;quot;-1D&amp;quot;],&amp;lt;br&amp;gt;&lt;br /&gt;
[&amp;quot;Yesterday&amp;quot;,&amp;quot;1D&amp;quot;,&amp;quot;0D&amp;quot;]&amp;lt;br&amp;gt;&lt;br /&gt;
]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-ytext&#039;&#039;&#039;||Text, der neben der linken Y-Achse angezeigt wird||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-ytext_sec&#039;&#039;&#039;||Text, der neben der rechten Y-Achse angezeigt wird||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yunit&#039;&#039;&#039;||Einheit, die an der linken Y-Achse angezeigt wird||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yunit_sec&#039;&#039;&#039;||Einheit, die an der rechten Y-Achse angezeigt wird||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-show_both_axes&#039;&#039;&#039;||Legt fest ob beide Y-Achsen Linien gezeichnet werden sollen||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-crosshair&#039;&#039;&#039;||Aktiviert/deaktiviert den Fadenkreuz-Cursor. Binärwert (&#039;true&#039; oder &#039;false&#039;)||&#039;false&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-cursorgroup&#039;&#039;&#039;||Zahl zur Gruppierung der Werte am Fadenkreuz-Cursor ([[#Fadenkreuz-Cursor|Hinweise]])||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-scrollgroup&#039;&#039;&#039;||Zahl zur Gruppierung der Graphen beim Bewegen und Zoomen. Alle Linien mit der selben Zahl werden miteinander gekoppelt und bewegen sich gemeinsam.||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-showlegend&#039;&#039;&#039;||Aktiviert/deaktiviert die Anzeige der Legene. Binärwert (&#039;true&#039; oder &#039;false&#039;)||&#039;false&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-legendpos&#039;&#039;&#039;||Array von zwei Werten, die die horizontale und vertikale Position der Legende festlegen ([[#Legende|Hinweise]])||&#039;[&amp;quot;top&amp;quot;,&amp;quot;right&amp;quot;]&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-legend_horiz&#039;&#039;&#039;||legt fest, dass die Legendeneinträge horizontal angeordnet sind (anstatt vertikal wie im default Fall)||false||data-legend_horiz=&amp;quot;true&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-width&#039;&#039;&#039;||Breite des Diagramms (in % oder px)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-height&#039;&#039;&#039;||Höhe des Diagramms (in % oder px)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-graphsshown&#039;&#039;&#039;||Aktiviert/deaktiviert die initiale Anzeige von Graphen. Binärwert (&#039;true&#039; oder &#039;false&#039;). Array, wenn mehrere Linien angezeigt werden sollen.||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-ddd&#039;&#039;&#039;||Einstellung für die 3D-Drehung ([[#3-dimensionale_Drehung|Hinweise]])||||data-ddd=&#039;[&amp;quot;40&amp;quot;,&amp;quot;60&amp;quot;,&amp;quot;0&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-dddspace&#039;&#039;&#039;||Abstand zwischen zwei Graphen, wenn die 3D-Anzeige aktiviert wurde (px)||&#039;15&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-dddwidth&#039;&#039;&#039;||Breite, bzw. Tiefe der Graphen, wenn diese 3-dimensional angezeigt werden (px)||&#039;10&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-title&#039;&#039;&#039;||Titel, der über dem Diagramm angezeigt werden soll. Der Inhalt kann auch dynamisch erzeugt werden ([[#Diagrammtitel|Hinweise]])||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-title_class&#039;&#039;&#039;||Klassenname für die Formatierung des Titels. Die Eigenschaften müssen dann entsprechend in einem CSS File angegeben werden (z.B. in fhem-tablet-ui-user.css)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-prefetch&#039;&#039;&#039;||Legt fest, ob zusätzliche Daten rechts und links des Plots im Hintergrund vom Server geholt werden sollen||false||data-prefetch=&amp;quot;true&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
Einige Parameter (style, maxvalue, minvalue, maxvalue_sec, minvalue_sec) können auch aus Readings dynamisch gesetzt werden wenn &amp;quot;&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;&amp;quot; als Parameter gesetzt wird. Damit kann man z.B. in FHEM über notify etc. die Linientypen dynamisch anpassen (z.B. wenn der Wert eines Devices in einem bestimmten Bereich liegt, ändert sich die Farbe des Graphen).&lt;br /&gt;
&lt;br /&gt;
==CSS Klassen==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Klasse!!Beschreibung&lt;br /&gt;
{{FTUI Klasse|fullsize}}{{FTUI Klasse|noticks}}{{FTUI Klasse|nobuttons}}{{FTUI Klasse|small}}{{FTUI Klasse|normal}}{{FTUI Klasse|big}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Folgende Widget-spezifsche Klassen können zusätzlich in einer eigenen CSS-Datei definiert werden:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Klasse&lt;br /&gt;
!Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;chart-background&#039;&#039;&#039;||Hintergrundfarbe des Diagramms&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;buttons&#039;&#039;&#039;||Größe und Farbe der Buttons&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;text.axes&#039;&#039;&#039;||Generelle Schriftart und Farbe der Achsen&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;gridlines&#039;&#039;&#039;||Generelle Farbe und Größe der Gitternetzlinien&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;xaxis&#039;&#039;&#039;||Schriftart, Größe und Farbe der X-Achse&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;yaxis&#039;&#039;&#039;||Schriftart, Größe und Farbe der Y-Achse&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;xticks&#039;&#039;&#039;||Schriftart, Größe und Farbe der X-Achse (Zwischenlinien)&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;yticks&#039;&#039;&#039;||Schriftart, Größe und Farbe der Y-Achse (Zwischenlinien)&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;crosshair&#039;&#039;&#039;||Schriftart, Größe und Vordergrund/Hintergrundfarbe der Momentanwerte am Fadenkreuzcursor&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;caption&#039;&#039;&#039;||Schriftart, Größe und Farbe der Text-Buttons für Legende und Cursor&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;legend&#039;&#039;&#039;||Schriftart, Größe und Farbe der Legende&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Standardwerte sind in der Datei &amp;lt;code&amp;gt;css/ftui_chart.css&amp;lt;/code&amp;gt; zu finden.&lt;br /&gt;
&lt;br /&gt;
==Datenquellen==&lt;br /&gt;
Beim Chart-Widget können die gleichen Datenquellen genutzt werden, die auch für SVG-Plots verwendet werden können:&lt;br /&gt;
# [[FileLog]]: Verlaufsdaten einer Textdatei entnehmen&lt;br /&gt;
# [[DbLog]]: Verlaufsdaten einer Datenbank entnehmen&lt;br /&gt;
# [[LogProxy]]: Daten dynamisch berechnet&lt;br /&gt;
&lt;br /&gt;
===FileLog===&lt;br /&gt;
Um [[FileLog]] zu nutzen, wird als &#039;&#039;&#039;data-logdevice&#039;&#039;&#039; das FHEM-Device für das FileLog angegeben. In der Regel entstehen hier im Laufe der Zeit mehrere Log-Dateien. Name und Anzahl sind von der Definition abhängig - meist wird jeden Monat oder jedes Jahr eine neue Datei angelegt. Die gewünschte Datei kann mit &#039;&#039;&#039;data-logfile&#039;&#039;&#039; ausgewählt werden. Möchte man stets die aktuelle Datei verwenden (macht vor allem dann Sinn, wenn man die neusten Daten anzeigen will), kann das Attribut weggelassen, oder explizit &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt; eingetragen werden. Zuletzt wird &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; benötigt, um die gewünschten Daten zu in der Logdatei zu identifizieren. Hier wird die Spalte, in der die Daten stehen, gefolgt von Doppelpunkt und Readingname angegeben.&lt;br /&gt;
&lt;br /&gt;
Für ein Heizungsthermostat von Homematic mit dem Namen &#039;&#039;DG.wz.HZ.Heizungsventil&#039;&#039; ergibt sich somit beispielhaft folgende Definition, um gemessene Temperatur, Sollwert und Ventilstellung im Diagramm darzustellen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;DG.wz.HZ.Heizungsventil&amp;quot;&lt;br /&gt;
	 data-logdevice=&amp;quot;FileLog_DG.wz.HZ.Heizungsventil&amp;quot;&lt;br /&gt;
	 data-logfile=&amp;quot;-&amp;quot;&lt;br /&gt;
	 data-columnspec=&#039;[&amp;quot;4:measured-temp&amp;quot;,&amp;quot;4:desired-temp&amp;quot;,&amp;quot;4:actuator&amp;quot;]&#039;&lt;br /&gt;
	 ...&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollen Daten von unterschiedlichen Geräten in einem Diagramm angezeigt werden, muss &#039;&#039;&#039;data-logdevice&#039;&#039;&#039; als Array nach dem Schema &amp;lt;code&amp;gt;data-logdevice=&#039;[&amp;quot;&amp;lt;Logdatei_1&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Logdatei_2&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Logdatei_3&amp;gt;&amp;quot;]&#039;&amp;lt;/code&amp;gt; definiert werden. Für jeden Eintrag in &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; muss es auch den passenden Eintrag in &#039;&#039;&#039;data-logdevice&#039;&#039;&#039; geben (auch die Reihenfolge ist relevant).&lt;br /&gt;
&lt;br /&gt;
===DbLog===&lt;br /&gt;
Um die Daten aus [[DbLog]] anzeigen zu können, werden die gleichen Attribute verwendet und mit für die Datenbank angepassten Werten beschrieben. Bei &#039;&#039;&#039;data-logdevice&#039;&#039;&#039; das FHEM-Device für die Datenbank angegeben. Im nachfolgenden Beispiel heißt diese &amp;lt;code&amp;gt;logdb&amp;lt;/code&amp;gt; und besitzt wie üblich zwei Tabellen: &amp;lt;code&amp;gt;current&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;history&amp;lt;/code&amp;gt; (der zeitliche Verlauf liegt in letzterer). Der Tabellenname wird bei &#039;&#039;&#039;data-logfile&#039;&#039;&#039; eingetragen. Da die Daten in der Datenbank etwas anders abgelegt werden, muss auch &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; entsprechend angepasst werden. Statt der Spalte wird hier das FHEM-Device, gefolgt von Doppelpunkt und Readingname angegeben.&lt;br /&gt;
&lt;br /&gt;
Für das oben beschriebene Homematic-Heizungsthermostat ergibt sich dann folgende Definition, um die gleichen Daten aus einer Datenbank, statt einem LogFile zu lesen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;DG.wz.HZ.Heizungsventil&amp;quot;&lt;br /&gt;
	 data-logdevice=&amp;quot;logdb&amp;quot;&lt;br /&gt;
	 data-logfile=&amp;quot;HISTORY&amp;quot;&lt;br /&gt;
	 data-columnspec=&#039;[&amp;quot;DG.wz.HZ.Heizungsventil:measured-temp&amp;quot;,&amp;quot;DG.wz.HZ.Heizungsventil:desired-temp&amp;quot;,&amp;quot;DG.wz.HZ.Heizungsventil:actuator&amp;quot;]&#039;&lt;br /&gt;
	 ...&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die Anzeige von unterschiedlichen Geräten in einem Diagramm, muss nur &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; entsprechend angepasst werden, solange sich alle Daten in der Datenbank befinden.&lt;br /&gt;
&lt;br /&gt;
===LogProxy===&lt;br /&gt;
Um die Daten mittels [[LogProxy]] berechnen und anzeigen zu können, muss in FHEM ein LogProxy-Device definiert sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define myLogProxy logProxy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Einstellungen am LogProxy sind nicht nötig, die bloße Existenz reicht.&lt;br /&gt;
&lt;br /&gt;
Bei &#039;&#039;&#039;data-logdevice&#039;&#039;&#039; wird das FHEM-Device für den LogProxy angegeben. Im nachfolgenden Beispiel heißt dieses &amp;lt;code&amp;gt;myLogProxy&amp;lt;/code&amp;gt;. Das Attribut &#039;&#039;&#039;data-logfile&#039;&#039;&#039; wird für LogProxy nicht benötigt. Befinden sich nur LogProxy-Werte im Diagramm kann das Attribut komplett entfallen. Sollen weitere Werte angezeigt werden, bleibt die Definition im Array einfach leer.&lt;br /&gt;
&lt;br /&gt;
Im Attribut &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; wird eine Formel angegeben, wie die Werte berechnet werden sollen. Hier können die Formeln 1:1 von einem eventuell vorhandenen SVG-Plot übernommen werden. &#039;&#039;&#039;Dabei gibt es jedoch folgendes zu beachten:&#039;&#039;&#039; Befindet sich die Formel in einem Array, dürfen die Formeln keine Anführungszeichen (&amp;lt;code&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;) beinhalten. Stattdessen müssen sie als escapter Ascii-Code (&amp;lt;code&amp;gt;\\x22&amp;lt;/code&amp;gt;) eingefügt werden.&lt;br /&gt;
&lt;br /&gt;
Das nachfolgende Beispiel zeigt, wie Vorhersagewerte aus einem FHEM-Device vom Typ Proplanta (Name hier &amp;lt;code&amp;gt;AU.xx.WE.Proplanta&amp;lt;/code&amp;gt;) angezeigt werden können.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;AU.xx.WE.Proplanta&amp;quot;&lt;br /&gt;
	 data-logdevice=&#039;[&lt;br /&gt;
						&amp;quot;myLogProxy&amp;quot;,&lt;br /&gt;
						&amp;quot;myLogProxy&amp;quot;,&lt;br /&gt;
						&amp;quot;myLogProxy&amp;quot;,&lt;br /&gt;
						&amp;quot;myLogProxy&amp;quot;&lt;br /&gt;
					]&#039;&lt;br /&gt;
	 data-columnspec=&#039;[&lt;br /&gt;
						&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22temp_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
						&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22rain_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
						&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22chOfRain_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
						&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22cloud_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;&lt;br /&gt;
					]&#039;&lt;br /&gt;
	 ...&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Auch alle anderen Funktionen, die [[LogProxy]] bietet, können hier angewendet werden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Hinweise==&lt;br /&gt;
===Aktualisierung des Charts===&lt;br /&gt;
Damit der Refresh des Charts funktioniert, muss auch ein Device angegeben werden, der das Refresh triggert. Das Diagramm wird immer dann aktualisiert, wenn sich der Inhalt von &#039;&#039;&#039;data-get&#039;&#039;&#039; ändert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	data-device=&amp;quot;WohnzimmerHeizung&amp;quot;&lt;br /&gt;
	data-logdevice=&amp;quot;FileLog_WohnzimmerHeizung&amp;quot;&lt;br /&gt;
	...&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Aussehen der Linien===&lt;br /&gt;
Mit dem Attribut &#039;&#039;&#039;data-style&#039;&#039;&#039; kann das Aussehen der Linien des jeweiligen Graphen verändert werden. Hierfür können die Standard-FHEM-Styles verwendet werden. Dazu wird das Attribut mit &amp;lt;code&amp;gt;SVGplot&amp;lt;/code&amp;gt;, gefolgt von einem Leerzeichen und der gewünschten Farbe/Stil befüllt. Es existieren jedoch auch noch weitere, an FTUI angepasste Styles, zu finden in der CSS-Datei &amp;lt;code&amp;gt;css/ftui_chart.css&amp;lt;/code&amp;gt;. Um diese zu verwenden, wird das Attribut mit &amp;lt;code&amp;gt;ftui&amp;lt;/code&amp;gt;, gefolgt von einem Leerzeichen und der gewünschten Farbe/Stil befüllt. Eigene Styles können zum Beispiel in der Datei &amp;lt;code&amp;gt;css/fhem-table-ui-user.css&amp;lt;/code&amp;gt; definiert werden.&lt;br /&gt;
&lt;br /&gt;
Folgende Übersicht zeigt die im Standard verfügbaren &#039;&#039;&#039;Farben&#039;&#039;&#039;, alle Abbildungen sind mit im FTUI-Style entstanden:&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f0.png|thumb|none|150px|Farbe &amp;quot;l0&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f1.png|thumb|none|150px|Farbe &amp;quot;l1&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f2.png|thumb|none|150px|Farbe &amp;quot;l2&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f3.png|thumb|none|150px|Farbe &amp;quot;l3&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f4.png|thumb|none|150px|Farbe &amp;quot;l4&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f5.png|thumb|none|150px|Farbe &amp;quot;l5&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f6.png|thumb|none|150px|Farbe &amp;quot;l6&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Angabe zur Farbe kann dann mit der Linienart kombiniert werden. Dazu stehen folgende &#039;&#039;&#039;Stile&#039;&#039;&#039; zur Verfügung:&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-2D-normal.png|thumb|none|225px|Darstellung in 2D: Stil &amp;quot;normal&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-2D-dot.png|thumb|none|225px|Darstellung in 2D: Stil &amp;quot;dot&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-2D-dash.png|thumb|none|225px|Darstellung in 2D: Stil &amp;quot;dash&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-2D-fill.png|thumb|none|225px|Darstellung in 2D: Stil &amp;quot;fill&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-2D-sym.png|thumb|none|225px|Darstellung in 2D: Stil &amp;quot;sym&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-3D-normal.png|thumb|none|225px|Darstellung in 3D: Stil &amp;quot;normal&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-3D-dot.png|thumb|none|225px|Darstellung in 3D: Stil &amp;quot;dot&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-3D-dash.png|thumb|none|225px|Darstellung in 3D: Stil &amp;quot;dash&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-3D-fill.png|thumb|none|225px|Darstellung in 3D: Stil &amp;quot;fill&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-3D-sym.png|thumb|none|225px|Darstellung in 3D: Stil &amp;quot;sym&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Farbe und Stil werden kombiniert (zusammengeschrieben) beim Attribut &#039;&#039;&#039;data-style&#039;&#039;&#039; angegeben, sodass sich beispielsweise für eine graue Punktlinie folgendes ergibt: &amp;lt;code&amp;gt;data-style=&amp;quot;ftui l1dot&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
Um die Darstellung als normale Linie zu erhalten, darf im Gegensatz zu den anderen Linienformen der Stil &amp;lt;code&amp;gt;normal&amp;lt;/code&amp;gt; nicht angegeben werden. Für eine einfache graue Linie ist also die Angabe &amp;lt;code&amp;gt;data-style=&amp;quot;ftui l1&amp;quot;&amp;lt;/code&amp;gt; korrekt, wohingegen &amp;lt;code&amp;gt;data-style=&amp;quot;ftui l1normal&amp;quot;&amp;lt;/code&amp;gt; zu einer fehlerhaften Anzeige führt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Der Stil &#039;&#039;sym&#039;&#039; ist speziell dafür geeignet, Symbole statt Linien zu zeichnen. Dazu kann beim Attribut &#039;&#039;&#039;data-ptype&#039;&#039;&#039; als Linienform ein beliebiges Font-Awsome-, oder Open Automation-Icon angegeben werden. Alle in diesem Abschnitt enthaltenen Abbildungen sind mit &amp;lt;code&amp;gt;data-ptype=&amp;quot;lines&amp;quot;&amp;lt;/code&amp;gt; entstanden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Übergänge mit datenabhängigen Grenzen:&#039;&#039;&#039; Plotstile (data-style) können auch direkt als Gradienten auf Basis von Plot-Datenwerten definiert werden. Dazu muss der Plotstil als Array angegeben werden. Der erste Wert des Arrays gibt an, ob nur die Linie gezeichnet werden soll (Zahl angeben, die die Dicke der Linie definiert) oder gefüllt (&amp;quot;fill&amp;quot; eintragen). Alle danach folgenden Array Elemente sind beliebig viele Stopp Punkte für die Farbübergänge, welche wiederum aus Arrays mit 3 Parametern bestehen. Für jeden Stopp Punkt werden der Datenwert, die Farbe und die Durchsichtigkeit gesetzt. Hierdurch lassen sich z.B. Einfärbungen setzen, die für Temperaturplots immer negative Werte blau einfärben und positive Werte rot. Zwischen den Stop Punkten wird die Farbe interpoliert, also ein weicher Übergang generiert. Will man harte Übergänge muss man Zwei Stopp Punkte mit unterschiedlichen Farbwerten aber dem gleichen Datenwert erzeugen.&amp;lt;br&amp;gt;&lt;br /&gt;
Beispiel 1 für einen weichen Gradienten, der bei 0 von blau nach rot übergeht, bei diesem Übergang durchsichtig ist und von dort nach negativen bzw. positiven Werden immer deckender wird:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;data-style=&#039;[&amp;quot;fill&amp;quot;,[&amp;quot;-20&amp;quot;,&amp;quot;#0000ff&amp;quot;,&amp;quot;0.7&amp;quot;],[&amp;quot;0&amp;quot;,&amp;quot;#0000ff&amp;quot;,&amp;quot;0&amp;quot;],[&amp;quot;0&amp;quot;,&amp;quot;#ff0000&amp;quot;,&amp;quot;0&amp;quot;],[&amp;quot;302&amp;quot;,&amp;quot;#ff0000&amp;quot;,&amp;quot;0.7&amp;quot;]]&#039;&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Beispiel 2 mit einem harten Übergang von blau nach rot bei 0:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;data-style=&#039;[&amp;quot;fill&amp;quot;,[&amp;quot;-20&amp;quot;,&amp;quot;#0000ff&amp;quot;,&amp;quot;0.7&amp;quot;],[&amp;quot;0&amp;quot;,&amp;quot;#0000ff&amp;quot;,&amp;quot;0.7&amp;quot;],[&amp;quot;0&amp;quot;,&amp;quot;#ff0000&amp;quot;,&amp;quot;0.7&amp;quot;],[&amp;quot;50&amp;quot;,&amp;quot;#ff0000&amp;quot;,&amp;quot;0.7&amp;quot;]]&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
Es gibt auch die Möglichkeit den Bereich zwischen zwei Graphen einzufärben. Dazu muss ein Wert in Columnspec als Array angegeben werden. Ist dies der Fall, dann wird der zweite Graph umgekehrt an den ersten angehängt.&amp;lt;br&amp;gt;&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
data-columnspec=&#039;[&lt;br /&gt;
    &amp;quot;Func:logProxy_proplanta2Plot(\\x22AgroWeather\\x22,\\x22weatherIcon\\x22,$from,$to,12)&amp;quot;,&lt;br /&gt;
    [&lt;br /&gt;
        &amp;quot;Func:logProxy_proplanta2Plot(\\x22AgroWeather\\x22,\\x22tempMax\\x22,$from,$to,12)&amp;quot;,&lt;br /&gt;
        &amp;quot;Func:logProxy_proplanta2Plot(\\x22AgroWeather\\x22,\\x22tempMin\\x22,$from,$to,12)&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;Func:logProxy_proplanta2Plot(\\x22AgroWeather\\x22,\\x22rain\\x22,$from,$to,0,\\x22day\\x22)&amp;quot;&lt;br /&gt;
]&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:FTUI Widget Chart DynamicStyles.png|thumb|none|225px|dynamischer Übergang]]&lt;br /&gt;
&lt;br /&gt;
===Form der Linien===&lt;br /&gt;
Das Attribut &#039;&#039;&#039;data-ptype&#039;&#039;&#039; beeinflusst die Form der Linien. Hier sind folgende Werte möglich:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;lines&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;steps&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;fsteps&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;histeps&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bars&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ibars&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;cubic&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;quadratic&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;quadraticSmooth&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusätzlich ist es möglich, Symbole anzeigen zu lassen. Unterstützt werden Font-Awesome (&#039;fa-...&#039;), Open Automation (&#039;oa-...&#039;) und FHEM-Symbole (&#039;fs-...&#039;)). Damit die Symbole korrekt angezeigt werden, muss  im Attribut &#039;&#039;&#039;data-style&#039;&#039;&#039; der Stil &amp;lt;code&amp;gt;sym&amp;lt;/code&amp;gt; gewählt werden, da sonst nur Punkte, statt der Symbole gezeichnet werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;DG.wz.HZ.Heizungsventil&amp;quot;&lt;br /&gt;
	 data-logdevice=&amp;quot;FileLog_DG.wz.HZ.Heizungsventil&amp;quot;&lt;br /&gt;
	 ...&lt;br /&gt;
	 data-style=&amp;quot;ftui l1sym&amp;quot;&lt;br /&gt;
	 data-ptype=&amp;quot;fa-cog&amp;quot;&lt;br /&gt;
	 ...&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Größe der Symbole ist in der Datei &amp;lt;code&amp;gt;css/ftui_chart.css&amp;lt;/code&amp;gt; auf 12px festgelegt. Dieser Wert kann in einer eigenen CSS-Datei durch Anpassung von &amp;lt;code&amp;gt;stroke-width&amp;lt;/code&amp;gt; überschrieben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.ftui.l0sym		{ stroke:#DDA400; stroke-width:12px; fill:none; }&lt;br /&gt;
.ftui.l1sym		{ stroke:#BBBBBB; stroke-width:12px; fill:none; }&lt;br /&gt;
.ftui.l2sym		{ stroke:#CC0000; stroke-width:12px; fill:none; }&lt;br /&gt;
.ftui.l3sym		{ stroke:#CCCC00; stroke-width:12px; fill:none; }&lt;br /&gt;
.ftui.l4sym		{ stroke:#33CC33; stroke-width:12px; fill:none; }&lt;br /&gt;
.ftui.l5sym		{ stroke:#33CCCC; stroke-width:12px; fill:none; }&lt;br /&gt;
.ftui.l6sym		{ stroke:#3333CC; stroke-width:12px; fill:none; }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;data-ptype&#039;&#039;&#039; kann auch Inhalt im Format &amp;lt;code&amp;gt;&#039;icon:1&#039;&amp;lt;/code&amp;gt; verarbeiten. Dann muss der zugehörige Wert in &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; den Pfad zu einem Icon (z.B. für Wettervorhersagen) beinhalten. Der Y-Wert wird dann vom ersten Graphen übernommen. Weitere Ausführungen hierzu im Beispiel [[#Darstellung der Wetter Icons im Diagramm]]. &lt;br /&gt;
&lt;br /&gt;
===Stapeln von Linien===&lt;br /&gt;
Über &#039;&#039;&#039;data-ptype&#039;&#039;&#039; kann zusätzlich festgelegt werden, ob Graphen übereinander gestapelt werden sollen. &amp;lt;code&amp;gt;data-ptype=&#039;lines:1&#039;&amp;lt;/code&amp;gt; bedeutet, dass der zugehörige Graph auf den Graph mit der Nummer 1 gestapelt werden soll. So etwas kann z.B. Sinn machen, wenn man den Stromverbrauch einzelner Devices darstellen und zusätzlich sehen will, wie hoch die Summe ist. Beispiel siehe unten.&lt;br /&gt;
&lt;br /&gt;
[[Datei:FTUI Widget Chart Stacked.png]]&lt;br /&gt;
&lt;br /&gt;
===Zeitstrahl / Start &amp;amp; Ende auf der X-Achse===&lt;br /&gt;
Die Attribute &#039;&#039;&#039;data-daysago_start&#039;&#039;&#039; und &#039;&#039;&#039;data-daysago_end&#039;&#039;&#039; dienen der Definition von Anfang und Ende der X-Achse. Im einfachsten Fall wird eine Anzahl an Tagen eingegeben, die sich auf das aktuelle Datum beziehen. Dabei gilt es zu beachten, dass es sich um &#039;&#039;vergangene Tage&#039;&#039; handelt. Das bedeutet, dass Tage in der Vergangenheit als positive Zahl angegeben werden, Tage in der Zukunft hingegen als negative Zahl. Es kann jeweils  auch ein fixes Datum (z.B. &#039;2013-10-23&#039;) angegeben werden. Uhrzeitangaben werden nur berücksichtigt, wenn &#039;&#039;&#039;data-nofulldays=&#039;true&#039; &#039;&#039;&#039; verwendet wird.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Relative Zeitangabe in Stunden&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Zur Ausgabe einer Anzahl an zurückliegenden Stunden bis zum aktuellen Zeitpunkt wird als Startzeitpunkt die Anzahl der Stunden angegeben werden, die angezeigt werden sollen, gefolgt vom Kleinbuchstaben &#039;&#039;&#039;h&#039;&#039;&#039;. Als Endzeitpunkt wird &#039;&#039;&#039;now&#039;&#039;&#039; gewählt.&amp;lt;br /&amp;gt;&lt;br /&gt;
Das nachfolgende Beispiel zeigt die Werte der vergangenen 3 Stunden an:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
data-nofulldays=&amp;quot;true&amp;quot;&lt;br /&gt;
data-daysago_start=&amp;quot;3h&amp;quot;&lt;br /&gt;
data-daysago_end=&amp;quot;now&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fester Zeitbereich des heutigen Tages (Stunden)&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Um ein festes Stundenfenster des heutigen Tages anzuzeigen, werden die absoluten Stundenzahlen mit negativem Vorzeichen, gefolgt vom Großbuchstaben &#039;&#039;&#039;H&#039;&#039;&#039; angegeben. Wird &#039;&#039;&#039;data-daysago_start&#039;&#039;&#039; als positiver Wert angegeben, wird die Anzahl der Stunden von heute 0:00 Uhr subtrahiert (siehe Rechenweg weiter unten).&amp;lt;br /&amp;gt;&lt;br /&gt;
Das Beispiel zeigt den Zeitbereich von heute 5:00 Uhr bis heute 22:00 Uhr:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
data-nofulldays=&amp;quot;true&amp;quot;&lt;br /&gt;
data-daysago_start=&amp;quot;-5H&amp;quot;&lt;br /&gt;
data-daysago_end=&amp;quot;-22H&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fester Zeitbereich Tage-übergreifend&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Die Zeit in Tagen kann als Gleitkommazahl angegeben werden. Damit ist es möglich, Tage und Uhrzeiten zu kombinieren. Die Werte sind dann als Teil eines ganzen Tages, bezogen auf heute 0:00 Uhr zu errechnen und mit &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; als Teiler anzugeben.&amp;lt;br /&amp;gt;&lt;br /&gt;
Das nachfolgende Beispiel zeigt einen Zeitbereich von &#039;&#039;&#039;gestern 15:00 Uhr&#039;&#039;&#039; bis &#039;&#039;&#039;morgen 3:00 Uhr&#039;&#039;&#039;.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
data-nofulldays=&amp;quot;true&amp;quot;&lt;br /&gt;
data-daysago_start=&amp;quot;0.375&amp;quot;&lt;br /&gt;
data-daysago_end=&amp;quot;-1.125&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die nachfolgenden Rechenwege sind die Einheiten nur zur Verdeutlichung angegeben. Die Einheiten werden im Attribut nicht angegeben.&lt;br /&gt;
&lt;br /&gt;
Der Wert für &#039;&#039;&#039;GESTERN&#039;&#039;&#039; wird wie folgt ermittelt:&amp;lt;br /&amp;gt;&lt;br /&gt;
Ausgangspunkt ist heute 0:00 Uhr, gestern 15:00 Uhr liegt also 9 Stunden davor. Diese 9 Stunden sind ein &amp;lt;code&amp;gt;9/24 Tag&amp;lt;/code&amp;gt; und errechnet sich so:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1d / 24h = 0.0416666...d/h&lt;br /&gt;
0.0416d/h * 9h = 0.375d&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Wert für &#039;&#039;&#039;MORGEN&#039;&#039;&#039; wird wie folgt ermittelt:&amp;lt;br /&amp;gt;&lt;br /&gt;
Ausgangspunkt ist wieder heute 0:00 Uhr, morgen 3:00 Uhr liegt dann 27 Stunden dahinter. Der Einfachheit halber werden hier nur die 3 Stunden errechnet und dann ein ganzer Tag addiert:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1d / 24h = 0.0416666...d/h&lt;br /&gt;
0.0416d/h * 3h = 0.125d&lt;br /&gt;
&lt;br /&gt;
0.125d + 1d = 1.125d&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Da das Attribut Tage in der Vergangenheit erwartet, muss für einen Wert in der Zukunft wieder eine negative Zahl angegeben werden.&lt;br /&gt;
&lt;br /&gt;
===Zeitformat der X-Achse===&lt;br /&gt;
Die Zeitanzeige auf der X-Achse kann sehr flexibel eingestellt werden. Dafür stehen verschiedene Platzhalter zur Verfügung, die durch spezielle Zeichen (&amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt; &amp;lt;/code&amp;gt; (Leerzeichen), &amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;,&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;\&amp;lt;/code&amp;gt;) getrennt werden. Alle Zeichen werden trotz Escape-Zeichen (&amp;lt;code&amp;gt;\&amp;lt;/code&amp;gt;) in der Ausgabe angezeigt.&lt;br /&gt;
&lt;br /&gt;
Folgende Platzhalter werden unterstützt:&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;mm&#039;&amp;lt;/code&amp;gt;: Minuten als zweistellige Zahl&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;hh&#039;&amp;lt;/code&amp;gt;: Stunden als zweistellige Zahl&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;dd&#039;&amp;lt;/code&amp;gt;: Tag als zweistellige Zahl (Kalenderdatum)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;MM&#039;&amp;lt;/code&amp;gt;: Monat als zweistellige Zahl (z.B. 02 für Februar)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;MMM&#039;&amp;lt;/code&amp;gt;: Monat als dreistellige Abkürzung (z.B. Dec für Dezember)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;MMMM&#039;&amp;lt;/code&amp;gt;: Langname des Monats (z.B. March)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;ee&#039;&amp;lt;/code&amp;gt;: Wochentag als zweistellige Zahl (z.B. 00 für Sonntag)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;eee&#039;&amp;lt;/code&amp;gt;: Wochentag als dreistellige Abkürzung (z.B. Mon für Montag)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;eeee&#039;&amp;lt;/code&amp;gt;: Langname des Wochentags (z.B. Tuesday)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;yy&#039;&amp;lt;/code&amp;gt;: Jahr als zweistellige Zahl (z.B. 16 für 2016)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;yyyy&#039;&amp;lt;/code&amp;gt;: Jahr als vierstellige Zahl (z.B. 2016)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;LF&#039;&amp;lt;/code&amp;gt;: Fügt einen Zeilenumbruch hinzu&lt;br /&gt;
&lt;br /&gt;
Beispiel: Der String &amp;lt;code&amp;gt;&#039;MMM\LF\yyyy&#039;&amp;lt;/code&amp;gt; zeigt &amp;lt;code&amp;gt;&#039;Jan&#039;&amp;lt;/code&amp;gt; in der ersten, und &amp;lt;code&amp;gt;&#039;2016&#039;&amp;lt;/code&amp;gt; in der zweiten Zeile. &amp;lt;code&amp;gt;&#039;MM.dd 2016&#039;&amp;lt;/code&amp;gt; wird zu &amp;lt;code&amp;gt;&#039;03.05 2016&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Fadenkreuz-Cursor===&lt;br /&gt;
Der Fadenkreuz-Cursor zeigt die Momentanwerte, indem man ihn über die Graphen bewegt. In Desktop-Browsern reicht einfaches Bewegen des Maus. Unter iOS und Android kann der Cursor wird der Cursor durch einfaches Tippen auf die neue Position bewegt.&lt;br /&gt;
&lt;br /&gt;
Mit dem Attribut &#039;&#039;&#039;data-cursorgroup&#039;&#039;&#039; können Graphen gruppiert werden. Am Cursor werden dann die Momentanwerte aller Graphen gleichzeitig angezeigt, die die selbe Zahl besitzen, sobald man die Maus über einen aus der Gruppe bewegt.&lt;br /&gt;
&lt;br /&gt;
===Legende===&lt;br /&gt;
Mit dem Attribut &#039;&#039;&#039;data-legendpos&#039;&#039;&#039; kann die Position der Legende innerhalb des Diagramms festgelegt werden. Die Position wird mit einem Array, bestehend aus zwei Werten im Format &amp;lt;code&amp;gt;&#039;[&amp;quot;&amp;lt;horizontal&amp;gt;&amp;quot;,&amp;quot;&amp;lt;vertikal&amp;gt;&amp;quot;]&#039;&amp;lt;/code&amp;gt; angegeben. Für die horizontale Positionierung sind &amp;lt;code&amp;gt;&#039;left&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&#039;right&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&#039;before&#039;&amp;lt;/code&amp;gt;, und &amp;lt;code&amp;gt;&#039;behind&#039;&amp;lt;/code&amp;gt;, die vertikale Positionierung &amp;lt;code&amp;gt;&#039;top&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&#039;bottom&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&#039;above&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&#039;below&#039;&amp;lt;/code&amp;gt; erlaubt (der Unterschied zwischen &amp;lt;code&amp;gt;&#039;left&#039;&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;&#039;before&#039;&amp;lt;/code&amp;gt; liegt darin, dass im zweiten Fall die Legende nicht in den Zeichenbereich gesetzt wird sondern vor das ganze Chart (entsprechend für &amp;lt;code&amp;gt;&#039;after&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&#039;above&#039;&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;&#039;below&#039;&amp;lt;/code&amp;gt;). Alternativ können auch Zahlen verwendet werden, die die Position in Prozent angeben. Durch verschieben mit der Maus oder durch verschieben mit dem Finger oder Stift auf Touch Devices kann die Legende auch an eine andere Position verschoben werden.&lt;br /&gt;
&lt;br /&gt;
Wenn die Legende eingeblendet ist, kann mittels Klick auf einen Legendeneintrag der zugehörige Graph ein- und ausgeblendet werden.&lt;br /&gt;
&lt;br /&gt;
===3-dimensionale Drehung===&lt;br /&gt;
&#039;&#039;&#039;data-ddd&#039;&#039;&#039; ermöglicht, den Graphen 3-dimensional zu drehen. Als Wert wird ein Array mit den 3 Winkeln für x, y und z erwartet, wobei z selbst bisher nicht unterstützt wird.&lt;br /&gt;
&lt;br /&gt;
Beispiel: &amp;lt;code&amp;gt;data-ddd=&#039;[&amp;quot;40&amp;quot;,&amp;quot;60&amp;quot;,&amp;quot;0&amp;quot;]&#039;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Wenn der 3D Modus aktiv ist (&#039;&#039;&#039;data-ddd&#039;&#039;&#039; gesetzt) sind 2 zusätzliche Parameter verfügbar um das Aussehen der Graphen zu beeinflussen. &#039;&#039;&#039;data-dddspace&#039;&#039;&#039; gibt an, wie viele pixel der Raum zwischen den einzelnen in z-Richtung hintereinander angeordneten Graphen betragen soll.&lt;br /&gt;
&#039;&#039;&#039;data-dddwidth&#039;&#039;&#039; legt fest, wie viele pixel die einzelnen Graphen tief (oder dick) sein sollen.&lt;br /&gt;
&lt;br /&gt;
Wenn das Array angegeben wird, erscheinen zwei zusätzliche Buttons im Diagramm, mit denen die Drehung in X- und Y-Richtung verändert werden kann.&lt;br /&gt;
&lt;br /&gt;
===Diagrammtitel===&lt;br /&gt;
Mit dem Attribut &#039;&#039;&#039;data-title&#039;&#039;&#039; kann dem Diagramm, ähnlich wie in FHEM-SVG-Plots, ein Titel hinzugefügt werden.&lt;br /&gt;
&lt;br /&gt;
Folgende Platzhalter werden unterstützt:&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;min1&#039;&amp;lt;/code&amp;gt;: Minimaler Y-Wert des ersten Graphs&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;max1&#039;&amp;lt;/code&amp;gt;: Maximaler Y-Wert des ersten Graphs&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;avg1&#039;&amp;lt;/code&amp;gt;: Mittlerer Y-Wert des ersten Graphs&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;cnt1&#039;&amp;lt;/code&amp;gt;: Anzahl der dargestellten Einzelwerte im ersten Graph&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;currval1&#039;&amp;lt;/code&amp;gt;: Letzter, bzw. aktuellster Y-Wert des ersten Graphs&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;mindate1&#039;&amp;lt;/code&amp;gt;: Niedrigster Wert auf der X-Achse des ersten Graphs&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;maxdate1&#039;&amp;lt;/code&amp;gt;: Höchster Wert auf der X-Achse vom ersten Graphs&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;currdate1&#039;&amp;lt;/code&amp;gt;: Letzter, bzw. aktuellster Wert auf der X-Achse des ersten Graphs&lt;br /&gt;
&lt;br /&gt;
Durch Einsetzen einer anderen Zahl statt &#039;1&#039; können auch die Werte der anderen Graphen angezeigt werden. Das Weglassen der Zahl bewirkt, dass der jeweils zutreffende Wert automatisch ermittelt wird. Bedeutet: &amp;lt;code&amp;gt;max&amp;lt;/code&amp;gt; führt dazu, dass der höchste Wert aller angezeigter Graphen verwendet wird.&lt;br /&gt;
Zusätzlich ist es möglich durch &amp;quot;$eval(&amp;lt;regexp&amp;gt;)&amp;quot; regular Expressions auszuwerten (also z.B. Berechnungen durchzuführen). In &amp;lt;regexp&amp;gt; können auch &amp;quot;$data()&amp;quot; vorkommen.&lt;br /&gt;
&lt;br /&gt;
Beispiel: &amp;lt;code&amp;gt;data-title=&amp;quot;Klima Wohnzimmer Average: $eval(parseInt($data{avg1}*10)/10)°C / Max: $eval(parseInt($data{max1}*10)/10)°C&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Buttons im Diagramm===&lt;br /&gt;
Es gibt mehrere Buttons, mit denen sich die Anzeige des Diagramms verändern lässt. &amp;lt;code&amp;gt;&amp;lt;-&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;-&amp;gt;&amp;lt;/code&amp;gt; bewegen die Graphen nach links und rechts. &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt; zoomen die Anzeige. &amp;lt;code&amp;gt;legend&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;cursor&amp;lt;/code&amp;gt; schalten die zugehörigen Anzeigen ein und aus. Falls der 3D Modus eingeschaltet ist, gibt es Buttons zum Drehen der Darstellung um die X- und Y-Achse. Falls &amp;lt;code&amp;gt;data-timeranges&amp;lt;/code&amp;gt; gesetzt ist, wird ein Pulldown Menü dargestellt, welches die Auswahl von dort definierten Zeiträumen für die X-Achse erlaubt.&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
===Einfaches Diagramm===&lt;br /&gt;
Das Beispiel zeigt ein einfaches Diagramm mit 4 unterschiedlich formatierten Graphen, Legende und Momentanwerten am Fadenkreuz-Cursor.&lt;br /&gt;
&lt;br /&gt;
[[File:Chart_tabletUI.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	data-logdevice=&#039;[&amp;quot;Log.Garden&amp;quot;,&amp;quot;Log.Garden&amp;quot;,&amp;quot;Log.Garden&amp;quot;,&amp;quot;Log.Predicted&amp;quot;]&#039;&lt;br /&gt;
	data-columnspec=&#039;[&amp;quot;4:Garden.T:15:&amp;quot;,&amp;quot;10:Garden.T:0:delta-h&amp;quot;,&amp;quot;10:Garden.T:0:delta-d&amp;quot;,&amp;quot;4:predicted.*:15:&amp;quot;]&#039;&lt;br /&gt;
	data-style=&#039;[&amp;quot;ftui l0fill&amp;quot;,&amp;quot;ftui l1fill&amp;quot;,&amp;quot;ftui l2&amp;quot;,&amp;quot;ftui l3dot&amp;quot;]&#039;&lt;br /&gt;
	data-ptype=&#039;[&amp;quot;lines&amp;quot;,&amp;quot;histeps&amp;quot;,&amp;quot;histeps&amp;quot;,&amp;quot;cubic&amp;quot;]&#039;&lt;br /&gt;
	data-uaxis=&#039;[&amp;quot;primary&amp;quot;,&amp;quot;secondary&amp;quot;,&amp;quot;secondary&amp;quot;,&amp;quot;primary&amp;quot;]&#039;&lt;br /&gt;
	data-legend=&#039;[&amp;quot;Temperature&amp;quot;,&amp;quot;Rain/hour&amp;quot;,&amp;quot;Rain/day&amp;quot;,&amp;quot;Predicted Temp.&amp;quot;]&#039;&lt;br /&gt;
	data-yunit=&amp;quot;°C&amp;quot;&lt;br /&gt;
	data-ytext=&amp;quot;Temperature&amp;quot;&lt;br /&gt;
	data-minvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	data-maxvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	data-yunit_sec=&amp;quot;mm&amp;quot;&lt;br /&gt;
	data-ytext_sec=&amp;quot;Rain (mm)&amp;quot;&lt;br /&gt;
	data-height=&amp;quot;250&amp;quot;&lt;br /&gt;
	data-yticks=&amp;quot;auto&amp;quot;&lt;br /&gt;
	data-minvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	data-maxvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	data-nofulldays=&amp;quot;true&amp;quot;&lt;br /&gt;
	data-daysago_start=&amp;quot;2013-08-13T00:00:00&amp;quot;&lt;br /&gt;
	data-daysago_end=&amp;quot;2013-08-14T00:00:00&amp;quot;&lt;br /&gt;
	data-cursorgroup=&amp;quot;1&amp;quot;&lt;br /&gt;
	data-scrollgroup=&amp;quot;1&amp;quot;&lt;br /&gt;
	data-xticks=&amp;quot;auto&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===7-Tage-Wettervorhersage mit Proplanta===&lt;br /&gt;
In diesem Beispiel wird gezeigt, wie die Vorhersagewerte von [[PROPLANTA]] in einem Diagramm dargestellt werden können. Da die Werte nicht in einer Datenbank oder einem FileLog vorliegen, müssen sie über [[LogProxy]] verarbeitet werden. Dafür sind einige Vorbereitungen in FHEM nötig.&lt;br /&gt;
&lt;br /&gt;
[[File:FTUI_Widget_Chart-fc-Proplanta.png|941px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.&#039;&#039;&#039; Ein LogProxy-Device muss vorhanden sein:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define myLogProxy logProxy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2.&#039;&#039;&#039; In der Datei &amp;lt;code&amp;gt;99_myUtils.pm&amp;lt;/code&amp;gt; muss folgende Routine hinzugefügt werden, die die Daten bereitstellt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#---------------------------------------&lt;br /&gt;
# Proplanta LogProxy-Funktion&lt;br /&gt;
#---------------------------------------&lt;br /&gt;
sub logProxy_proplanta2Plot($$$$;$$) {&lt;br /&gt;
	my ($device, $fcValue, $from, $to, $fcHour, $expMode) = @_;&lt;br /&gt;
    my $regex;&lt;br /&gt;
    my @rl;&lt;br /&gt;
    &lt;br /&gt;
	return undef if(!$device);&lt;br /&gt;
    &lt;br /&gt;
    if($fcValue =~ s/_$//) {&lt;br /&gt;
        $regex = &amp;quot;^fc[\\d]+_&amp;quot;.$fcValue.&amp;quot;[\\d]{2}\$&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
        $regex = &amp;quot;^fc[\\d]+_&amp;quot;.$fcValue.&amp;quot;\$&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    $fcHour = 12 if(!defined $fcHour);&lt;br /&gt;
    $expMode = &amp;quot;point&amp;quot; if(!defined $expMode);&lt;br /&gt;
&lt;br /&gt;
	if( defined($defs{$device}) ) {&lt;br /&gt;
		if( $defs{$device}{TYPE} eq &amp;quot;PROPLANTA&amp;quot; ) {&lt;br /&gt;
            @rl = sort{&lt;br /&gt;
                my ($an) = ($a =~ m/fc(\d+)_.*/);&lt;br /&gt;
                my ($bn) = ($b =~ m/fc(\d+)_.*/);&lt;br /&gt;
                $an &amp;lt;=&amp;gt; $bn or $a cmp $b;&lt;br /&gt;
                }( grep /${regex}/,keys %{$defs{$device}{READINGS}} );&lt;br /&gt;
			return undef if( !@rl );&lt;br /&gt;
		} else {&lt;br /&gt;
			Log3 undef, 2, &amp;quot;logProxy_proplanta2Plot: $device is not a PROPLANTA device&amp;quot;;&lt;br /&gt;
			return undef;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	my $fromsec = SVG_time_to_sec($from);&lt;br /&gt;
	my $tosec   = SVG_time_to_sec($to);&lt;br /&gt;
	my $sec = $fromsec;&lt;br /&gt;
	my ($h,$fcDay,$mday,$mon,$year);&lt;br /&gt;
	my $timestamp;&lt;br /&gt;
    &lt;br /&gt;
	my $reading;&lt;br /&gt;
	my $value;&lt;br /&gt;
	my $prev_value;&lt;br /&gt;
	my $min = 999999;&lt;br /&gt;
	my $max = -999999;&lt;br /&gt;
	my $ret = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	# while not end of plot range reached&lt;br /&gt;
	while(($sec &amp;lt; $tosec) &amp;amp;&amp;amp; @rl) {&lt;br /&gt;
		#remember previous value for start of plot range&lt;br /&gt;
		$prev_value = $value;&lt;br /&gt;
&lt;br /&gt;
		$reading = shift @rl;&lt;br /&gt;
        ($fcDay) = $reading =~ m/^fc(\d+).*/;&lt;br /&gt;
   		$h = ($reading =~ m/.*(\d\d)$/)?$1:$fcHour;&lt;br /&gt;
		$value = ReadingsVal($device,$reading,undef);&lt;br /&gt;
        &lt;br /&gt;
		($mday,$mon,$year) = split(&#039;\.&#039;,ReadingsVal($device,&amp;quot;fc&amp;quot;.$fcDay.&amp;quot;_date&amp;quot;,undef));&lt;br /&gt;
		$timestamp = sprintf(&amp;quot;%04d-%02d-%02d_%02d:%02d:%02d&amp;quot;, $year, $mon, $mday, $h, 0, 0);&lt;br /&gt;
		$sec = SVG_time_to_sec($timestamp);&lt;br /&gt;
        &lt;br /&gt;
		# skip all values before start of plot range&lt;br /&gt;
		next if( SVG_time_to_sec($timestamp) &amp;lt; $fromsec );&lt;br /&gt;
&lt;br /&gt;
		# add first value at start of plot range&lt;br /&gt;
		if( !$ret &amp;amp;&amp;amp; $prev_value ) {&lt;br /&gt;
		  $min = $prev_value if( looks_like_number($prev_value) &amp;amp;&amp;amp; ($prev_value &amp;lt; $min) );&lt;br /&gt;
		  $max = $prev_value if( looks_like_number($prev_value) &amp;amp;&amp;amp; ($prev_value &amp;gt; $max) );&lt;br /&gt;
		  $ret .= &amp;quot;$from $prev_value\n&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		# done if after end of plot range&lt;br /&gt;
		last if($sec &amp;gt; $tosec);&lt;br /&gt;
&lt;br /&gt;
		$min = $value if( looks_like_number($value) &amp;amp;&amp;amp; ($value &amp;lt; $min ) );&lt;br /&gt;
		$max = $value if( looks_like_number($value) &amp;amp;&amp;amp; ($value &amp;gt; $max ) );&lt;br /&gt;
&lt;br /&gt;
		# add actual controll point&lt;br /&gt;
		$ret .= &amp;quot;$timestamp $value\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#		Log 1, &amp;quot;$timestamp $value -0- $reading&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
    if(($sec &amp;lt; $tosec) &amp;amp;&amp;amp; !@rl &amp;amp;&amp;amp; ($expMode eq &amp;quot;day&amp;quot;)) {&lt;br /&gt;
    	$timestamp = sprintf(&amp;quot;%04d-%02d-%02d_%02d:%02d:%02d&amp;quot;, $year, $mon, $mday, 23, 59, 59);&lt;br /&gt;
    	if(SVG_time_to_sec($timestamp) &amp;lt; $tosec) {&lt;br /&gt;
        	$ret .= &amp;quot;$timestamp $value\n&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
			$ret .= &amp;quot;$to $value\n&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    elsif(($sec &amp;gt; $tosec) &amp;amp;&amp;amp; ($expMode eq &amp;quot;day&amp;quot;)) {&lt;br /&gt;
       	$value = $prev_value + ($value - $prev_value)*(86400 + ($tosec - $sec))/86400;&lt;br /&gt;
       	$ret .= &amp;quot;$to $value\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
	return ($ret,$min,$max,$prev_value);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend können die Daten im Chart-Widget angezeigt werden. Der Device-Name von Proplanta heißt hier im Beispiel &amp;lt;code&amp;gt;AU.xx.WE.Proplanta&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;AU.xx.WE.Proplanta&amp;quot;&lt;br /&gt;
	 data-logdevice=&#039;[&lt;br /&gt;
	 					&amp;quot;myLogProxy&amp;quot;,&lt;br /&gt;
	 					&amp;quot;myLogProxy&amp;quot;,&lt;br /&gt;
	 					&amp;quot;myLogProxy&amp;quot;&lt;br /&gt;
	 				]&#039;&lt;br /&gt;
	 data-columnspec=&#039;[&lt;br /&gt;
	 					&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22rain_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
	 					&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22chOfRain_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
	 					&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22cloud_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;&lt;br /&gt;
	 				]&#039;&lt;br /&gt;
	 data-style=&#039;[&lt;br /&gt;
	 					&amp;quot;ftui l6fill&amp;quot;,&lt;br /&gt;
	 					&amp;quot;ftui l5fill&amp;quot;,&lt;br /&gt;
	 					&amp;quot;ftui l1fill&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-ptype=&#039;[&lt;br /&gt;
	 					&amp;quot;steps&amp;quot;,&lt;br /&gt;
	 					&amp;quot;quadraticSmooth&amp;quot;,&lt;br /&gt;
	 					&amp;quot;quadraticSmooth&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-uaxis=&#039;[&lt;br /&gt;
	 					&amp;quot;primary&amp;quot;,&lt;br /&gt;
	 					&amp;quot;secondary&amp;quot;,&lt;br /&gt;
	 					&amp;quot;secondary&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-legend=&#039;[&lt;br /&gt;
	 					&amp;quot;Regen&amp;quot;,&lt;br /&gt;
	 					&amp;quot;Regenwahrscheinlichkeit&amp;quot;,&lt;br /&gt;
	 					&amp;quot;Wolken&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-yunit=&amp;quot;mm&amp;quot;&lt;br /&gt;
	 data-ytext=&amp;quot;Regen&amp;quot;&lt;br /&gt;
	 data-yunit_sec=&amp;quot;%&amp;quot;&lt;br /&gt;
	 data-ytext_sec=&amp;quot;Chance auf Regen / Wolken&amp;quot;&lt;br /&gt;
	 data-timeformat=&amp;quot;eeee&amp;quot;&lt;br /&gt;
	 data-minvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-maxvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-minvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-maxvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-daysago_start = &amp;quot;0&amp;quot;&lt;br /&gt;
	 data-daysago_end = &amp;quot;-7&amp;quot;&lt;br /&gt;
	 data-xticks=&amp;quot;1440&amp;quot;&lt;br /&gt;
	 data-yticks=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-title=&amp;quot;7-Tage-Wettervorhersage&amp;quot;&lt;br /&gt;
	 data-showlegend=&amp;quot;true&amp;quot;&lt;br /&gt;
	 class=&amp;quot;nobuttons fullsize&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hilfreiche Links und Quellen zu diesem Beispiel:&#039;&#039;&#039;&lt;br /&gt;
*[[LogProxy|LogProxy im FHEM-Wiki]]&lt;br /&gt;
*{{Link2Forum|Topic=22967|Message=246973|LinkText=Stundengenaue Wettervorhersage (#1) im FHEM-Forum}}&lt;br /&gt;
*{{Link2Forum|Topic=22967|Message=334713|LinkText=Stundengenaue Wettervorhersage (#2) im FHEM-Forum}}&lt;br /&gt;
&lt;br /&gt;
===Darstellung der Wetter Icons im Diagramm===&lt;br /&gt;
&lt;br /&gt;
[[File:Wetterchart2.png]]&lt;br /&gt;
&lt;br /&gt;
Wie oben bereits beschrieben, gibt es beim Chart grundsätzlich die Möglichkeit, Icons, welche in Form von URLs in den Logs abgelegt sind oder welche per logProxy generiert werden, darzustellen. Die Icons werden auf genau dem gleichen Weg von FHEM gelesen, wie alle anderen Datenpunkte. Im Folgenden wird ein Beispiel gezeigt, mit dem die im Proplanta Modul als Readings abgelegten Icons per logProxy Funktion gelesen und in ein Chart eingebaut werden könnnen.&lt;br /&gt;
Da es beim Proplanta Modul für die ersten 7 Tage nicht das Reading &amp;lt;code&amp;gt;fc#_weatherIcon&amp;lt;/code&amp;gt; gibt, sondern mehrere Readings für unterschiedliche Tageszeiten wogegen für die zweiten 7 Tage ausschließlich das Reading &amp;lt;code&amp;gt;fc#_weatherIcon&amp;lt;/code&amp;gt; vorhanden ist, sollte per &amp;lt;code&amp;gt;attr device userReading&amp;lt;/code&amp;gt; mit folgendem Eintrag dafür gesorgt werden, dass für alle Tage ein Reading &amp;lt;code&amp;gt;fc#_weatherIcon&amp;lt;/code&amp;gt; vorhanden ist (alternativ könnten auch 2 Graphen gezeichnet werden, wobei der erste dann nur die ersten 7 Tage enthält und der zweite die letzen 7 Tage, will man nur die ersten 7 Tage darstellen braucht man das userReading nicht unbedingt).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
fc0_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc0_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);},&lt;br /&gt;
fc1_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc1_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);},&lt;br /&gt;
fc2_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc2_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);},&lt;br /&gt;
fc3_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc3_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);},&lt;br /&gt;
fc4_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc4_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);},&lt;br /&gt;
fc5_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc5_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);},&lt;br /&gt;
fc6_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc6_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Um die Icons darzustellen muss ein zusätzlicher Graph definiert werden. Dieser nutzt neben der Columnspec, die die URLs abruft den Parameter &amp;lt;code&amp;gt;data-ptype=&amp;quot;icons:#&amp;quot;&amp;lt;/code&amp;gt; (# ist eine Zahl und steht für die Nummer, beginnend bei 0 des Graphen, welcher für die y-Position der Icons verwendet werden soll) und den Stil &amp;lt;code&amp;gt;sym&amp;lt;/code&amp;gt;. Der Wert für die Symbolgröße sollte z.B. durch eine zusätzliche Definition im File fhem-tablet-ui-user.css in der Form:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* icon lines */&lt;br /&gt;
.ftui.l99icon	{ stroke:#DDA400; stroke-width:48px; fill:none; }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Im folgenden ein Beispiel, welches eine Linie für die Maximale Tagestemperatur zeichnet und auf dieser Linie die Wetter Icons darstellt.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;AU.xx.WE.Proplanta&amp;quot;&lt;br /&gt;
	 data-logdevice=&#039;[&lt;br /&gt;
	 					&amp;quot;myLogProxy&amp;quot;,&lt;br /&gt;
	 					&amp;quot;myLogProxy&amp;quot;&lt;br /&gt;
	 				]&#039;&lt;br /&gt;
	 data-columnspec=&#039;[&lt;br /&gt;
	 					&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22weatherIcon\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
	 					&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22tempMax\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;&lt;br /&gt;
	 				]&#039;&lt;br /&gt;
	 data-style=&#039;[&lt;br /&gt;
	 					&amp;quot;ftui l99icon&amp;quot;,&lt;br /&gt;
	 					&amp;quot;ftui l1fill&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-ptype=&#039;[&lt;br /&gt;
	 					&amp;quot;icons:1&amp;quot;,&lt;br /&gt;
	 					&amp;quot;quadraticSmooth&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-uaxis=&#039;[&lt;br /&gt;
	 					&amp;quot;primary&amp;quot;,&lt;br /&gt;
	 					&amp;quot;primary&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-legend=&#039;[&lt;br /&gt;
	 					&amp;quot;Wetterbedingung&amp;quot;,&lt;br /&gt;
	 					&amp;quot;Max. Temperature&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-yunit=&amp;quot;°C&amp;quot;&lt;br /&gt;
	 data-ytext=&amp;quot;Temperature (°C)&amp;quot;&lt;br /&gt;
	 data-timeformat=&amp;quot;ee\LF\dd.MM&amp;quot;&lt;br /&gt;
	 data-minvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-maxvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-minvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-maxvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-daysago_start=&amp;quot;-1w&amp;quot;&lt;br /&gt;
	 data-y_margin=&amp;quot;20&amp;quot;&lt;br /&gt;
	 data-daysago_end=&amp;quot;-3w&amp;quot;&lt;br /&gt;
	 data-xticks=&amp;quot;1440&amp;quot;&lt;br /&gt;
	 data-yticks=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-title=&amp;quot;14-Tage-Wettervorhersage&amp;quot;&lt;br /&gt;
	 data-showlegend=&amp;quot;true&amp;quot;&lt;br /&gt;
	 class=&amp;quot;nobuttons fullsize&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Kuchendiagramme===&lt;br /&gt;
In folgendem Beispiel wird gezeigt, wie man ein &amp;quot;Kuchendiagramm&amp;quot; darstellen kann.&lt;br /&gt;
&lt;br /&gt;
[[File:PieChart.png]]&lt;br /&gt;
&lt;br /&gt;
Ähnlich wie bei den Beispielen für die Wetter Darstellungen wird hierzu auch wieder logProxy benötigt. Zunächst muss die folgende zusätzliche Funktion in &amp;lt;code&amp;gt;99_myUtils.pm&amp;lt;/code&amp;gt; einfügen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#---------------------------------------&lt;br /&gt;
# Funktion zum Erzeugen der Inputs für Kuchendiagramme&lt;br /&gt;
#---------------------------------------&lt;br /&gt;
sub logProxy_values2PieChart($$$$;$$) {&lt;br /&gt;
	my ($device, $reading, $angle_start, $angle_dif, $inner_rad, $show_text) = @_;&lt;br /&gt;
	Log3 undef, 1, &amp;quot;$device, $reading, $angle_start, $angle_dif, $inner_rad, $show_text\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	use constant PI =&amp;gt; 4 * atan2(1,1);&lt;br /&gt;
	&lt;br /&gt;
	my $value=ReadingsVal($device,$reading,0);&lt;br /&gt;
&lt;br /&gt;
	my $angle_delta = $value/100*360;&lt;br /&gt;
	$angle_start = $angle_start/100*360;&lt;br /&gt;
	&lt;br /&gt;
	my $rad=10;&lt;br /&gt;
	my $irad=0;&lt;br /&gt;
	if ($inner_rad) {&lt;br /&gt;
		$irad = $rad*$inner_rad;&lt;br /&gt;
	}&lt;br /&gt;
	my $angle=$angle_start/360*2.0*PI;&lt;br /&gt;
	my $x=$irad*sin($angle);&lt;br /&gt;
	my $y=$irad*cos($angle);&lt;br /&gt;
	my $ret .= &amp;quot;;p &amp;quot;.$x.&amp;quot; &amp;quot;.$y.&amp;quot;\n&amp;quot;; # add segment at angle $angle&lt;br /&gt;
	&lt;br /&gt;
	for (my $i=$angle_start; $i&amp;lt;=$angle_start+$angle_delta; $i+=$angle_dif) {&lt;br /&gt;
		$angle = $i/360*2.0*PI;&lt;br /&gt;
		$x = $rad*sin($angle);&lt;br /&gt;
		$y = $rad*cos($angle);&lt;br /&gt;
		$ret .= &amp;quot;;p &amp;quot;.$x.&amp;quot; &amp;quot;.$y.&amp;quot;\n&amp;quot;; # add segment at angle $angle&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	$angle = ($angle_start+$angle_delta)/360*2.0*PI; # add last segment &lt;br /&gt;
	$ret .= &amp;quot;;p &amp;quot;.$rad*sin($angle).&amp;quot; &amp;quot;.$rad*cos($angle).&amp;quot;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	if ($inner_rad) {&lt;br /&gt;
		for (my $i=$angle_start; $i&amp;lt;$angle_start+$angle_delta; $i+=$angle_dif) {&lt;br /&gt;
			$angle = ($angle_start+$angle_start+$angle_delta-$i)/360*2.0*PI;&lt;br /&gt;
			$x = $irad*sin($angle);&lt;br /&gt;
			$y = $irad*cos($angle);&lt;br /&gt;
			$ret .= &amp;quot;;p &amp;quot;.$x.&amp;quot; &amp;quot;.$y.&amp;quot;\n&amp;quot;; # add segment at angle $angle&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$angle = ($angle_start)/360*2.0*PI; # add last segment &lt;br /&gt;
	$ret .= &amp;quot;;p &amp;quot;.$irad*sin($angle).&amp;quot; &amp;quot;.$irad*cos($angle).&amp;quot;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	if ($show_text) { # show text values&lt;br /&gt;
		$x = ($rad+$irad)/2*sin((2*$angle_start+$angle_delta)/2/360*2.0*PI);&lt;br /&gt;
		$y = ($rad+$irad)/2*cos((2*$angle_start+$angle_delta)/2/360*2.0*PI);&lt;br /&gt;
&lt;br /&gt;
		$ret .= &amp;quot;;t &amp;quot;.$x.&amp;quot; &amp;quot;.$y.&amp;quot; middle &amp;quot;.$show_text.&amp;quot;:&amp;quot;.$value.&amp;quot;%\n&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return($ret);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
In FHEM braucht man Readings, welche eine Zahl enthalten, die als Prozentwert interpretiert wird. Für jeden Prozentwert (also für jedes Reading) generiert die o.a. Funktion nun den Chart Input für ein Kuchenstück und liefert diesen als Antwort auf das GET, welches das Chart Widget auslöst. Dazu braucht die Funktion folgende Parameter: (Name des FHEM Devices, Name des Readings, Start Winkel des Kuchenstücks (Mathematisch gegen den Uhrzeigersinn in Grad), Delta Winkel zum Zeichnen (legt fest in welchen Schritten der Teilkreis des Kuchenstücks gezeichnet wird), Skalierungsfaktor für inneren Ring wenn ein Ring gezeichtnet werden soll (0 bedeutet komplette Kuchenstücke), optionaler Text der ins Kuchenstück vor die Prozentzahl geschrieben wird).&lt;br /&gt;
Im Folgenden eine Beispielkonfiguration für die Darstellung als Kuchendiagramm, die Readings heißen hier dPer1 bis dPer4. Der Startwinkel wird duch Aufsummierung der jeweils vorher schon gezeichneten Kuchenstücke gebildet, dadurch entstehen aneinander hängende Stücke.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
[[Datei:[[Datei:Beispiel.jpg]]]]&amp;lt;div class=&amp;quot;normal noaxes nobuttons&amp;quot;&lt;br /&gt;
        data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
        data-logdevice=&#039;[&amp;quot;lp&amp;quot;]&#039;&lt;br /&gt;
		data-logfile=&amp;quot;CURRENT&amp;quot;&lt;br /&gt;
        data-columnspec=&#039;[&lt;br /&gt;
			&amp;quot;Func:logProxy_values2PieChart(\&amp;quot;dPer1\&amp;quot;,\&amp;quot;state\&amp;quot;,ReadingsVal(\&amp;quot;dPer4\&amp;quot;,\&amp;quot;state\&amp;quot;,0)+ReadingsVal(\&amp;quot;dPer3\&amp;quot;,\&amp;quot;state\&amp;quot;,0),5,0,\&amp;quot;first\&amp;quot;)&amp;quot;,&lt;br /&gt;
			&amp;quot;Func:logProxy_values2PieChart(\&amp;quot;dPer2\&amp;quot;,\&amp;quot;state\&amp;quot;,ReadingsVal(\&amp;quot;dPer4\&amp;quot;,\&amp;quot;state\&amp;quot;,0)+ReadingsVal(\&amp;quot;dPer3\&amp;quot;,\&amp;quot;state\&amp;quot;,0)+ReadingsVal(\&amp;quot;dPer1\&amp;quot;,\&amp;quot;state\&amp;quot;,0),5,0,\&amp;quot;second\&amp;quot;)&amp;quot;,&lt;br /&gt;
			&amp;quot;Func:logProxy_values2PieChart(\&amp;quot;dPer3\&amp;quot;,\&amp;quot;state\&amp;quot;,ReadingsVal(\&amp;quot;dPer4\&amp;quot;,\&amp;quot;state\&amp;quot;,0),5,0,\&amp;quot;third\&amp;quot;)&amp;quot;,&lt;br /&gt;
			&amp;quot;Func:logProxy_values2PieChart(\&amp;quot;dPer4\&amp;quot;,\&amp;quot;state\&amp;quot;,0,5,0,\&amp;quot;fourth\&amp;quot;)&amp;quot;&lt;br /&gt;
		]&#039;&lt;br /&gt;
        data-style=&#039;[&amp;quot;ftui l0fill&amp;quot;,&amp;quot;ftui l1fill&amp;quot;,&amp;quot;ftui l2fill&amp;quot;,&amp;quot;ftui l3fill&amp;quot;]&#039;&lt;br /&gt;
        data-ptype=&#039;[&amp;quot;lines&amp;quot;]&#039;&lt;br /&gt;
        data-uaxis=&#039;[&amp;quot;primary&amp;quot;]&#039;&lt;br /&gt;
        data-legend=&#039;[&amp;quot;First&amp;quot;,&amp;quot;Second&amp;quot;,&amp;quot;Third&amp;quot;,&amp;quot;Fourth&amp;quot;]&#039;&lt;br /&gt;
		data-legendpos=&#039;[&amp;quot;left&amp;quot;,&amp;quot;top&amp;quot;]&#039;&lt;br /&gt;
        data-yunit=&amp;quot;&amp;quot;&lt;br /&gt;
        data-height=&amp;quot;300&amp;quot;&lt;br /&gt;
        data-width=&amp;quot;300&amp;quot;&lt;br /&gt;
		data-ddd=&#039;[&amp;quot;-40&amp;quot;,&amp;quot;0&amp;quot;,&amp;quot;0&amp;quot;]&#039;&lt;br /&gt;
		data-dddspace=&#039;[&amp;quot;-10&amp;quot;]&#039;&lt;br /&gt;
		data-dddwidth=&#039;[&amp;quot;10&amp;quot;]&#039;&lt;br /&gt;
		data-showlegend=&amp;quot;true&amp;quot;&lt;br /&gt;
		data-legend_horiz=&amp;quot;true&amp;quot;&lt;br /&gt;
        data-xticks=&amp;quot;auto&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Fensterstatus offen/geschlossen===&lt;br /&gt;
Dieses Beispiel zeigt, wie ein Fensterkontakt, dessen Reading die Werte &amp;lt;code&amp;gt;closed&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;open&amp;lt;/code&amp;gt; einnimmt, als Graph gezeichnet werden kann. Technisch gesehen werden hier die Werte &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; gezeichnet, indem über das Attribut &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; dem Zustand &amp;lt;code&amp;gt;open&amp;lt;/code&amp;gt; der Wert &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; und allen anderen Zuständen der Wert &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; zugeordnet wird. Über das Attribut &#039;&#039;&#039;data-yticks&#039;&#039;&#039; wird die Beschriftung an der Y-Achse (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;) gegen einen frei definierbaren Text ausgetauscht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	data-device=&amp;quot;wz_fensterstatus&amp;quot;&lt;br /&gt;
	data-logdevice=&#039;[&amp;quot;myDbLog&amp;quot;]&#039;&lt;br /&gt;
	data-logfile=&#039;[&amp;quot;HISTORY&amp;quot;]&#039;&lt;br /&gt;
	data-columnspec=&#039;[&amp;quot;wz_fensterstatus:state:0::$val=($val=~\\x22open\\x22?1:0)&amp;quot;]&#039;&lt;br /&gt;
	data-style=&#039;[&amp;quot;ftui l4fill&amp;quot;]&#039;&lt;br /&gt;
	data-ptype=&#039;[&amp;quot;steps&amp;quot;]&#039;&lt;br /&gt;
	data-height=&amp;quot;290&amp;quot;&lt;br /&gt;
	data-yticks=&#039;[[0,&amp;quot;geschlossen&amp;quot;],[1,&amp;quot;offen&amp;quot;]]&#039;&lt;br /&gt;
	data-minvalue=&amp;quot;0&amp;quot;&lt;br /&gt;
	data-maxvalue=&amp;quot;1.1&amp;quot;&lt;br /&gt;
	data-nofulldays=&amp;quot;true&amp;quot;&lt;br /&gt;
	data-daysago_start=&amp;quot;1&amp;quot;&lt;br /&gt;
	data-daysago_end=&amp;quot;-1&amp;quot;&lt;br /&gt;
	data-cursorgroup=&amp;quot;1&amp;quot;&lt;br /&gt;
	data-scrollgroup=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Das Beispiel funktioniert nur mit DbLog. Falls Logfiles verwendet werden muss statt &#039;$val&#039; &#039;$fld[&#039;&#039;num&#039;&#039;]&#039; verwendet werden. Hierbei steht &#039;&#039;num&#039;&#039; für die Spalte (beginnend bei 0) in der die Daten stehen.&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
{{Link2Forum|Topic= 48450 |Message=401006|LinkText=Thread im FHEM-Forum}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Tablet UI|Chart]]&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Chart&amp;diff=27293</id>
		<title>FTUI Widget Chart</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Chart&amp;diff=27293"/>
		<updated>2018-07-03T09:30:38Z</updated>

		<summary type="html">&lt;p&gt;Eki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das [[{{PAGENAME}}|Chart Widget]] ist ein Widget für [[FHEM Tablet UI]], mit dem sich verschiedenste Diagramme darstellen lassen. Die Aneinanderreihung mehrerer Werte eines Device-Readings zu einem zeitlichen Verlauf wird dabei als Graph bezeichnet.&lt;br /&gt;
&lt;br /&gt;
Es können beliebige Werte dargestellt und entsprechend der Sinnhaftigkeit, oder persönlichem Geschmack, formatiert werden. Farbe und Form der Linien sind je Graph einstellbar, auch wenn mehrere gleichzeitig in einem Diagramm angezeigt werden.&lt;br /&gt;
&lt;br /&gt;
Jedes Diagramm kann zwei Y-Achsen besitzen. Die primäre Y-Achse (primary) wird auf der linken Seite angezeigt, die sekundäre Y-Achse (secondary) auf der rechten Seite. Beide Achsen können unterschiedlich formatiert werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Chart_tabletUI.png&lt;br /&gt;
Datei:FTUI Widget Chart Stacked.png&lt;br /&gt;
Datei:FTUI Widget Chart-fc-Proplanta.png&lt;br /&gt;
Datei:Wetterchart2.png&lt;br /&gt;
Datei:PieChart.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Attribute==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:150px&amp;quot;|Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-device&#039;&#039;&#039;||Name des FHEM-Device, das die Aktualisierung des Charts triggert||||data-device=&amp;quot;WohnzimmerHeizung&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-get&#039;&#039;&#039;||Reading, das das Update des Diagramms triggert||&#039;STATE&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-logdevice&#039;&#039;&#039;||Name des Log-Device, das dargestellt werden soll, oder ein Array, um mehrere Werte in einem Diagramm darzustellen||||data-logdevice=&amp;quot;FileLog_WohnzimmerHeizung&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-logfile&#039;&#039;&#039;|| Name des Log-Files, aus dem die Daten entnommen werden sollen (oder Array)||&#039;-&#039; = aktuelle Datei||data-logfile=&amp;quot;WohnzimmerHeizung-2015.log&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-columnspec&#039;&#039;&#039;||Ermittelt den Wert aus dem Log-File, der angezeigt werden soll (oder Array)||||data-columnspec=&amp;quot;4:meas.*&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-style&#039;&#039;&#039;||Stil, wie die Graph-Linien dargestellt werden sollen (z.B. &#039;SVGplot l0&#039; oder &#039;ftui l0dash&#039;), oder ein Array, wenn mehrere Linien unterschiedlich dargestellt werden sollen (siehe [[#Aussehen_der_Linien|Hinweise]])||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-ptype&#039;&#039;&#039;||Form, wie die Graphen dargestellt werden sollen (z.B. &#039;lines&#039;, &#039;cubic&#039; oder &#039;fa-cog&#039;), oder ein Array (siehe [[#Form_der_Linien|Hinweise]])||&#039;lines&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-uaxis&#039;&#039;&#039;||Name der Achse, die verwendet werden soll (&#039;primary&#039; = links, oder &#039;secondary&#039; = rechts), oder ein Array||&#039;primary&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-legend&#039;&#039;&#039;||Bezeichnung des Graphen (wird in Legende und am Cursor angezeigt), oder ein Array||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-minvalue&#039;&#039;&#039;||Minimaler Wert, der auf der linken Y-Achse (&#039;primary&#039;) angezeigt werden soll. &#039;auto&#039; = automatische Berechnung||&#039;10&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-maxvalue&#039;&#039;&#039;||Maximaler Wert, der auf der linken Y-Achse (&#039;primary&#039;) angezeigt werden soll. &#039;auto&#039; = automatische Berechnung||&#039;30&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-minvalue_sec&#039;&#039;&#039;||Minimaler Wert, der auf der rechten Y-Achse (&#039;secondary&#039;) angezeigt werden soll. &#039;auto&#039; = automatische Berechnung||&#039;auto&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-maxvalue_sec&#039;&#039;&#039;||Maximaler Wert, der auf der rechten Y-Achse (&#039;secondary&#039;) angezeigt werden soll. &#039;auto&#039; = automatische Berechnung||&#039;auto&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-xticks&#039;&#039;&#039;||Abstand zwischen den vertikalen Hilfslinien (bezogen auf die X-Achse) in Minuten. &#039;auto&#039; = automatische Berechnung||&#039;auto&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yticks&#039;&#039;&#039;||Abstand zwischen den horizontalen Hilfslinien (bezogen auf die linke Y-Achse). Kann auch ein Array mit Werte-Paaren enthalten, um die Linien mit Text zu beschriften.||&#039;auto&#039;||data-yticks=&#039;[[0,&amp;quot;open&amp;quot;],[1,&amp;quot;closed&amp;quot;]]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yticks_format&#039;&#039;&#039;||Dient zur Formatierung der Ticks der Y-Achse. Die Formatierung geschieht über Platzhalter, Trenner und einen beliebigen durch &#039; &#039; getrennten Text. Als Platzhalter dient ein oder mehrere &#039;#&#039;, als Trenner können &#039;.&#039;, &#039;,&#039; und &#039;:&#039; verwendet werden. Ist ein Trenner enthalten (z.B. &#039;#.##&#039;) dann bedeutet das in dem Beispiel, dass der Ytick mit 2 Nachkommastellen versehen wird und vorne Platz für eine Stelle vor dem Komma vorgehalten wird (führende Nullen werden nicht dargestellt, aber de Platz wird reserviert so dass das ganze rechtsbündig immer passt). Ist kein Trenner vorhanden, dann wird der Ytick auf die Summe der Platzhalter mit einer festen Gesamtbreite gesetzt (#### würde also bedeuten, dass immer 4 Stellen (ohne Trenner) verwendet werden. aus 0.4 würde 0.400 aus 10.437 würde 10.44). Als Trenner kann man z.B. für Zeiten auch einen &#039;:&#039; verwenden und dadurch auch so etwas wie &amp;quot;12:00 Uhr&amp;quot; realisieren (in dem Beispiel wäre data-yticks_format=&amp;quot;##:## Uhr&amp;quot; und kein data-yunit oder data-yticks=&amp;quot;##:##&amp;quot; und data-yunit=&amp;quot;Uhr&amp;quot;).||||data-yticks_format=&amp;quot;#.##&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yticks_sec&#039;&#039;&#039;||Abstand zwischen den horizontalen Hilfslinien (bezogen auf die rechte Y-Achse). Kann auch ein Array mit Werte-Paaren enthalten, um die Linien mit Text zu beschriften.||&#039;auto&#039;||data-yticks=&#039;[[0,&amp;quot;open&amp;quot;],[1,&amp;quot;closed&amp;quot;]]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yticks_format_sec&#039;&#039;&#039;||Dient zur Formatierung der Ticks der Y-Achse. Die Formatierung geschieht über Platzhalter, Trenner und einen beliebigen durch &#039; &#039; getrennten Text. Als Platzhalter dient ein oder mehrere &#039;#&#039;, als Trenner können &#039;.&#039;, &#039;,&#039; und &#039;:&#039; verwendet werden. Ist ein Trenner enthalten (z.B. &#039;#.##&#039;) dann bedeutet das in dem Beispiel, dass der Ytick mit 2 Nachkommastellen versehen wird und vorne Platz für eine Stelle vor dem Komma vorgehalten wird (führende Nullen werden nicht dargestellt, aber de Platz wird reserviert so dass das ganze rechtsbündig immer passt). Ist kein Trenner vorhanden, dann wird der Ytick auf die Summe der Platzhalter mit einer festen Gesamtbreite gesetzt (#### würde also bedeuten, dass immer 4 Stellen (ohne Trenner) verwendet werden. aus 0.4 würde 0.400 aus 10.437 würde 10.44). Als Trenner kann man z.B. für Zeiten auch einen &#039;:&#039; verwenden und dadurch auch so etwas wie &amp;quot;12:00 Uhr&amp;quot; realisieren (in dem Beispiel wäre data-yticks_format=&amp;quot;##:## Uhr&amp;quot; und kein data-yunit oder data-yticks=&amp;quot;##:##&amp;quot; und data-yunit=&amp;quot;Uhr&amp;quot;).||||data-yticks_format_sec=&amp;quot;#.##&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yticks_prio&#039;&#039;&#039;||Legt fest, ob die horizontalen Hilfslinien der linken (primary) oder der rechten (secondary) Y-Achse zugeordnet werden sollen||||data-yticks_prio=&#039;secondary&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-ytype&#039;&#039;&#039;||Legt fest, ob die primäre y Achse logarithmisch sein soll (wert &amp;quot;log&amp;quot;)||||data-ytype=&amp;quot;log&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-ytype_sec&#039;&#039;&#039;||Legt fest, ob die sekundäre y Achse logarithmisch sein soll (wert &amp;quot;log&amp;quot;)||||data-ytype_sec=&amp;quot;log&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-y_margin&#039;&#039;&#039;|||Gibt die Möglichkeit, Abstände zwischen den Graphen und dem oberen Rand des Plots zu definieren (Einheit Pixel). Falls der Wert skalar ist, werden oben und unten die gleichen Abstände eingehalten. Falls ein 2D Array angegeben wird, können die Werte unten (erster Wert im Array) und oben (zweiter Wert im Array) getrennt festgelegt werden||&amp;quot;0&amp;quot;|||data-y_margin=&#039;[&amp;quot;10&amp;quot;,&amp;quot;20&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-y_margin_sec&#039;&#039;&#039;|||Gibt die Möglichkeit, Abstände zwischen den Graphen und dem oberen Rand des Plots zu definieren (Einheit Pixel). Falls der Wert skalar ist, werden oben und unten die gleichen Abstände eingehalten. Falls ein 2D Array angegeben wird, können die Werte unten (erster Wert im Array) und oben (zweiter Wert im Array) getrennt festgelegt werden||&amp;quot;0&amp;quot;|||data-y_margin=&#039;[&amp;quot;10&amp;quot;,&amp;quot;20&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-daysago_start&#039;&#039;&#039;||Anzahl der vergangenen Tage, wo das Diagramm beginnen soll. &#039;0&#039; = Beginn heute 0:00 Uhr. (siehe [[#Zeitstrahl_.2F_Start_.26_Ende_auf_der_X-Achse|Hinweise]])||&#039;0&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-daysago_end&#039;&#039;&#039;||Anzahl der vergangenen Tage, wo das Diagramm enden soll. &#039;-1&#039; = Ende heute 24:00 Uhr. (siehe [[#Zeitstrahl_.2F_Start_.26_Ende_auf_der_X-Achse|Hinweise]])||&#039;-1&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-xticks_round&#039;&#039;&#039;||Wenn vorhanden und entweder &#039;h&#039;, &#039;d&#039;, &#039;w&#039;, wird auf Stunde, Tag oder Woche bei den xticks gerundet (also die Tickmarks und die Gridlines bei den entsprechend gerundeten Zeiten gesetzt). Es kann auch &#039;auto&#039; angegeben werden, um eine autmoatische Rundung durchzuführen||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-nofulldays&#039;&#039;&#039;||Aktiviert/deaktiviert die Rundung der X-Achse auf ganze Tage. Binärwert (&#039;true&#039; oder &#039;false&#039;)||&#039;false&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-timeformat&#039;&#039;&#039;||Zeitformat für die Anzeige an der X-Achse (siehe [[#Zeitformat_der_X-Achse|Hinweise]])||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-timeranges&#039;&#039;&#039;||Hierdurch können vordefinierte Zeiträume für die X-Achse festgelegt werden, die dann durch eine pulldown menu (neuer Button oben neben dem &amp;quot;-&amp;quot; Button) direkt ausgewählt werden können. Der Parameter ist ein Array aus Array Einträgen, welche jeweils [&amp;lt;Name&amp;gt;,&amp;lt;daysago_start&amp;gt;,&amp;lt;daysago_end&amp;gt;] enthalten)||&lt;br /&gt;
||data-timeranges=&#039;[&amp;lt;br&amp;gt;&lt;br /&gt;
[&amp;quot;Actual Year&amp;quot;,&amp;quot;0Y&amp;quot;,&amp;quot;-1Y&amp;quot;],&amp;lt;br&amp;gt;&lt;br /&gt;
[&amp;quot;Last Year&amp;quot;,&amp;quot;1Y&amp;quot;,&amp;quot;0Y&amp;quot;],&amp;lt;br&amp;gt;&lt;br /&gt;
[&amp;quot;Actual Month&amp;quot;,&amp;quot;0M&amp;quot;,&amp;quot;-1M&amp;quot;],&amp;lt;br&amp;gt;&lt;br /&gt;
[&amp;quot;Last Month&amp;quot;,&amp;quot;1M&amp;quot;,&amp;quot;0M&amp;quot;],&amp;lt;br&amp;gt;&lt;br /&gt;
[&amp;quot;Actual Week&amp;quot;,&amp;quot;0W&amp;quot;,&amp;quot;-1W&amp;quot;],&amp;lt;br&amp;gt;&lt;br /&gt;
[&amp;quot;Last Week&amp;quot;,&amp;quot;1W&amp;quot;,&amp;quot;0W&amp;quot;],&amp;lt;br&amp;gt;&lt;br /&gt;
[&amp;quot;Today&amp;quot;,&amp;quot;0D&amp;quot;,&amp;quot;-1D&amp;quot;],&amp;lt;br&amp;gt;&lt;br /&gt;
[&amp;quot;Yesterday&amp;quot;,&amp;quot;1D&amp;quot;,&amp;quot;0D&amp;quot;]&amp;lt;br&amp;gt;&lt;br /&gt;
]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-ytext&#039;&#039;&#039;||Text, der neben der linken Y-Achse angezeigt wird||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-ytext_sec&#039;&#039;&#039;||Text, der neben der rechten Y-Achse angezeigt wird||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yunit&#039;&#039;&#039;||Einheit, die an der linken Y-Achse angezeigt wird||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yunit_sec&#039;&#039;&#039;||Einheit, die an der rechten Y-Achse angezeigt wird||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-show_both_axes&#039;&#039;&#039;||Legt fest ob beide Y-Achsen Linien gezeichnet werden sollen||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-crosshair&#039;&#039;&#039;||Aktiviert/deaktiviert den Fadenkreuz-Cursor. Binärwert (&#039;true&#039; oder &#039;false&#039;)||&#039;false&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-cursorgroup&#039;&#039;&#039;||Zahl zur Gruppierung der Werte am Fadenkreuz-Cursor ([[#Fadenkreuz-Cursor|Hinweise]])||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-scrollgroup&#039;&#039;&#039;||Zahl zur Gruppierung der Graphen beim Bewegen und Zoomen. Alle Linien mit der selben Zahl werden miteinander gekoppelt und bewegen sich gemeinsam.||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-showlegend&#039;&#039;&#039;||Aktiviert/deaktiviert die Anzeige der Legene. Binärwert (&#039;true&#039; oder &#039;false&#039;)||&#039;false&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-legendpos&#039;&#039;&#039;||Array von zwei Werten, die die horizontale und vertikale Position der Legende festlegen ([[#Legende|Hinweise]])||&#039;[&amp;quot;top&amp;quot;,&amp;quot;right&amp;quot;]&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-legend_horiz&#039;&#039;&#039;||legt fest, dass die Legendeneinträge horizontal angeordnet sind (anstatt vertikal wie im default Fall)||false||data-legend_horiz=&amp;quot;true&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-width&#039;&#039;&#039;||Breite des Diagramms (in % oder px)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-height&#039;&#039;&#039;||Höhe des Diagramms (in % oder px)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-graphsshown&#039;&#039;&#039;||Aktiviert/deaktiviert die initiale Anzeige von Graphen. Binärwert (&#039;true&#039; oder &#039;false&#039;). Array, wenn mehrere Linien angezeigt werden sollen.||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-ddd&#039;&#039;&#039;||Einstellung für die 3D-Drehung ([[#3-dimensionale_Drehung|Hinweise]])||||data-ddd=&#039;[&amp;quot;40&amp;quot;,&amp;quot;60&amp;quot;,&amp;quot;0&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-dddspace&#039;&#039;&#039;||Abstand zwischen zwei Graphen, wenn die 3D-Anzeige aktiviert wurde (px)||&#039;15&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-dddwidth&#039;&#039;&#039;||Breite, bzw. Tiefe der Graphen, wenn diese 3-dimensional angezeigt werden (px)||&#039;10&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-title&#039;&#039;&#039;||Titel, der über dem Diagramm angezeigt werden soll. Der Inhalt kann auch dynamisch erzeugt werden ([[#Diagrammtitel|Hinweise]])||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-title_class&#039;&#039;&#039;||Klassenname für die Formatierung des Titels. Die Eigenschaften müssen dann entsprechend in einem CSS File angegeben werden (z.B. in fhem-tablet-ui-user.css)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-prefetch&#039;&#039;&#039;||Legt fest, ob zusätzliche Daten rechts und links des Plots im Hintergrund vom Server geholt werden sollen||false||data-prefetch=&amp;quot;true&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
Einige Parameter (style, maxvalue, minvalue, maxvalue_sec, minvalue_sec) können auch aus Readings dynamisch gesetzt werden wenn &amp;quot;&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;&amp;quot; als Parameter gesetzt wird. Damit kann man z.B. in FHEM über notify etc. die Linientypen dynamisch anpassen (z.B. wenn der Wert eines Devices in einem bestimmten Bereich liegt, ändert sich die Farbe des Graphen).&lt;br /&gt;
&lt;br /&gt;
==CSS Klassen==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Klasse!!Beschreibung&lt;br /&gt;
{{FTUI Klasse|fullsize}}{{FTUI Klasse|noticks}}{{FTUI Klasse|nobuttons}}{{FTUI Klasse|small}}{{FTUI Klasse|normal}}{{FTUI Klasse|big}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Folgende Widget-spezifsche Klassen können zusätzlich in einer eigenen CSS-Datei definiert werden:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Klasse&lt;br /&gt;
!Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;chart-background&#039;&#039;&#039;||Hintergrundfarbe des Diagramms&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;buttons&#039;&#039;&#039;||Größe und Farbe der Buttons&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;text.axes&#039;&#039;&#039;||Generelle Schriftart und Farbe der Achsen&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;gridlines&#039;&#039;&#039;||Generelle Farbe und Größe der Gitternetzlinien&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;xaxis&#039;&#039;&#039;||Schriftart, Größe und Farbe der X-Achse&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;yaxis&#039;&#039;&#039;||Schriftart, Größe und Farbe der Y-Achse&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;xticks&#039;&#039;&#039;||Schriftart, Größe und Farbe der X-Achse (Zwischenlinien)&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;yticks&#039;&#039;&#039;||Schriftart, Größe und Farbe der Y-Achse (Zwischenlinien)&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;crosshair&#039;&#039;&#039;||Schriftart, Größe und Vordergrund/Hintergrundfarbe der Momentanwerte am Fadenkreuzcursor&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;caption&#039;&#039;&#039;||Schriftart, Größe und Farbe der Text-Buttons für Legende und Cursor&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;legend&#039;&#039;&#039;||Schriftart, Größe und Farbe der Legende&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Standardwerte sind in der Datei &amp;lt;code&amp;gt;css/ftui_chart.css&amp;lt;/code&amp;gt; zu finden.&lt;br /&gt;
&lt;br /&gt;
==Datenquellen==&lt;br /&gt;
Beim Chart-Widget können die gleichen Datenquellen genutzt werden, die auch für SVG-Plots verwendet werden können:&lt;br /&gt;
# [[FileLog]]: Verlaufsdaten einer Textdatei entnehmen&lt;br /&gt;
# [[DbLog]]: Verlaufsdaten einer Datenbank entnehmen&lt;br /&gt;
# [[LogProxy]]: Daten dynamisch berechnet&lt;br /&gt;
&lt;br /&gt;
===FileLog===&lt;br /&gt;
Um [[FileLog]] zu nutzen, wird als &#039;&#039;&#039;data-logdevice&#039;&#039;&#039; das FHEM-Device für das FileLog angegeben. In der Regel entstehen hier im Laufe der Zeit mehrere Log-Dateien. Name und Anzahl sind von der Definition abhängig - meist wird jeden Monat oder jedes Jahr eine neue Datei angelegt. Die gewünschte Datei kann mit &#039;&#039;&#039;data-logfile&#039;&#039;&#039; ausgewählt werden. Möchte man stets die aktuelle Datei verwenden (macht vor allem dann Sinn, wenn man die neusten Daten anzeigen will), kann das Attribut weggelassen, oder explizit &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt; eingetragen werden. Zuletzt wird &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; benötigt, um die gewünschten Daten zu in der Logdatei zu identifizieren. Hier wird die Spalte, in der die Daten stehen, gefolgt von Doppelpunkt und Readingname angegeben.&lt;br /&gt;
&lt;br /&gt;
Für ein Heizungsthermostat von Homematic mit dem Namen &#039;&#039;DG.wz.HZ.Heizungsventil&#039;&#039; ergibt sich somit beispielhaft folgende Definition, um gemessene Temperatur, Sollwert und Ventilstellung im Diagramm darzustellen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;DG.wz.HZ.Heizungsventil&amp;quot;&lt;br /&gt;
	 data-logdevice=&amp;quot;FileLog_DG.wz.HZ.Heizungsventil&amp;quot;&lt;br /&gt;
	 data-logfile=&amp;quot;-&amp;quot;&lt;br /&gt;
	 data-columnspec=&#039;[&amp;quot;4:measured-temp&amp;quot;,&amp;quot;4:desired-temp&amp;quot;,&amp;quot;4:actuator&amp;quot;]&#039;&lt;br /&gt;
	 ...&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollen Daten von unterschiedlichen Geräten in einem Diagramm angezeigt werden, muss &#039;&#039;&#039;data-logdevice&#039;&#039;&#039; als Array nach dem Schema &amp;lt;code&amp;gt;data-logdevice=&#039;[&amp;quot;&amp;lt;Logdatei_1&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Logdatei_2&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Logdatei_3&amp;gt;&amp;quot;]&#039;&amp;lt;/code&amp;gt; definiert werden. Für jeden Eintrag in &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; muss es auch den passenden Eintrag in &#039;&#039;&#039;data-logdevice&#039;&#039;&#039; geben (auch die Reihenfolge ist relevant).&lt;br /&gt;
&lt;br /&gt;
===DbLog===&lt;br /&gt;
Um die Daten aus [[DbLog]] anzeigen zu können, werden die gleichen Attribute verwendet und mit für die Datenbank angepassten Werten beschrieben. Bei &#039;&#039;&#039;data-logdevice&#039;&#039;&#039; das FHEM-Device für die Datenbank angegeben. Im nachfolgenden Beispiel heißt diese &amp;lt;code&amp;gt;logdb&amp;lt;/code&amp;gt; und besitzt wie üblich zwei Tabellen: &amp;lt;code&amp;gt;current&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;history&amp;lt;/code&amp;gt; (der zeitliche Verlauf liegt in letzterer). Der Tabellenname wird bei &#039;&#039;&#039;data-logfile&#039;&#039;&#039; eingetragen. Da die Daten in der Datenbank etwas anders abgelegt werden, muss auch &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; entsprechend angepasst werden. Statt der Spalte wird hier das FHEM-Device, gefolgt von Doppelpunkt und Readingname angegeben.&lt;br /&gt;
&lt;br /&gt;
Für das oben beschriebene Homematic-Heizungsthermostat ergibt sich dann folgende Definition, um die gleichen Daten aus einer Datenbank, statt einem LogFile zu lesen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;DG.wz.HZ.Heizungsventil&amp;quot;&lt;br /&gt;
	 data-logdevice=&amp;quot;logdb&amp;quot;&lt;br /&gt;
	 data-logfile=&amp;quot;HISTORY&amp;quot;&lt;br /&gt;
	 data-columnspec=&#039;[&amp;quot;DG.wz.HZ.Heizungsventil:measured-temp&amp;quot;,&amp;quot;DG.wz.HZ.Heizungsventil:desired-temp&amp;quot;,&amp;quot;DG.wz.HZ.Heizungsventil:actuator&amp;quot;]&#039;&lt;br /&gt;
	 ...&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die Anzeige von unterschiedlichen Geräten in einem Diagramm, muss nur &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; entsprechend angepasst werden, solange sich alle Daten in der Datenbank befinden.&lt;br /&gt;
&lt;br /&gt;
===LogProxy===&lt;br /&gt;
Um die Daten mittels [[LogProxy]] berechnen und anzeigen zu können, muss in FHEM ein LogProxy-Device definiert sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define myLogProxy logProxy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Einstellungen am LogProxy sind nicht nötig, die bloße Existenz reicht.&lt;br /&gt;
&lt;br /&gt;
Bei &#039;&#039;&#039;data-logdevice&#039;&#039;&#039; wird das FHEM-Device für den LogProxy angegeben. Im nachfolgenden Beispiel heißt dieses &amp;lt;code&amp;gt;myLogProxy&amp;lt;/code&amp;gt;. Das Attribut &#039;&#039;&#039;data-logfile&#039;&#039;&#039; wird für LogProxy nicht benötigt. Befinden sich nur LogProxy-Werte im Diagramm kann das Attribut komplett entfallen. Sollen weitere Werte angezeigt werden, bleibt die Definition im Array einfach leer.&lt;br /&gt;
&lt;br /&gt;
Im Attribut &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; wird eine Formel angegeben, wie die Werte berechnet werden sollen. Hier können die Formeln 1:1 von einem eventuell vorhandenen SVG-Plot übernommen werden. &#039;&#039;&#039;Dabei gibt es jedoch folgendes zu beachten:&#039;&#039;&#039; Befindet sich die Formel in einem Array, dürfen die Formeln keine Anführungszeichen (&amp;lt;code&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;) beinhalten. Stattdessen müssen sie als escapter Ascii-Code (&amp;lt;code&amp;gt;\\x22&amp;lt;/code&amp;gt;) eingefügt werden.&lt;br /&gt;
&lt;br /&gt;
Das nachfolgende Beispiel zeigt, wie Vorhersagewerte aus einem FHEM-Device vom Typ Proplanta (Name hier &amp;lt;code&amp;gt;AU.xx.WE.Proplanta&amp;lt;/code&amp;gt;) angezeigt werden können.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;AU.xx.WE.Proplanta&amp;quot;&lt;br /&gt;
	 data-logdevice=&#039;[&lt;br /&gt;
						&amp;quot;myLogProxy&amp;quot;,&lt;br /&gt;
						&amp;quot;myLogProxy&amp;quot;,&lt;br /&gt;
						&amp;quot;myLogProxy&amp;quot;,&lt;br /&gt;
						&amp;quot;myLogProxy&amp;quot;&lt;br /&gt;
					]&#039;&lt;br /&gt;
	 data-columnspec=&#039;[&lt;br /&gt;
						&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22temp_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
						&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22rain_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
						&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22chOfRain_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
						&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22cloud_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;&lt;br /&gt;
					]&#039;&lt;br /&gt;
	 ...&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Auch alle anderen Funktionen, die [[LogProxy]] bietet, können hier angewendet werden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Hinweise==&lt;br /&gt;
===Aktualisierung des Charts===&lt;br /&gt;
Damit der Refresh des Charts funktioniert, muss auch ein Device angegeben werden, der das Refresh triggert. Das Diagramm wird immer dann aktualisiert, wenn sich der Inhalt von &#039;&#039;&#039;data-get&#039;&#039;&#039; ändert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	data-device=&amp;quot;WohnzimmerHeizung&amp;quot;&lt;br /&gt;
	data-logdevice=&amp;quot;FileLog_WohnzimmerHeizung&amp;quot;&lt;br /&gt;
	...&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Aussehen der Linien===&lt;br /&gt;
Mit dem Attribut &#039;&#039;&#039;data-style&#039;&#039;&#039; kann das Aussehen der Linien des jeweiligen Graphen verändert werden. Hierfür können die Standard-FHEM-Styles verwendet werden. Dazu wird das Attribut mit &amp;lt;code&amp;gt;SVGplot&amp;lt;/code&amp;gt;, gefolgt von einem Leerzeichen und der gewünschten Farbe/Stil befüllt. Es existieren jedoch auch noch weitere, an FTUI angepasste Styles, zu finden in der CSS-Datei &amp;lt;code&amp;gt;css/ftui_chart.css&amp;lt;/code&amp;gt;. Um diese zu verwenden, wird das Attribut mit &amp;lt;code&amp;gt;ftui&amp;lt;/code&amp;gt;, gefolgt von einem Leerzeichen und der gewünschten Farbe/Stil befüllt. Eigene Styles können zum Beispiel in der Datei &amp;lt;code&amp;gt;css/fhem-table-ui-user.css&amp;lt;/code&amp;gt; definiert werden.&lt;br /&gt;
&lt;br /&gt;
Folgende Übersicht zeigt die im Standard verfügbaren &#039;&#039;&#039;Farben&#039;&#039;&#039;, alle Abbildungen sind mit im FTUI-Style entstanden:&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f0.png|thumb|none|150px|Farbe &amp;quot;l0&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f1.png|thumb|none|150px|Farbe &amp;quot;l1&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f2.png|thumb|none|150px|Farbe &amp;quot;l2&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f3.png|thumb|none|150px|Farbe &amp;quot;l3&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f4.png|thumb|none|150px|Farbe &amp;quot;l4&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f5.png|thumb|none|150px|Farbe &amp;quot;l5&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f6.png|thumb|none|150px|Farbe &amp;quot;l6&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Angabe zur Farbe kann dann mit der Linienart kombiniert werden. Dazu stehen folgende &#039;&#039;&#039;Stile&#039;&#039;&#039; zur Verfügung:&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-2D-normal.png|thumb|none|225px|Darstellung in 2D: Stil &amp;quot;normal&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-2D-dot.png|thumb|none|225px|Darstellung in 2D: Stil &amp;quot;dot&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-2D-dash.png|thumb|none|225px|Darstellung in 2D: Stil &amp;quot;dash&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-2D-fill.png|thumb|none|225px|Darstellung in 2D: Stil &amp;quot;fill&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-2D-sym.png|thumb|none|225px|Darstellung in 2D: Stil &amp;quot;sym&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-3D-normal.png|thumb|none|225px|Darstellung in 3D: Stil &amp;quot;normal&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-3D-dot.png|thumb|none|225px|Darstellung in 3D: Stil &amp;quot;dot&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-3D-dash.png|thumb|none|225px|Darstellung in 3D: Stil &amp;quot;dash&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-3D-fill.png|thumb|none|225px|Darstellung in 3D: Stil &amp;quot;fill&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-3D-sym.png|thumb|none|225px|Darstellung in 3D: Stil &amp;quot;sym&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Farbe und Stil werden kombiniert (zusammengeschrieben) beim Attribut &#039;&#039;&#039;data-style&#039;&#039;&#039; angegeben, sodass sich beispielsweise für eine graue Punktlinie folgendes ergibt: &amp;lt;code&amp;gt;data-style=&amp;quot;ftui l1dot&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
Um die Darstellung als normale Linie zu erhalten, darf im Gegensatz zu den anderen Linienformen der Stil &amp;lt;code&amp;gt;normal&amp;lt;/code&amp;gt; nicht angegeben werden. Für eine einfache graue Linie ist also die Angabe &amp;lt;code&amp;gt;data-style=&amp;quot;ftui l1&amp;quot;&amp;lt;/code&amp;gt; korrekt, wohingegen &amp;lt;code&amp;gt;data-style=&amp;quot;ftui l1normal&amp;quot;&amp;lt;/code&amp;gt; zu einer fehlerhaften Anzeige führt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Der Stil &#039;&#039;sym&#039;&#039; ist speziell dafür geeignet, Symbole statt Linien zu zeichnen. Dazu kann beim Attribut &#039;&#039;&#039;data-ptype&#039;&#039;&#039; als Linienform ein beliebiges Font-Awsome-, oder Open Automation-Icon angegeben werden. Alle in diesem Abschnitt enthaltenen Abbildungen sind mit &amp;lt;code&amp;gt;data-ptype=&amp;quot;lines&amp;quot;&amp;lt;/code&amp;gt; entstanden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Übergänge mit datenabhängigen Grenzen:&#039;&#039;&#039; Plotstile (data-style) können auch direkt als Gradienten auf Basis von Plot-Datenwerten definiert werden. Dazu muss der Plotstil als Array angegeben werden. Der erste Wert des Arrays gibt an, ob nur die Linie gezeichnet werden soll (Zahl angeben, die die Dicke der Linie definiert) oder gefüllt (&amp;quot;fill&amp;quot; eintragen). Alle danach folgenden Array Elemente sind beliebig viele Stopp Punkte für die Farbübergänge, welche wiederum aus Arrays mit 3 Parametern bestehen. Für jeden Stopp Punkt werden der Datenwert, die Farbe und die Durchsichtigkeit gesetzt. Hierdurch lassen sich z.B. Einfärbungen setzen, die für Temperaturplots immer negative Werte blau einfärben und positive Werte rot. Zwischen den Stop Punkten wird die Farbe interpoliert, also ein weicher Übergang generiert. Will man harte Übergänge muss man Zwei Stopp Punkte mit unterschiedlichen Farbwerten aber dem gleichen Datenwert erzeugen.&amp;lt;br&amp;gt;&lt;br /&gt;
Beispiel 1 für einen weichen Gradienten, der bei 0 von blau nach rot übergeht, bei diesem Übergang durchsichtig ist und von dort nach negativen bzw. positiven Werden immer deckender wird:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;data-style=&#039;[&amp;quot;fill&amp;quot;,[&amp;quot;-20&amp;quot;,&amp;quot;#0000ff&amp;quot;,&amp;quot;0.7&amp;quot;],[&amp;quot;0&amp;quot;,&amp;quot;#0000ff&amp;quot;,&amp;quot;0&amp;quot;],[&amp;quot;0&amp;quot;,&amp;quot;#ff0000&amp;quot;,&amp;quot;0&amp;quot;],[&amp;quot;302&amp;quot;,&amp;quot;#ff0000&amp;quot;,&amp;quot;0.7&amp;quot;]]&#039;&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Beispiel 2 mit einem harten Übergang von blau nach rot bei 0:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;data-style=&#039;[&amp;quot;fill&amp;quot;,[&amp;quot;-20&amp;quot;,&amp;quot;#0000ff&amp;quot;,&amp;quot;0.7&amp;quot;],[&amp;quot;0&amp;quot;,&amp;quot;#0000ff&amp;quot;,&amp;quot;0.7&amp;quot;],[&amp;quot;0&amp;quot;,&amp;quot;#ff0000&amp;quot;,&amp;quot;0.7&amp;quot;],[&amp;quot;50&amp;quot;,&amp;quot;#ff0000&amp;quot;,&amp;quot;0.7&amp;quot;]]&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
Es gibt auch die Möglichkeit den Bereich zwischen zwei Graphen einzufärben. Dazu muss ein Wert in Columnspec als Array angegeben werden. Ist dies der Fall, dann wird der zweite Graph umgekehrt an den ersten angehängt.&amp;lt;br&amp;gt;&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
data-columnspec=&#039;[&lt;br /&gt;
    &amp;quot;Func:logProxy_proplanta2Plot(\\x22AgroWeather\\x22,\\x22weatherIcon\\x22,$from,$to,12)&amp;quot;,&lt;br /&gt;
    [&lt;br /&gt;
        &amp;quot;Func:logProxy_proplanta2Plot(\\x22AgroWeather\\x22,\\x22tempMax\\x22,$from,$to,12)&amp;quot;,&lt;br /&gt;
        &amp;quot;Func:logProxy_proplanta2Plot(\\x22AgroWeather\\x22,\\x22tempMin\\x22,$from,$to,12)&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;Func:logProxy_proplanta2Plot(\\x22AgroWeather\\x22,\\x22rain\\x22,$from,$to,0,\\x22day\\x22)&amp;quot;&lt;br /&gt;
]&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:FTUI Widget Chart DynamicStyles.png|thumb|none|225px|dynamischer Übergang]]&lt;br /&gt;
&lt;br /&gt;
===Form der Linien===&lt;br /&gt;
Das Attribut &#039;&#039;&#039;data-ptype&#039;&#039;&#039; beeinflusst die Form der Linien. Hier sind folgende Werte möglich:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;lines&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;steps&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;fsteps&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;histeps&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bars&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ibars&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;cubic&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;quadratic&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;quadraticSmooth&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusätzlich ist es möglich, Symbole anzeigen zu lassen. Unterstützt werden Font-Awesome (&#039;fa-...&#039;), Open Automation (&#039;oa-...&#039;) und FHEM-Symbole (&#039;fs-...&#039;)). Damit die Symbole korrekt angezeigt werden, muss  im Attribut &#039;&#039;&#039;data-style&#039;&#039;&#039; der Stil &amp;lt;code&amp;gt;sym&amp;lt;/code&amp;gt; gewählt werden, da sonst nur Punkte, statt der Symbole gezeichnet werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;DG.wz.HZ.Heizungsventil&amp;quot;&lt;br /&gt;
	 data-logdevice=&amp;quot;FileLog_DG.wz.HZ.Heizungsventil&amp;quot;&lt;br /&gt;
	 ...&lt;br /&gt;
	 data-style=&amp;quot;ftui l1sym&amp;quot;&lt;br /&gt;
	 data-ptype=&amp;quot;fa-cog&amp;quot;&lt;br /&gt;
	 ...&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Größe der Symbole ist in der Datei &amp;lt;code&amp;gt;css/ftui_chart.css&amp;lt;/code&amp;gt; auf 12px festgelegt. Dieser Wert kann in einer eigenen CSS-Datei durch Anpassung von &amp;lt;code&amp;gt;stroke-width&amp;lt;/code&amp;gt; überschrieben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.ftui.l0sym		{ stroke:#DDA400; stroke-width:12px; fill:none; }&lt;br /&gt;
.ftui.l1sym		{ stroke:#BBBBBB; stroke-width:12px; fill:none; }&lt;br /&gt;
.ftui.l2sym		{ stroke:#CC0000; stroke-width:12px; fill:none; }&lt;br /&gt;
.ftui.l3sym		{ stroke:#CCCC00; stroke-width:12px; fill:none; }&lt;br /&gt;
.ftui.l4sym		{ stroke:#33CC33; stroke-width:12px; fill:none; }&lt;br /&gt;
.ftui.l5sym		{ stroke:#33CCCC; stroke-width:12px; fill:none; }&lt;br /&gt;
.ftui.l6sym		{ stroke:#3333CC; stroke-width:12px; fill:none; }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;data-ptype&#039;&#039;&#039; kann auch Inhalt im Format &amp;lt;code&amp;gt;&#039;icon:1&#039;&amp;lt;/code&amp;gt; verarbeiten. Dann muss der zugehörige Wert in &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; den Pfad zu einem Icon (z.B. für Wettervorhersagen) beinhalten. Der Y-Wert wird dann vom ersten Graphen übernommen. Weitere Ausführungen hierzu im Beispiel [[#Darstellung der Wetter Icons im Diagramm]]. &lt;br /&gt;
&lt;br /&gt;
===Stapeln von Linien===&lt;br /&gt;
Über &#039;&#039;&#039;data-ptype&#039;&#039;&#039; kann zusätzlich festgelegt werden, ob Graphen übereinander gestapelt werden sollen. &amp;lt;code&amp;gt;data-ptype=&#039;lines:1&#039;&amp;lt;/code&amp;gt; bedeutet, dass der zugehörige Graph auf den Graph mit der Nummer 1 gestapelt werden soll. So etwas kann z.B. Sinn machen, wenn man den Stromverbrauch einzelner Devices darstellen und zusätzlich sehen will, wie hoch die Summe ist. Beispiel siehe unten.&lt;br /&gt;
&lt;br /&gt;
[[Datei:FTUI Widget Chart Stacked.png]]&lt;br /&gt;
&lt;br /&gt;
===Zeitstrahl / Start &amp;amp; Ende auf der X-Achse===&lt;br /&gt;
Die Attribute &#039;&#039;&#039;data-daysago_start&#039;&#039;&#039; und &#039;&#039;&#039;data-daysago_end&#039;&#039;&#039; dienen der Definition von Anfang und Ende der X-Achse. Im einfachsten Fall wird eine Anzahl an Tagen eingegeben, die sich auf das aktuelle Datum beziehen. Dabei gilt es zu beachten, dass es sich um &#039;&#039;vergangene Tage&#039;&#039; handelt. Das bedeutet, dass Tage in der Vergangenheit als positive Zahl angegeben werden, Tage in der Zukunft hingegen als negative Zahl. Es kann jeweils  auch ein fixes Datum (z.B. &#039;2013-10-23&#039;) angegeben werden. Uhrzeitangaben werden nur berücksichtigt, wenn &#039;&#039;&#039;data-nofulldays=&#039;true&#039; &#039;&#039;&#039; verwendet wird.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Relative Zeitangabe in Stunden&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Zur Ausgabe einer Anzahl an zurückliegenden Stunden bis zum aktuellen Zeitpunkt wird als Startzeitpunkt die Anzahl der Stunden angegeben werden, die angezeigt werden sollen, gefolgt vom Kleinbuchstaben &#039;&#039;&#039;h&#039;&#039;&#039;. Als Endzeitpunkt wird &#039;&#039;&#039;now&#039;&#039;&#039; gewählt.&amp;lt;br /&amp;gt;&lt;br /&gt;
Das nachfolgende Beispiel zeigt die Werte der vergangenen 3 Stunden an:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
data-nofulldays=&amp;quot;true&amp;quot;&lt;br /&gt;
data-daysago_start=&amp;quot;3h&amp;quot;&lt;br /&gt;
data-daysago_end=&amp;quot;now&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fester Zeitbereich des heutigen Tages (Stunden)&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Um ein festes Stundenfenster des heutigen Tages anzuzeigen, werden die absoluten Stundenzahlen mit negativem Vorzeichen, gefolgt vom Großbuchstaben &#039;&#039;&#039;H&#039;&#039;&#039; angegeben. Wird &#039;&#039;&#039;data-daysago_start&#039;&#039;&#039; als positiver Wert angegeben, wird die Anzahl der Stunden von heute 0:00 Uhr subtrahiert (siehe Rechenweg weiter unten).&amp;lt;br /&amp;gt;&lt;br /&gt;
Das Beispiel zeigt den Zeitbereich von heute 5:00 Uhr bis heute 22:00 Uhr:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
data-nofulldays=&amp;quot;true&amp;quot;&lt;br /&gt;
data-daysago_start=&amp;quot;-5H&amp;quot;&lt;br /&gt;
data-daysago_end=&amp;quot;-22H&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fester Zeitbereich Tage-übergreifend&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Die Zeit in Tagen kann als Gleitkommazahl angegeben werden. Damit ist es möglich, Tage und Uhrzeiten zu kombinieren. Die Werte sind dann als Teil eines ganzen Tages, bezogen auf heute 0:00 Uhr zu errechnen und mit &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; als Teiler anzugeben.&amp;lt;br /&amp;gt;&lt;br /&gt;
Das nachfolgende Beispiel zeigt einen Zeitbereich von &#039;&#039;&#039;gestern 15:00 Uhr&#039;&#039;&#039; bis &#039;&#039;&#039;morgen 3:00 Uhr&#039;&#039;&#039;.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
data-nofulldays=&amp;quot;true&amp;quot;&lt;br /&gt;
data-daysago_start=&amp;quot;0.375&amp;quot;&lt;br /&gt;
data-daysago_end=&amp;quot;-1.125&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die nachfolgenden Rechenwege sind die Einheiten nur zur Verdeutlichung angegeben. Die Einheiten werden im Attribut nicht angegeben.&lt;br /&gt;
&lt;br /&gt;
Der Wert für &#039;&#039;&#039;GESTERN&#039;&#039;&#039; wird wie folgt ermittelt:&amp;lt;br /&amp;gt;&lt;br /&gt;
Ausgangspunkt ist heute 0:00 Uhr, gestern 15:00 Uhr liegt also 9 Stunden davor. Diese 9 Stunden sind ein &amp;lt;code&amp;gt;9/24 Tag&amp;lt;/code&amp;gt; und errechnet sich so:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1d / 24h = 0.0416666...d/h&lt;br /&gt;
0.0416d/h * 9h = 0.375d&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Wert für &#039;&#039;&#039;MORGEN&#039;&#039;&#039; wird wie folgt ermittelt:&amp;lt;br /&amp;gt;&lt;br /&gt;
Ausgangspunkt ist wieder heute 0:00 Uhr, morgen 3:00 Uhr liegt dann 27 Stunden dahinter. Der Einfachheit halber werden hier nur die 3 Stunden errechnet und dann ein ganzer Tag addiert:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1d / 24h = 0.0416666...d/h&lt;br /&gt;
0.0416d/h * 3h = 0.125d&lt;br /&gt;
&lt;br /&gt;
0.125d + 1d = 1.125d&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Da das Attribut Tage in der Vergangenheit erwartet, muss für einen Wert in der Zukunft wieder eine negative Zahl angegeben werden.&lt;br /&gt;
&lt;br /&gt;
===Zeitformat der X-Achse===&lt;br /&gt;
Die Zeitanzeige auf der X-Achse kann sehr flexibel eingestellt werden. Dafür stehen verschiedene Platzhalter zur Verfügung, die durch spezielle Zeichen (&amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt; &amp;lt;/code&amp;gt; (Leerzeichen), &amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;,&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;\&amp;lt;/code&amp;gt;) getrennt werden. Alle Zeichen werden trotz Escape-Zeichen (&amp;lt;code&amp;gt;\&amp;lt;/code&amp;gt;) in der Ausgabe angezeigt.&lt;br /&gt;
&lt;br /&gt;
Folgende Platzhalter werden unterstützt:&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;mm&#039;&amp;lt;/code&amp;gt;: Minuten als zweistellige Zahl&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;hh&#039;&amp;lt;/code&amp;gt;: Stunden als zweistellige Zahl&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;dd&#039;&amp;lt;/code&amp;gt;: Tag als zweistellige Zahl (Kalenderdatum)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;MM&#039;&amp;lt;/code&amp;gt;: Monat als zweistellige Zahl (z.B. 02 für Februar)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;MMM&#039;&amp;lt;/code&amp;gt;: Monat als dreistellige Abkürzung (z.B. Dec für Dezember)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;MMMM&#039;&amp;lt;/code&amp;gt;: Langname des Monats (z.B. March)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;ee&#039;&amp;lt;/code&amp;gt;: Wochentag als zweistellige Zahl (z.B. 00 für Sonntag)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;eee&#039;&amp;lt;/code&amp;gt;: Wochentag als dreistellige Abkürzung (z.B. Mon für Montag)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;eeee&#039;&amp;lt;/code&amp;gt;: Langname des Wochentags (z.B. Tuesday)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;yy&#039;&amp;lt;/code&amp;gt;: Jahr als zweistellige Zahl (z.B. 16 für 2016)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;yyyy&#039;&amp;lt;/code&amp;gt;: Jahr als vierstellige Zahl (z.B. 2016)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;LF&#039;&amp;lt;/code&amp;gt;: Fügt einen Zeilenumbruch hinzu&lt;br /&gt;
&lt;br /&gt;
Beispiel: Der String &amp;lt;code&amp;gt;&#039;MMM\LF\yyyy&#039;&amp;lt;/code&amp;gt; zeigt &amp;lt;code&amp;gt;&#039;Jan&#039;&amp;lt;/code&amp;gt; in der ersten, und &amp;lt;code&amp;gt;&#039;2016&#039;&amp;lt;/code&amp;gt; in der zweiten Zeile. &amp;lt;code&amp;gt;&#039;MM.dd 2016&#039;&amp;lt;/code&amp;gt; wird zu &amp;lt;code&amp;gt;&#039;03.05 2016&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Fadenkreuz-Cursor===&lt;br /&gt;
Der Fadenkreuz-Cursor zeigt die Momentanwerte, indem man ihn über die Graphen bewegt. In Desktop-Browsern reicht einfaches Bewegen des Maus. Unter iOS und Android kann der Cursor wird der Cursor durch einfaches Tippen auf die neue Position bewegt.&lt;br /&gt;
&lt;br /&gt;
Mit dem Attribut &#039;&#039;&#039;data-cursorgroup&#039;&#039;&#039; können Graphen gruppiert werden. Am Cursor werden dann die Momentanwerte aller Graphen gleichzeitig angezeigt, die die selbe Zahl besitzen, sobald man die Maus über einen aus der Gruppe bewegt.&lt;br /&gt;
&lt;br /&gt;
===Legende===&lt;br /&gt;
Mit dem Attribut &#039;&#039;&#039;data-legendpos&#039;&#039;&#039; kann die Position der Legende innerhalb des Diagramms festgelegt werden. Die Position wird mit einem Array, bestehend aus zwei Werten im Format &amp;lt;code&amp;gt;&#039;[&amp;quot;&amp;lt;horizontal&amp;gt;&amp;quot;,&amp;quot;&amp;lt;vertikal&amp;gt;&amp;quot;]&#039;&amp;lt;/code&amp;gt; angegeben. Für die horizontale Positionierung sind &amp;lt;code&amp;gt;&#039;left&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&#039;right&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&#039;before&#039;&amp;lt;/code&amp;gt;, und &amp;lt;code&amp;gt;&#039;behind&#039;&amp;lt;/code&amp;gt;, die vertikale Positionierung &amp;lt;code&amp;gt;&#039;top&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&#039;bottom&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&#039;above&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&#039;below&#039;&amp;lt;/code&amp;gt; erlaubt (der Unterschied zwischen &amp;lt;code&amp;gt;&#039;left&#039;&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;&#039;before&#039;&amp;lt;/code&amp;gt; liegt darin, dass im zweiten Fall die Legende nicht in den Zeichenbereich gesetzt wird sondern vor das ganze Chart (entsprechend für &amp;lt;code&amp;gt;&#039;after&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&#039;above&#039;&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;&#039;below&#039;&amp;lt;/code&amp;gt;). Alternativ können auch Zahlen verwendet werden, die die Position in Prozent angeben. Durch verschieben mit der Maus oder durch verschieben mit dem Finger oder Stift auf Touch Devices kann die Legende auch an eine andere Position verschoben werden.&lt;br /&gt;
&lt;br /&gt;
Wenn die Legende eingeblendet ist, kann mittels Klick auf einen Legendeneintrag der zugehörige Graph ein- und ausgeblendet werden.&lt;br /&gt;
&lt;br /&gt;
===3-dimensionale Drehung===&lt;br /&gt;
&#039;&#039;&#039;data-ddd&#039;&#039;&#039; ermöglicht, den Graphen 3-dimensional zu drehen. Als Wert wird ein Array mit den 3 Winkeln für x, y und z erwartet, wobei z selbst bisher nicht unterstützt wird.&lt;br /&gt;
&lt;br /&gt;
Beispiel: &amp;lt;code&amp;gt;data-ddd=&#039;[&amp;quot;40&amp;quot;,&amp;quot;60&amp;quot;,&amp;quot;0&amp;quot;]&#039;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Wenn der 3D Modus aktiv ist (&#039;&#039;&#039;data-ddd&#039;&#039;&#039; gesetzt) sind 2 zusätzliche Parameter verfügbar um das Aussehen der Graphen zu beeinflussen. &#039;&#039;&#039;data-dddspace&#039;&#039;&#039; gibt an, wie viele pixel der Raum zwischen den einzelnen in z-Richtung hintereinander angeordneten Graphen betragen soll.&lt;br /&gt;
&#039;&#039;&#039;data-dddwidth&#039;&#039;&#039; legt fest, wie viele pixel die einzelnen Graphen tief (oder dick) sein sollen.&lt;br /&gt;
&lt;br /&gt;
Wenn das Array angegeben wird, erscheinen zwei zusätzliche Buttons im Diagramm, mit denen die Drehung in X- und Y-Richtung verändert werden kann.&lt;br /&gt;
&lt;br /&gt;
===Diagrammtitel===&lt;br /&gt;
Mit dem Attribut &#039;&#039;&#039;data-title&#039;&#039;&#039; kann dem Diagramm, ähnlich wie in FHEM-SVG-Plots, ein Titel hinzugefügt werden.&lt;br /&gt;
&lt;br /&gt;
Folgende Platzhalter werden unterstützt:&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;min1&#039;&amp;lt;/code&amp;gt;: Minimaler Y-Wert des ersten Graphs&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;max1&#039;&amp;lt;/code&amp;gt;: Maximaler Y-Wert des ersten Graphs&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;avg1&#039;&amp;lt;/code&amp;gt;: Mittlerer Y-Wert des ersten Graphs&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;cnt1&#039;&amp;lt;/code&amp;gt;: Anzahl der dargestellten Einzelwerte im ersten Graph&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;currval1&#039;&amp;lt;/code&amp;gt;: Letzter, bzw. aktuellster Y-Wert des ersten Graphs&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;mindate1&#039;&amp;lt;/code&amp;gt;: Niedrigster Wert auf der X-Achse des ersten Graphs&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;maxdate1&#039;&amp;lt;/code&amp;gt;: Höchster Wert auf der X-Achse vom ersten Graphs&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;currdate1&#039;&amp;lt;/code&amp;gt;: Letzter, bzw. aktuellster Wert auf der X-Achse des ersten Graphs&lt;br /&gt;
&lt;br /&gt;
Durch Einsetzen einer anderen Zahl statt &#039;1&#039; können auch die Werte der anderen Graphen angezeigt werden. Das Weglassen der Zahl bewirkt, dass der jeweils zutreffende Wert automatisch ermittelt wird. Bedeutet: &amp;lt;code&amp;gt;max&amp;lt;/code&amp;gt; führt dazu, dass der höchste Wert aller angezeigter Graphen verwendet wird.&lt;br /&gt;
Zusätzlich ist es möglich durch &amp;quot;$eval(&amp;lt;regexp&amp;gt;)&amp;quot; regular Expressions auszuwerten (also z.B. Berechnungen durchzuführen). In &amp;lt;regexp&amp;gt; können auch &amp;quot;$data()&amp;quot; vorkommen.&lt;br /&gt;
&lt;br /&gt;
Beispiel: &amp;lt;code&amp;gt;data-title=&amp;quot;Klima Wohnzimmer Average: $eval(parseInt($data{avg1}*10)/10)°C / Max: $eval(parseInt($data{max1}*10)/10)°C&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Buttons im Diagramm===&lt;br /&gt;
Es gibt mehrere Buttons, mit denen sich die Anzeige des Diagramms verändern lässt. &amp;lt;code&amp;gt;&amp;lt;-&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;-&amp;gt;&amp;lt;/code&amp;gt; bewegen die Graphen nach links und rechts. &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt; zoomen die Anzeige. &amp;lt;code&amp;gt;legend&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;cursor&amp;lt;/code&amp;gt; schalten die zugehörigen Anzeigen ein und aus. Falls der 3D Modus eingeschaltet ist, gibt es Buttons zum Drehen der Darstellung um die X- und Y-Achse. Falls &amp;lt;code&amp;gt;data-timeranges&amp;lt;/code&amp;gt; gesetzt ist, wird ein Pulldown Menü dargestellt, welches die Auswahl von dort definierten Zeiträumen für die X-Achse erlaubt.&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
===Einfaches Diagramm===&lt;br /&gt;
Das Beispiel zeigt ein einfaches Diagramm mit 4 unterschiedlich formatierten Graphen, Legende und Momentanwerten am Fadenkreuz-Cursor.&lt;br /&gt;
&lt;br /&gt;
[[File:Chart_tabletUI.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	data-logdevice=&#039;[&amp;quot;Log.Garden&amp;quot;,&amp;quot;Log.Garden&amp;quot;,&amp;quot;Log.Garden&amp;quot;,&amp;quot;Log.Predicted&amp;quot;]&#039;&lt;br /&gt;
	data-columnspec=&#039;[&amp;quot;4:Garden.T:15:&amp;quot;,&amp;quot;10:Garden.T:0:delta-h&amp;quot;,&amp;quot;10:Garden.T:0:delta-d&amp;quot;,&amp;quot;4:predicted.*:15:&amp;quot;]&#039;&lt;br /&gt;
	data-style=&#039;[&amp;quot;ftui l0fill&amp;quot;,&amp;quot;ftui l1fill&amp;quot;,&amp;quot;ftui l2&amp;quot;,&amp;quot;ftui l3dot&amp;quot;]&#039;&lt;br /&gt;
	data-ptype=&#039;[&amp;quot;lines&amp;quot;,&amp;quot;histeps&amp;quot;,&amp;quot;histeps&amp;quot;,&amp;quot;cubic&amp;quot;]&#039;&lt;br /&gt;
	data-uaxis=&#039;[&amp;quot;primary&amp;quot;,&amp;quot;secondary&amp;quot;,&amp;quot;secondary&amp;quot;,&amp;quot;primary&amp;quot;]&#039;&lt;br /&gt;
	data-legend=&#039;[&amp;quot;Temperature&amp;quot;,&amp;quot;Rain/hour&amp;quot;,&amp;quot;Rain/day&amp;quot;,&amp;quot;Predicted Temp.&amp;quot;]&#039;&lt;br /&gt;
	data-yunit=&amp;quot;°C&amp;quot;&lt;br /&gt;
	data-ytext=&amp;quot;Temperature&amp;quot;&lt;br /&gt;
	data-minvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	data-maxvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	data-yunit_sec=&amp;quot;mm&amp;quot;&lt;br /&gt;
	data-ytext_sec=&amp;quot;Rain (mm)&amp;quot;&lt;br /&gt;
	data-height=&amp;quot;250&amp;quot;&lt;br /&gt;
	data-yticks=&amp;quot;auto&amp;quot;&lt;br /&gt;
	data-minvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	data-maxvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	data-nofulldays=&amp;quot;true&amp;quot;&lt;br /&gt;
	data-daysago_start=&amp;quot;2013-08-13T00:00:00&amp;quot;&lt;br /&gt;
	data-daysago_end=&amp;quot;2013-08-14T00:00:00&amp;quot;&lt;br /&gt;
	data-cursorgroup=&amp;quot;1&amp;quot;&lt;br /&gt;
	data-scrollgroup=&amp;quot;1&amp;quot;&lt;br /&gt;
	data-xticks=&amp;quot;auto&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===7-Tage-Wettervorhersage mit Proplanta===&lt;br /&gt;
In diesem Beispiel wird gezeigt, wie die Vorhersagewerte von [[PROPLANTA]] in einem Diagramm dargestellt werden können. Da die Werte nicht in einer Datenbank oder einem FileLog vorliegen, müssen sie über [[LogProxy]] verarbeitet werden. Dafür sind einige Vorbereitungen in FHEM nötig.&lt;br /&gt;
&lt;br /&gt;
[[File:FTUI_Widget_Chart-fc-Proplanta.png|941px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.&#039;&#039;&#039; Ein LogProxy-Device muss vorhanden sein:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define myLogProxy logProxy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2.&#039;&#039;&#039; In der Datei &amp;lt;code&amp;gt;99_myUtils.pm&amp;lt;/code&amp;gt; muss folgende Routine hinzugefügt werden, die die Daten bereitstellt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#---------------------------------------&lt;br /&gt;
# Proplanta LogProxy-Funktion&lt;br /&gt;
#---------------------------------------&lt;br /&gt;
sub logProxy_proplanta2Plot($$$$;$$) {&lt;br /&gt;
	my ($device, $fcValue, $from, $to, $fcHour, $expMode) = @_;&lt;br /&gt;
    my $regex;&lt;br /&gt;
    my @rl;&lt;br /&gt;
    &lt;br /&gt;
	return undef if(!$device);&lt;br /&gt;
    &lt;br /&gt;
    if($fcValue =~ s/_$//) {&lt;br /&gt;
        $regex = &amp;quot;^fc[\\d]+_&amp;quot;.$fcValue.&amp;quot;[\\d]{2}\$&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
        $regex = &amp;quot;^fc[\\d]+_&amp;quot;.$fcValue.&amp;quot;\$&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    $fcHour = 12 if(!defined $fcHour);&lt;br /&gt;
    $expMode = &amp;quot;point&amp;quot; if(!defined $expMode);&lt;br /&gt;
&lt;br /&gt;
	if( defined($defs{$device}) ) {&lt;br /&gt;
		if( $defs{$device}{TYPE} eq &amp;quot;PROPLANTA&amp;quot; ) {&lt;br /&gt;
            @rl = sort{&lt;br /&gt;
                my ($an) = ($a =~ m/fc(\d+)_.*/);&lt;br /&gt;
                my ($bn) = ($b =~ m/fc(\d+)_.*/);&lt;br /&gt;
                $an &amp;lt;=&amp;gt; $bn or $a cmp $b;&lt;br /&gt;
                }( grep /${regex}/,keys %{$defs{$device}{READINGS}} );&lt;br /&gt;
			return undef if( !@rl );&lt;br /&gt;
		} else {&lt;br /&gt;
			Log3 undef, 2, &amp;quot;logProxy_proplanta2Plot: $device is not a PROPLANTA device&amp;quot;;&lt;br /&gt;
			return undef;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	my $fromsec = SVG_time_to_sec($from);&lt;br /&gt;
	my $tosec   = SVG_time_to_sec($to);&lt;br /&gt;
	my $sec = $fromsec;&lt;br /&gt;
	my ($h,$fcDay,$mday,$mon,$year);&lt;br /&gt;
	my $timestamp;&lt;br /&gt;
    &lt;br /&gt;
	my $reading;&lt;br /&gt;
	my $value;&lt;br /&gt;
	my $prev_value;&lt;br /&gt;
	my $min = 999999;&lt;br /&gt;
	my $max = -999999;&lt;br /&gt;
	my $ret = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	# while not end of plot range reached&lt;br /&gt;
	while(($sec &amp;lt; $tosec) &amp;amp;&amp;amp; @rl) {&lt;br /&gt;
		#remember previous value for start of plot range&lt;br /&gt;
		$prev_value = $value;&lt;br /&gt;
&lt;br /&gt;
		$reading = shift @rl;&lt;br /&gt;
        ($fcDay) = $reading =~ m/^fc(\d+).*/;&lt;br /&gt;
   		$h = ($reading =~ m/.*(\d\d)$/)?$1:$fcHour;&lt;br /&gt;
		$value = ReadingsVal($device,$reading,undef);&lt;br /&gt;
        &lt;br /&gt;
		($mday,$mon,$year) = split(&#039;\.&#039;,ReadingsVal($device,&amp;quot;fc&amp;quot;.$fcDay.&amp;quot;_date&amp;quot;,undef));&lt;br /&gt;
		$timestamp = sprintf(&amp;quot;%04d-%02d-%02d_%02d:%02d:%02d&amp;quot;, $year, $mon, $mday, $h, 0, 0);&lt;br /&gt;
		$sec = SVG_time_to_sec($timestamp);&lt;br /&gt;
        &lt;br /&gt;
		# skip all values before start of plot range&lt;br /&gt;
		next if( SVG_time_to_sec($timestamp) &amp;lt; $fromsec );&lt;br /&gt;
&lt;br /&gt;
		# add first value at start of plot range&lt;br /&gt;
		if( !$ret &amp;amp;&amp;amp; $prev_value ) {&lt;br /&gt;
		$min = $prev_value if( $prev_value lt $min );&lt;br /&gt;
		$max = $prev_value if( $prev_value gt $max );&lt;br /&gt;
		$ret .= &amp;quot;$from $prev_value\n&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		# done if after end of plot range&lt;br /&gt;
		last if($sec &amp;gt; $tosec);&lt;br /&gt;
&lt;br /&gt;
		$min = $value if( $value lt $min );&lt;br /&gt;
		$max = $value if( $value gt $max );&lt;br /&gt;
&lt;br /&gt;
		# add actual controll point&lt;br /&gt;
		$ret .= &amp;quot;$timestamp $value\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#		Log 1, &amp;quot;$timestamp $value -0- $reading&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
    if(($sec &amp;lt; $tosec) &amp;amp;&amp;amp; !@rl &amp;amp;&amp;amp; ($expMode eq &amp;quot;day&amp;quot;)) {&lt;br /&gt;
    	$timestamp = sprintf(&amp;quot;%04d-%02d-%02d_%02d:%02d:%02d&amp;quot;, $year, $mon, $mday, 23, 59, 59);&lt;br /&gt;
    	if(SVG_time_to_sec($timestamp) &amp;lt; $tosec) {&lt;br /&gt;
        	$ret .= &amp;quot;$timestamp $value\n&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
			$ret .= &amp;quot;$to $value\n&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    elsif(($sec &amp;gt; $tosec) &amp;amp;&amp;amp; ($expMode eq &amp;quot;day&amp;quot;)) {&lt;br /&gt;
       	$value = $prev_value + ($value - $prev_value)*(86400 + ($tosec - $sec))/86400;&lt;br /&gt;
       	$ret .= &amp;quot;$to $value\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
	return ($ret,$min,$max,$prev_value);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend können die Daten im Chart-Widget angezeigt werden. Der Device-Name von Proplanta heißt hier im Beispiel &amp;lt;code&amp;gt;AU.xx.WE.Proplanta&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;AU.xx.WE.Proplanta&amp;quot;&lt;br /&gt;
	 data-logdevice=&#039;[&lt;br /&gt;
	 					&amp;quot;myLogProxy&amp;quot;,&lt;br /&gt;
	 					&amp;quot;myLogProxy&amp;quot;,&lt;br /&gt;
	 					&amp;quot;myLogProxy&amp;quot;&lt;br /&gt;
	 				]&#039;&lt;br /&gt;
	 data-columnspec=&#039;[&lt;br /&gt;
	 					&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22rain_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
	 					&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22chOfRain_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
	 					&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22cloud_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;&lt;br /&gt;
	 				]&#039;&lt;br /&gt;
	 data-style=&#039;[&lt;br /&gt;
	 					&amp;quot;ftui l6fill&amp;quot;,&lt;br /&gt;
	 					&amp;quot;ftui l5fill&amp;quot;,&lt;br /&gt;
	 					&amp;quot;ftui l1fill&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-ptype=&#039;[&lt;br /&gt;
	 					&amp;quot;steps&amp;quot;,&lt;br /&gt;
	 					&amp;quot;quadraticSmooth&amp;quot;,&lt;br /&gt;
	 					&amp;quot;quadraticSmooth&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-uaxis=&#039;[&lt;br /&gt;
	 					&amp;quot;primary&amp;quot;,&lt;br /&gt;
	 					&amp;quot;secondary&amp;quot;,&lt;br /&gt;
	 					&amp;quot;secondary&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-legend=&#039;[&lt;br /&gt;
	 					&amp;quot;Regen&amp;quot;,&lt;br /&gt;
	 					&amp;quot;Regenwahrscheinlichkeit&amp;quot;,&lt;br /&gt;
	 					&amp;quot;Wolken&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-yunit=&amp;quot;mm&amp;quot;&lt;br /&gt;
	 data-ytext=&amp;quot;Regen&amp;quot;&lt;br /&gt;
	 data-yunit_sec=&amp;quot;%&amp;quot;&lt;br /&gt;
	 data-ytext_sec=&amp;quot;Chance auf Regen / Wolken&amp;quot;&lt;br /&gt;
	 data-timeformat=&amp;quot;eeee&amp;quot;&lt;br /&gt;
	 data-minvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-maxvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-minvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-maxvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-daysago_start = &amp;quot;0&amp;quot;&lt;br /&gt;
	 data-daysago_end = &amp;quot;-7&amp;quot;&lt;br /&gt;
	 data-xticks=&amp;quot;1440&amp;quot;&lt;br /&gt;
	 data-yticks=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-title=&amp;quot;7-Tage-Wettervorhersage&amp;quot;&lt;br /&gt;
	 data-showlegend=&amp;quot;true&amp;quot;&lt;br /&gt;
	 class=&amp;quot;nobuttons fullsize&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hilfreiche Links und Quellen zu diesem Beispiel:&#039;&#039;&#039;&lt;br /&gt;
*[[LogProxy|LogProxy im FHEM-Wiki]]&lt;br /&gt;
*{{Link2Forum|Topic=22967|Message=246973|LinkText=Stundengenaue Wettervorhersage (#1) im FHEM-Forum}}&lt;br /&gt;
*{{Link2Forum|Topic=22967|Message=334713|LinkText=Stundengenaue Wettervorhersage (#2) im FHEM-Forum}}&lt;br /&gt;
&lt;br /&gt;
===Darstellung der Wetter Icons im Diagramm===&lt;br /&gt;
&lt;br /&gt;
[[File:Wetterchart2.png]]&lt;br /&gt;
&lt;br /&gt;
Wie oben bereits beschrieben, gibt es beim Chart grundsätzlich die Möglichkeit, Icons, welche in Form von URLs in den Logs abgelegt sind oder welche per logProxy generiert werden, darzustellen. Die Icons werden auf genau dem gleichen Weg von FHEM gelesen, wie alle anderen Datenpunkte. Im Folgenden wird ein Beispiel gezeigt, mit dem die im Proplanta Modul als Readings abgelegten Icons per logProxy Funktion gelesen und in ein Chart eingebaut werden könnnen.&lt;br /&gt;
Da es beim Proplanta Modul für die ersten 7 Tage nicht das Reading &amp;lt;code&amp;gt;fc#_weatherIcon&amp;lt;/code&amp;gt; gibt, sondern mehrere Readings für unterschiedliche Tageszeiten wogegen für die zweiten 7 Tage ausschließlich das Reading &amp;lt;code&amp;gt;fc#_weatherIcon&amp;lt;/code&amp;gt; vorhanden ist, sollte per &amp;lt;code&amp;gt;attr device userReading&amp;lt;/code&amp;gt; mit folgendem Eintrag dafür gesorgt werden, dass für alle Tage ein Reading &amp;lt;code&amp;gt;fc#_weatherIcon&amp;lt;/code&amp;gt; vorhanden ist (alternativ könnten auch 2 Graphen gezeichnet werden, wobei der erste dann nur die ersten 7 Tage enthält und der zweite die letzen 7 Tage, will man nur die ersten 7 Tage darstellen braucht man das userReading nicht unbedingt).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
fc0_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc0_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);},&lt;br /&gt;
fc1_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc1_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);},&lt;br /&gt;
fc2_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc2_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);},&lt;br /&gt;
fc3_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc3_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);},&lt;br /&gt;
fc4_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc4_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);},&lt;br /&gt;
fc5_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc5_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);},&lt;br /&gt;
fc6_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc6_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Um die Icons darzustellen muss ein zusätzlicher Graph definiert werden. Dieser nutzt neben der Columnspec, die die URLs abruft den Parameter &amp;lt;code&amp;gt;data-ptype=&amp;quot;icons:#&amp;quot;&amp;lt;/code&amp;gt; (# ist eine Zahl und steht für die Nummer, beginnend bei 0 des Graphen, welcher für die y-Position der Icons verwendet werden soll) und den Stil &amp;lt;code&amp;gt;sym&amp;lt;/code&amp;gt;. Der Wert für die Symbolgröße sollte z.B. durch eine zusätzliche Definition im File fhem-tablet-ui-user.css in der Form:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* icon lines */&lt;br /&gt;
.ftui.l99icon	{ stroke:#DDA400; stroke-width:48px; fill:none; }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Im folgenden ein Beispiel, welches eine Linie für die Maximale Tagestemperatur zeichnet und auf dieser Linie die Wetter Icons darstellt.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;AU.xx.WE.Proplanta&amp;quot;&lt;br /&gt;
	 data-logdevice=&#039;[&lt;br /&gt;
	 					&amp;quot;myLogProxy&amp;quot;,&lt;br /&gt;
	 					&amp;quot;myLogProxy&amp;quot;&lt;br /&gt;
	 				]&#039;&lt;br /&gt;
	 data-columnspec=&#039;[&lt;br /&gt;
	 					&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22weatherIcon\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
	 					&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22tempMax\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;&lt;br /&gt;
	 				]&#039;&lt;br /&gt;
	 data-style=&#039;[&lt;br /&gt;
	 					&amp;quot;ftui l99icon&amp;quot;,&lt;br /&gt;
	 					&amp;quot;ftui l1fill&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-ptype=&#039;[&lt;br /&gt;
	 					&amp;quot;icons:1&amp;quot;,&lt;br /&gt;
	 					&amp;quot;quadraticSmooth&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-uaxis=&#039;[&lt;br /&gt;
	 					&amp;quot;primary&amp;quot;,&lt;br /&gt;
	 					&amp;quot;primary&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-legend=&#039;[&lt;br /&gt;
	 					&amp;quot;Wetterbedingung&amp;quot;,&lt;br /&gt;
	 					&amp;quot;Max. Temperature&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-yunit=&amp;quot;°C&amp;quot;&lt;br /&gt;
	 data-ytext=&amp;quot;Temperature (°C)&amp;quot;&lt;br /&gt;
	 data-timeformat=&amp;quot;ee\LF\dd.MM&amp;quot;&lt;br /&gt;
	 data-minvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-maxvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-minvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-maxvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-daysago_start=&amp;quot;-1w&amp;quot;&lt;br /&gt;
	 data-y_margin=&amp;quot;20&amp;quot;&lt;br /&gt;
	 data-daysago_end=&amp;quot;-3w&amp;quot;&lt;br /&gt;
	 data-xticks=&amp;quot;1440&amp;quot;&lt;br /&gt;
	 data-yticks=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-title=&amp;quot;14-Tage-Wettervorhersage&amp;quot;&lt;br /&gt;
	 data-showlegend=&amp;quot;true&amp;quot;&lt;br /&gt;
	 class=&amp;quot;nobuttons fullsize&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Kuchendiagramme===&lt;br /&gt;
In folgendem Beispiel wird gezeigt, wie man ein &amp;quot;Kuchendiagramm&amp;quot; darstellen kann.&lt;br /&gt;
&lt;br /&gt;
[[File:PieChart.png]]&lt;br /&gt;
&lt;br /&gt;
Ähnlich wie bei den Beispielen für die Wetter Darstellungen wird hierzu auch wieder logProxy benötigt. Zunächst muss die folgende zusätzliche Funktion in &amp;lt;code&amp;gt;99_myUtils.pm&amp;lt;/code&amp;gt; einfügen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#---------------------------------------&lt;br /&gt;
# Funktion zum Erzeugen der Inputs für Kuchendiagramme&lt;br /&gt;
#---------------------------------------&lt;br /&gt;
sub logProxy_values2PieChart($$$$;$$) {&lt;br /&gt;
	my ($device, $reading, $angle_start, $angle_dif, $inner_rad, $show_text) = @_;&lt;br /&gt;
	Log3 undef, 1, &amp;quot;$device, $reading, $angle_start, $angle_dif, $inner_rad, $show_text\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	use constant PI =&amp;gt; 4 * atan2(1,1);&lt;br /&gt;
	&lt;br /&gt;
	my $value=ReadingsVal($device,$reading,0);&lt;br /&gt;
&lt;br /&gt;
	my $angle_delta = $value/100*360;&lt;br /&gt;
	$angle_start = $angle_start/100*360;&lt;br /&gt;
	&lt;br /&gt;
	my $rad=10;&lt;br /&gt;
	my $irad=0;&lt;br /&gt;
	if ($inner_rad) {&lt;br /&gt;
		$irad = $rad*$inner_rad;&lt;br /&gt;
	}&lt;br /&gt;
	my $angle=$angle_start/360*2.0*PI;&lt;br /&gt;
	my $x=$irad*sin($angle);&lt;br /&gt;
	my $y=$irad*cos($angle);&lt;br /&gt;
	my $ret .= &amp;quot;;p &amp;quot;.$x.&amp;quot; &amp;quot;.$y.&amp;quot;\n&amp;quot;; # add segment at angle $angle&lt;br /&gt;
	&lt;br /&gt;
	for (my $i=$angle_start; $i&amp;lt;=$angle_start+$angle_delta; $i+=$angle_dif) {&lt;br /&gt;
		$angle = $i/360*2.0*PI;&lt;br /&gt;
		$x = $rad*sin($angle);&lt;br /&gt;
		$y = $rad*cos($angle);&lt;br /&gt;
		$ret .= &amp;quot;;p &amp;quot;.$x.&amp;quot; &amp;quot;.$y.&amp;quot;\n&amp;quot;; # add segment at angle $angle&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	$angle = ($angle_start+$angle_delta)/360*2.0*PI; # add last segment &lt;br /&gt;
	$ret .= &amp;quot;;p &amp;quot;.$rad*sin($angle).&amp;quot; &amp;quot;.$rad*cos($angle).&amp;quot;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	if ($inner_rad) {&lt;br /&gt;
		for (my $i=$angle_start; $i&amp;lt;$angle_start+$angle_delta; $i+=$angle_dif) {&lt;br /&gt;
			$angle = ($angle_start+$angle_start+$angle_delta-$i)/360*2.0*PI;&lt;br /&gt;
			$x = $irad*sin($angle);&lt;br /&gt;
			$y = $irad*cos($angle);&lt;br /&gt;
			$ret .= &amp;quot;;p &amp;quot;.$x.&amp;quot; &amp;quot;.$y.&amp;quot;\n&amp;quot;; # add segment at angle $angle&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$angle = ($angle_start)/360*2.0*PI; # add last segment &lt;br /&gt;
	$ret .= &amp;quot;;p &amp;quot;.$irad*sin($angle).&amp;quot; &amp;quot;.$irad*cos($angle).&amp;quot;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	if ($show_text) { # show text values&lt;br /&gt;
		$x = ($rad+$irad)/2*sin((2*$angle_start+$angle_delta)/2/360*2.0*PI);&lt;br /&gt;
		$y = ($rad+$irad)/2*cos((2*$angle_start+$angle_delta)/2/360*2.0*PI);&lt;br /&gt;
&lt;br /&gt;
		$ret .= &amp;quot;;t &amp;quot;.$x.&amp;quot; &amp;quot;.$y.&amp;quot; middle &amp;quot;.$show_text.&amp;quot;:&amp;quot;.$value.&amp;quot;%\n&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return($ret);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
In FHEM braucht man Readings, welche eine Zahl enthalten, die als Prozentwert interpretiert wird. Für jeden Prozentwert (also für jedes Reading) generiert die o.a. Funktion nun den Chart Input für ein Kuchenstück und liefert diesen als Antwort auf das GET, welches das Chart Widget auslöst. Dazu braucht die Funktion folgende Parameter: (Name des FHEM Devices, Name des Readings, Start Winkel des Kuchenstücks (Mathematisch gegen den Uhrzeigersinn in Grad), Delta Winkel zum Zeichnen (legt fest in welchen Schritten der Teilkreis des Kuchenstücks gezeichnet wird), Skalierungsfaktor für inneren Ring wenn ein Ring gezeichtnet werden soll (0 bedeutet komplette Kuchenstücke), optionaler Text der ins Kuchenstück vor die Prozentzahl geschrieben wird).&lt;br /&gt;
Im Folgenden eine Beispielkonfiguration für die Darstellung als Kuchendiagramm, die Readings heißen hier dPer1 bis dPer4. Der Startwinkel wird duch Aufsummierung der jeweils vorher schon gezeichneten Kuchenstücke gebildet, dadurch entstehen aneinander hängende Stücke.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
[[Datei:[[Datei:Beispiel.jpg]]]]&amp;lt;div class=&amp;quot;normal noaxes nobuttons&amp;quot;&lt;br /&gt;
        data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
        data-logdevice=&#039;[&amp;quot;lp&amp;quot;]&#039;&lt;br /&gt;
		data-logfile=&amp;quot;CURRENT&amp;quot;&lt;br /&gt;
        data-columnspec=&#039;[&lt;br /&gt;
			&amp;quot;Func:logProxy_values2PieChart(\&amp;quot;dPer1\&amp;quot;,\&amp;quot;state\&amp;quot;,ReadingsVal(\&amp;quot;dPer4\&amp;quot;,\&amp;quot;state\&amp;quot;,0)+ReadingsVal(\&amp;quot;dPer3\&amp;quot;,\&amp;quot;state\&amp;quot;,0),5,0,\&amp;quot;first\&amp;quot;)&amp;quot;,&lt;br /&gt;
			&amp;quot;Func:logProxy_values2PieChart(\&amp;quot;dPer2\&amp;quot;,\&amp;quot;state\&amp;quot;,ReadingsVal(\&amp;quot;dPer4\&amp;quot;,\&amp;quot;state\&amp;quot;,0)+ReadingsVal(\&amp;quot;dPer3\&amp;quot;,\&amp;quot;state\&amp;quot;,0)+ReadingsVal(\&amp;quot;dPer1\&amp;quot;,\&amp;quot;state\&amp;quot;,0),5,0,\&amp;quot;second\&amp;quot;)&amp;quot;,&lt;br /&gt;
			&amp;quot;Func:logProxy_values2PieChart(\&amp;quot;dPer3\&amp;quot;,\&amp;quot;state\&amp;quot;,ReadingsVal(\&amp;quot;dPer4\&amp;quot;,\&amp;quot;state\&amp;quot;,0),5,0,\&amp;quot;third\&amp;quot;)&amp;quot;,&lt;br /&gt;
			&amp;quot;Func:logProxy_values2PieChart(\&amp;quot;dPer4\&amp;quot;,\&amp;quot;state\&amp;quot;,0,5,0,\&amp;quot;fourth\&amp;quot;)&amp;quot;&lt;br /&gt;
		]&#039;&lt;br /&gt;
        data-style=&#039;[&amp;quot;ftui l0fill&amp;quot;,&amp;quot;ftui l1fill&amp;quot;,&amp;quot;ftui l2fill&amp;quot;,&amp;quot;ftui l3fill&amp;quot;]&#039;&lt;br /&gt;
        data-ptype=&#039;[&amp;quot;lines&amp;quot;]&#039;&lt;br /&gt;
        data-uaxis=&#039;[&amp;quot;primary&amp;quot;]&#039;&lt;br /&gt;
        data-legend=&#039;[&amp;quot;First&amp;quot;,&amp;quot;Second&amp;quot;,&amp;quot;Third&amp;quot;,&amp;quot;Fourth&amp;quot;]&#039;&lt;br /&gt;
		data-legendpos=&#039;[&amp;quot;left&amp;quot;,&amp;quot;top&amp;quot;]&#039;&lt;br /&gt;
        data-yunit=&amp;quot;&amp;quot;&lt;br /&gt;
        data-height=&amp;quot;300&amp;quot;&lt;br /&gt;
        data-width=&amp;quot;300&amp;quot;&lt;br /&gt;
		data-ddd=&#039;[&amp;quot;-40&amp;quot;,&amp;quot;0&amp;quot;,&amp;quot;0&amp;quot;]&#039;&lt;br /&gt;
		data-dddspace=&#039;[&amp;quot;-10&amp;quot;]&#039;&lt;br /&gt;
		data-dddwidth=&#039;[&amp;quot;10&amp;quot;]&#039;&lt;br /&gt;
		data-showlegend=&amp;quot;true&amp;quot;&lt;br /&gt;
		data-legend_horiz=&amp;quot;true&amp;quot;&lt;br /&gt;
        data-xticks=&amp;quot;auto&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Fensterstatus offen/geschlossen===&lt;br /&gt;
Dieses Beispiel zeigt, wie ein Fensterkontakt, dessen Reading die Werte &amp;lt;code&amp;gt;closed&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;open&amp;lt;/code&amp;gt; einnimmt, als Graph gezeichnet werden kann. Technisch gesehen werden hier die Werte &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; gezeichnet, indem über das Attribut &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; dem Zustand &amp;lt;code&amp;gt;open&amp;lt;/code&amp;gt; der Wert &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; und allen anderen Zuständen der Wert &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; zugeordnet wird. Über das Attribut &#039;&#039;&#039;data-yticks&#039;&#039;&#039; wird die Beschriftung an der Y-Achse (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;) gegen einen frei definierbaren Text ausgetauscht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	data-device=&amp;quot;wz_fensterstatus&amp;quot;&lt;br /&gt;
	data-logdevice=&#039;[&amp;quot;myDbLog&amp;quot;]&#039;&lt;br /&gt;
	data-logfile=&#039;[&amp;quot;HISTORY&amp;quot;]&#039;&lt;br /&gt;
	data-columnspec=&#039;[&amp;quot;wz_fensterstatus:state:0::$val=($val=~\\x22open\\x22?1:0)&amp;quot;]&#039;&lt;br /&gt;
	data-style=&#039;[&amp;quot;ftui l4fill&amp;quot;]&#039;&lt;br /&gt;
	data-ptype=&#039;[&amp;quot;steps&amp;quot;]&#039;&lt;br /&gt;
	data-height=&amp;quot;290&amp;quot;&lt;br /&gt;
	data-yticks=&#039;[[0,&amp;quot;geschlossen&amp;quot;],[1,&amp;quot;offen&amp;quot;]]&#039;&lt;br /&gt;
	data-minvalue=&amp;quot;0&amp;quot;&lt;br /&gt;
	data-maxvalue=&amp;quot;1.1&amp;quot;&lt;br /&gt;
	data-nofulldays=&amp;quot;true&amp;quot;&lt;br /&gt;
	data-daysago_start=&amp;quot;1&amp;quot;&lt;br /&gt;
	data-daysago_end=&amp;quot;-1&amp;quot;&lt;br /&gt;
	data-cursorgroup=&amp;quot;1&amp;quot;&lt;br /&gt;
	data-scrollgroup=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Das Beispiel funktioniert nur mit DbLog. Falls Logfiles verwendet werden muss statt &#039;$val&#039; &#039;$fld[&#039;&#039;num&#039;&#039;]&#039; verwendet werden. Hierbei steht &#039;&#039;num&#039;&#039; für die Spalte (beginnend bei 0) in der die Daten stehen.&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
{{Link2Forum|Topic= 48450 |Message=401006|LinkText=Thread im FHEM-Forum}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Tablet UI|Chart]]&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Chart&amp;diff=26563</id>
		<title>FTUI Widget Chart</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Chart&amp;diff=26563"/>
		<updated>2018-05-02T08:46:26Z</updated>

		<summary type="html">&lt;p&gt;Eki: Beschreibung zusätzlicher Parameter yticks_format und title_class&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das [[{{PAGENAME}}|Chart Widget]] ist ein Widget für [[FHEM Tablet UI]], mit dem sich verschiedenste Diagramme darstellen lassen. Die Aneinanderreihung mehrerer Werte eines Device-Readings zu einem zeitlichen Verlauf wird dabei als Graph bezeichnet.&lt;br /&gt;
&lt;br /&gt;
Es können beliebige Werte dargestellt und entsprechend der Sinnhaftigkeit, oder persönlichem Geschmack, formatiert werden. Farbe und Form der Linien sind je Graph einstellbar, auch wenn mehrere gleichzeitig in einem Diagramm angezeigt werden.&lt;br /&gt;
&lt;br /&gt;
Jedes Diagramm kann zwei Y-Achsen besitzen. Die primäre Y-Achse (primary) wird auf der linken Seite angezeigt, die sekundäre Y-Achse (secondary) auf der rechten Seite. Beide Achsen können unterschiedlich formatiert werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Chart_tabletUI.png&lt;br /&gt;
Datei:FTUI Widget Chart Stacked.png&lt;br /&gt;
Datei:FTUI Widget Chart-fc-Proplanta.png&lt;br /&gt;
Datei:Wetterchart2.png&lt;br /&gt;
Datei:PieChart.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Attribute==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:150px&amp;quot;|Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-device&#039;&#039;&#039;||Name des FHEM-Device, das die Aktualisierung des Charts triggert||||data-device=&amp;quot;WohnzimmerHeizung&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-get&#039;&#039;&#039;||Reading, das das Update des Diagramms triggert||&#039;STATE&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-logdevice&#039;&#039;&#039;||Name des Log-Device, das dargestellt werden soll, oder ein Array, um mehrere Werte in einem Diagramm darzustellen||||data-logdevice=&amp;quot;FileLog_WohnzimmerHeizung&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-logfile&#039;&#039;&#039;|| Name des Log-Files, aus dem die Daten entnommen werden sollen (oder Array)||&#039;-&#039; = aktuelle Datei||data-logfile=&amp;quot;WohnzimmerHeizung-2015.log&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-columnspec&#039;&#039;&#039;||Ermittelt den Wert aus dem Log-File, der angezeigt werden soll (oder Array)||||data-columnspec=&amp;quot;4:meas.*&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-style&#039;&#039;&#039;||Stil, wie die Graph-Linien dargestellt werden sollen (z.B. &#039;SVGplot l0&#039; oder &#039;ftui l0dash&#039;), oder ein Array, wenn mehrere Linien unterschiedlich dargestellt werden sollen (siehe [[#Aussehen_der_Linien|Hinweise]])||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-ptype&#039;&#039;&#039;||Form, wie die Graphen dargestellt werden sollen (z.B. &#039;lines&#039;, &#039;cubic&#039; oder &#039;fa-cog&#039;), oder ein Array (siehe [[#Form_der_Linien|Hinweise]])||&#039;lines&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-uaxis&#039;&#039;&#039;||Name der Achse, die verwendet werden soll (&#039;primary&#039; = links, oder &#039;secondary&#039; = rechts), oder ein Array||&#039;primary&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-legend&#039;&#039;&#039;||Bezeichnung des Graphen (wird in Legende und am Cursor angezeigt), oder ein Array||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-minvalue&#039;&#039;&#039;||Minimaler Wert, der auf der linken Y-Achse (&#039;primary&#039;) angezeigt werden soll. &#039;auto&#039; = automatische Berechnung||&#039;10&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-maxvalue&#039;&#039;&#039;||Maximaler Wert, der auf der linken Y-Achse (&#039;primary&#039;) angezeigt werden soll. &#039;auto&#039; = automatische Berechnung||&#039;30&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-minvalue_sec&#039;&#039;&#039;||Minimaler Wert, der auf der rechten Y-Achse (&#039;secondary&#039;) angezeigt werden soll. &#039;auto&#039; = automatische Berechnung||&#039;auto&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-maxvalue_sec&#039;&#039;&#039;||Maximaler Wert, der auf der rechten Y-Achse (&#039;secondary&#039;) angezeigt werden soll. &#039;auto&#039; = automatische Berechnung||&#039;auto&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-xticks&#039;&#039;&#039;||Abstand zwischen den vertikalen Hilfslinien (bezogen auf die X-Achse) in Minuten. &#039;auto&#039; = automatische Berechnung||&#039;auto&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yticks&#039;&#039;&#039;||Abstand zwischen den horizontalen Hilfslinien (bezogen auf die linke Y-Achse). Kann auch ein Array mit Werte-Paaren enthalten, um die Linien mit Text zu beschriften.||&#039;auto&#039;||data-yticks=&#039;[[0,&amp;quot;open&amp;quot;],[1,&amp;quot;closed&amp;quot;]]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yticks_format&#039;&#039;&#039;||Dient zur Formatierung der Ticks der Y-Achse. Die Formatierung geschieht über Platzhalter, Trenner und einen beliebigen durch &#039; &#039; getrennten Text. Als Platzhalter dient ein oder mehrere &#039;#&#039;, als Trenner können &#039;.&#039;, &#039;,&#039; und &#039;:&#039; verwendet werden. Ist ein Trenner enthalten (z.B. &#039;#.##&#039;) dann bedeutet das in dem Beispiel, dass der Ytick mit 2 Nachkommastellen versehen wird und vorne Platz für eine Stelle vor dem Komma vorgehalten wird (führende Nullen werden nicht dargestellt, aber de Platz wird reserviert so dass das ganze rechtsbündig immer passt). Ist kein Trenner vorhanden, dann wird der Ytick auf die Summe der Platzhalter mit einer festen Gesamtbreite gesetzt (#### würde also bedeuten, dass immer 4 Stellen (ohne Trenner) verwendet werden. aus 0.4 würde 0.400 aus 10.437 würde 10.44). Als Trenner kann man z.B. für Zeiten auch einen &#039;:&#039; verwenden und dadurch auch so etwas wie &amp;quot;12:00 Uhr&amp;quot; realisieren (in dem Beispiel wäre data-yticks_format=&amp;quot;##:## Uhr&amp;quot; und kein data-yunit oder data-yticks=&amp;quot;##:##&amp;quot; und data-yunit=&amp;quot;Uhr&amp;quot;).||||data-yticks_format=&amp;quot;#.##&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yticks_sec&#039;&#039;&#039;||Abstand zwischen den horizontalen Hilfslinien (bezogen auf die rechte Y-Achse). Kann auch ein Array mit Werte-Paaren enthalten, um die Linien mit Text zu beschriften.||&#039;auto&#039;||data-yticks=&#039;[[0,&amp;quot;open&amp;quot;],[1,&amp;quot;closed&amp;quot;]]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yticks_format_sec&#039;&#039;&#039;||Dient zur Formatierung der Ticks der Y-Achse. Die Formatierung geschieht über Platzhalter, Trenner und einen beliebigen durch &#039; &#039; getrennten Text. Als Platzhalter dient ein oder mehrere &#039;#&#039;, als Trenner können &#039;.&#039;, &#039;,&#039; und &#039;:&#039; verwendet werden. Ist ein Trenner enthalten (z.B. &#039;#.##&#039;) dann bedeutet das in dem Beispiel, dass der Ytick mit 2 Nachkommastellen versehen wird und vorne Platz für eine Stelle vor dem Komma vorgehalten wird (führende Nullen werden nicht dargestellt, aber de Platz wird reserviert so dass das ganze rechtsbündig immer passt). Ist kein Trenner vorhanden, dann wird der Ytick auf die Summe der Platzhalter mit einer festen Gesamtbreite gesetzt (#### würde also bedeuten, dass immer 4 Stellen (ohne Trenner) verwendet werden. aus 0.4 würde 0.400 aus 10.437 würde 10.44). Als Trenner kann man z.B. für Zeiten auch einen &#039;:&#039; verwenden und dadurch auch so etwas wie &amp;quot;12:00 Uhr&amp;quot; realisieren (in dem Beispiel wäre data-yticks_format=&amp;quot;##:## Uhr&amp;quot; und kein data-yunit oder data-yticks=&amp;quot;##:##&amp;quot; und data-yunit=&amp;quot;Uhr&amp;quot;).||||data-yticks_format_sec=&amp;quot;#.##&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yticks_prio&#039;&#039;&#039;||Legt fest, ob die horizontalen Hilfslinien der linken (primary) oder der rechten (secondary) Y-Achse zugeordnet werden sollen||||data-yticks_prio=&#039;secondary&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-ytype&#039;&#039;&#039;||Legt fest, ob die primäre y Achse logarithmisch sein soll (wert &amp;quot;log&amp;quot;)||||data-ytype=&amp;quot;log&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-ytype_sec&#039;&#039;&#039;||Legt fest, ob die sekundäre y Achse logarithmisch sein soll (wert &amp;quot;log&amp;quot;)||||data-ytype_sec=&amp;quot;log&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-y_margin&#039;&#039;&#039;|||Gibt die Möglichkeit, Abstände zwischen den Graphen und dem oberen Rand des Plots zu definieren (Einheit Pixel). Falls der Wert skalar ist, werden oben und unten die gleichen Abstände eingehalten. Falls ein 2D Array angegeben wird, können die Werte unten (erster Wert im Array) und oben (zweiter Wert im Array) getrennt festgelegt werden||&amp;quot;0&amp;quot;|||data-y_margin=&#039;[&amp;quot;10&amp;quot;,&amp;quot;20&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-y_margin_sec&#039;&#039;&#039;|||Gibt die Möglichkeit, Abstände zwischen den Graphen und dem oberen Rand des Plots zu definieren (Einheit Pixel). Falls der Wert skalar ist, werden oben und unten die gleichen Abstände eingehalten. Falls ein 2D Array angegeben wird, können die Werte unten (erster Wert im Array) und oben (zweiter Wert im Array) getrennt festgelegt werden||&amp;quot;0&amp;quot;|||data-y_margin=&#039;[&amp;quot;10&amp;quot;,&amp;quot;20&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-daysago_start&#039;&#039;&#039;||Anzahl der vergangenen Tage, wo das Diagramm beginnen soll. &#039;0&#039; = Beginn heute 0:00 Uhr. (siehe [[#Zeitstrahl_.2F_Start_.26_Ende_auf_der_X-Achse|Hinweise]])||&#039;0&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-daysago_end&#039;&#039;&#039;||Anzahl der vergangenen Tage, wo das Diagramm enden soll. &#039;-1&#039; = Ende heute 24:00 Uhr. (siehe [[#Zeitstrahl_.2F_Start_.26_Ende_auf_der_X-Achse|Hinweise]])||&#039;-1&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-xticks_round&#039;&#039;&#039;||Wenn vorhanden und entweder &#039;h&#039;, &#039;d&#039;, &#039;w&#039;, wird auf Stunde, Tag oder Woche bei den xticks gerundet (also die Tickmarks und die Gridlines bei den entsprechend gerundeten Zeiten gesetzt). Es kann auch &#039;auto&#039; angegeben werden, um eine autmoatische Rundung durchzuführen||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-nofulldays&#039;&#039;&#039;||Aktiviert/deaktiviert die Rundung der X-Achse auf ganze Tage. Binärwert (&#039;true&#039; oder &#039;false&#039;)||&#039;false&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-timeformat&#039;&#039;&#039;||Zeitformat für die Anzeige an der X-Achse (siehe [[#Zeitformat_der_X-Achse|Hinweise]])||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-timeranges&#039;&#039;&#039;||Hierdurch können vordefinierte Zeiträume für die X-Achse festgelegt werden, die dann durch eine pulldown menu (neuer Button oben neben dem &amp;quot;-&amp;quot; Button) direkt ausgewählt werden können. Der Parameter ist ein Array aus Array Einträgen, welche jeweils [&amp;lt;Name&amp;gt;,&amp;lt;daysago_start&amp;gt;,&amp;lt;daysago_end&amp;gt;] enthalten)||&lt;br /&gt;
||data-timeranges=&#039;[&amp;lt;br&amp;gt;&lt;br /&gt;
[&amp;quot;Actual Year&amp;quot;,&amp;quot;0Y&amp;quot;,&amp;quot;-1Y&amp;quot;],&amp;lt;br&amp;gt;&lt;br /&gt;
[&amp;quot;Last Year&amp;quot;,&amp;quot;1Y&amp;quot;,&amp;quot;0Y&amp;quot;],&amp;lt;br&amp;gt;&lt;br /&gt;
[&amp;quot;Actual Month&amp;quot;,&amp;quot;0M&amp;quot;,&amp;quot;-1M&amp;quot;],&amp;lt;br&amp;gt;&lt;br /&gt;
[&amp;quot;Last Month&amp;quot;,&amp;quot;1M&amp;quot;,&amp;quot;0M&amp;quot;],&amp;lt;br&amp;gt;&lt;br /&gt;
[&amp;quot;Actual Week&amp;quot;,&amp;quot;0W&amp;quot;,&amp;quot;-1W&amp;quot;],&amp;lt;br&amp;gt;&lt;br /&gt;
[&amp;quot;Last Week&amp;quot;,&amp;quot;1W&amp;quot;,&amp;quot;0W&amp;quot;],&amp;lt;br&amp;gt;&lt;br /&gt;
[&amp;quot;Today&amp;quot;,&amp;quot;0D&amp;quot;,&amp;quot;-1D&amp;quot;],&amp;lt;br&amp;gt;&lt;br /&gt;
[&amp;quot;Yesterday&amp;quot;,&amp;quot;1D&amp;quot;,&amp;quot;0D&amp;quot;]&amp;lt;br&amp;gt;&lt;br /&gt;
]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-ytext&#039;&#039;&#039;||Text, der neben der linken Y-Achse angezeigt wird||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-ytext_sec&#039;&#039;&#039;||Text, der neben der rechten Y-Achse angezeigt wird||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yunit&#039;&#039;&#039;||Einheit, die an der linken Y-Achse angezeigt wird||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-yunit_sec&#039;&#039;&#039;||Einheit, die an der rechten Y-Achse angezeigt wird||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-show_both_axes&#039;&#039;&#039;||Legt fest ob beide Y-Achsen Linien gezeichnet werden sollen||false||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-crosshair&#039;&#039;&#039;||Aktiviert/deaktiviert den Fadenkreuz-Cursor. Binärwert (&#039;true&#039; oder &#039;false&#039;)||&#039;false&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-cursorgroup&#039;&#039;&#039;||Zahl zur Gruppierung der Werte am Fadenkreuz-Cursor ([[#Fadenkreuz-Cursor|Hinweise]])||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-scrollgroup&#039;&#039;&#039;||Zahl zur Gruppierung der Graphen beim Bewegen und Zoomen. Alle Linien mit der selben Zahl werden miteinander gekoppelt und bewegen sich gemeinsam.||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-showlegend&#039;&#039;&#039;||Aktiviert/deaktiviert die Anzeige der Legene. Binärwert (&#039;true&#039; oder &#039;false&#039;)||&#039;false&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-legendpos&#039;&#039;&#039;||Array von zwei Werten, die die horizontale und vertikale Position der Legende festlegen ([[#Legende|Hinweise]])||&#039;[&amp;quot;top&amp;quot;,&amp;quot;right&amp;quot;]&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-legend_horiz&#039;&#039;&#039;||legt fest, dass die Legendeneinträge horizontal angeordnet sind (anstatt vertikal wie im default Fall)||false||data-legend_horiz=&amp;quot;true&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-width&#039;&#039;&#039;||Breite des Diagramms (in % oder px)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-height&#039;&#039;&#039;||Höhe des Diagramms (in % oder px)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-graphsshown&#039;&#039;&#039;||Aktiviert/deaktiviert die initiale Anzeige von Graphen. Binärwert (&#039;true&#039; oder &#039;false&#039;). Array, wenn mehrere Linien angezeigt werden sollen.||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-ddd&#039;&#039;&#039;||Einstellung für die 3D-Drehung ([[#3-dimensionale_Drehung|Hinweise]])||||data-ddd=&#039;[&amp;quot;40&amp;quot;,&amp;quot;60&amp;quot;,&amp;quot;0&amp;quot;]&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-dddspace&#039;&#039;&#039;||Abstand zwischen zwei Graphen, wenn die 3D-Anzeige aktiviert wurde (px)||&#039;15&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-dddwidth&#039;&#039;&#039;||Breite, bzw. Tiefe der Graphen, wenn diese 3-dimensional angezeigt werden (px)||&#039;10&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-title&#039;&#039;&#039;||Titel, der über dem Diagramm angezeigt werden soll. Der Inhalt kann auch dynamisch erzeugt werden ([[#Diagrammtitel|Hinweise]])||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-title_class&#039;&#039;&#039;||Klassenname für die Formatierung des Titels. Die Eigenschaften müssen dann entsprechend in einem CSS File angegeben werden (z.B. in fhem-tablet-ui-user.css)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-prefetch&#039;&#039;&#039;||Legt fest, ob zusätzliche Daten rechts und links des Plots im Hintergrund vom Server geholt werden sollen||false||data-prefetch=&amp;quot;true&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
Einige Parameter (style, maxvalue, minvalue, maxvalue_sec, minvalue_sec) können auch aus Readings dynamisch gesetzt werden wenn &amp;quot;&amp;lt;device&amp;gt;:&amp;lt;reading&amp;gt;&amp;quot; als Parameter gesetzt wird. Damit kann man z.B. in FHEM über notify etc. die Linientypen dynamisch anpassen (z.B. wenn der Wert eines Devices in einem bestimmten Bereich liegt, ändert sich die Farbe des Graphen).&lt;br /&gt;
&lt;br /&gt;
==CSS Klassen==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Klasse!!Beschreibung&lt;br /&gt;
{{FTUI Klasse|fullsize}}{{FTUI Klasse|noticks}}{{FTUI Klasse|nobuttons}}{{FTUI Klasse|small}}{{FTUI Klasse|normal}}{{FTUI Klasse|big}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Folgende Widget-spezifsche Klassen können zusätzlich in einer eigenen CSS-Datei definiert werden:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Klasse&lt;br /&gt;
!Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;chart-background&#039;&#039;&#039;||Hintergrundfarbe des Diagramms&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;buttons&#039;&#039;&#039;||Größe und Farbe der Buttons&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;text.axes&#039;&#039;&#039;||Generelle Schriftart und Farbe der Achsen&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;gridlines&#039;&#039;&#039;||Generelle Farbe und Größe der Gitternetzlinien&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;xaxis&#039;&#039;&#039;||Schriftart, Größe und Farbe der X-Achse&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;yaxis&#039;&#039;&#039;||Schriftart, Größe und Farbe der Y-Achse&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;xticks&#039;&#039;&#039;||Schriftart, Größe und Farbe der X-Achse (Zwischenlinien)&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;yticks&#039;&#039;&#039;||Schriftart, Größe und Farbe der Y-Achse (Zwischenlinien)&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;crosshair&#039;&#039;&#039;||Schriftart, Größe und Vordergrund/Hintergrundfarbe der Momentanwerte am Fadenkreuzcursor&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;caption&#039;&#039;&#039;||Schriftart, Größe und Farbe der Text-Buttons für Legende und Cursor&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;legend&#039;&#039;&#039;||Schriftart, Größe und Farbe der Legende&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Standardwerte sind in der Datei &amp;lt;code&amp;gt;css/ftui_chart.css&amp;lt;/code&amp;gt; zu finden.&lt;br /&gt;
&lt;br /&gt;
==Datenquellen==&lt;br /&gt;
Beim Chart-Widget können die gleichen Datenquellen genutzt werden, die auch für SVG-Plots verwendet werden können:&lt;br /&gt;
# [[FileLog]]: Verlaufsdaten einer Textdatei entnehmen&lt;br /&gt;
# [[DbLog]]: Verlaufsdaten einer Datenbank entnehmen&lt;br /&gt;
# [[LogProxy]]: Daten dynamisch berechnet&lt;br /&gt;
&lt;br /&gt;
===FileLog===&lt;br /&gt;
Um [[FileLog]] zu nutzen, wird als &#039;&#039;&#039;data-logdevice&#039;&#039;&#039; das FHEM-Device für das FileLog angegeben. In der Regel entstehen hier im Laufe der Zeit mehrere Log-Dateien. Name und Anzahl sind von der Definition abhängig - meist wird jeden Monat oder jedes Jahr eine neue Datei angelegt. Die gewünschte Datei kann mit &#039;&#039;&#039;data-logfile&#039;&#039;&#039; ausgewählt werden. Möchte man stets die aktuelle Datei verwenden (macht vor allem dann Sinn, wenn man die neusten Daten anzeigen will), kann das Attribut weggelassen, oder explizit &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt; eingetragen werden. Zuletzt wird &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; benötigt, um die gewünschten Daten zu in der Logdatei zu identifizieren. Hier wird die Spalte, in der die Daten stehen, gefolgt von Doppelpunkt und Readingname angegeben.&lt;br /&gt;
&lt;br /&gt;
Für ein Heizungsthermostat von Homematic mit dem Namen &#039;&#039;DG.wz.HZ.Heizungsventil&#039;&#039; ergibt sich somit beispielhaft folgende Definition, um gemessene Temperatur, Sollwert und Ventilstellung im Diagramm darzustellen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;DG.wz.HZ.Heizungsventil&amp;quot;&lt;br /&gt;
	 data-logdevice=&amp;quot;FileLog_DG.wz.HZ.Heizungsventil&amp;quot;&lt;br /&gt;
	 data-logfile=&amp;quot;-&amp;quot;&lt;br /&gt;
	 data-columnspec=&#039;[&amp;quot;4:measured-temp&amp;quot;,&amp;quot;4:desired-temp&amp;quot;,&amp;quot;4:actuator&amp;quot;]&#039;&lt;br /&gt;
	 ...&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollen Daten von unterschiedlichen Geräten in einem Diagramm angezeigt werden, muss &#039;&#039;&#039;data-logdevice&#039;&#039;&#039; als Array nach dem Schema &amp;lt;code&amp;gt;data-logdevice=&#039;[&amp;quot;&amp;lt;Logdatei_1&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Logdatei_2&amp;gt;&amp;quot;,&amp;quot;&amp;lt;Logdatei_3&amp;gt;&amp;quot;]&#039;&amp;lt;/code&amp;gt; definiert werden. Für jeden Eintrag in &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; muss es auch den passenden Eintrag in &#039;&#039;&#039;data-logdevice&#039;&#039;&#039; geben (auch die Reihenfolge ist relevant).&lt;br /&gt;
&lt;br /&gt;
===DbLog===&lt;br /&gt;
Um die Daten aus [[DbLog]] anzeigen zu können, werden die gleichen Attribute verwendet und mit für die Datenbank angepassten Werten beschrieben. Bei &#039;&#039;&#039;data-logdevice&#039;&#039;&#039; das FHEM-Device für die Datenbank angegeben. Im nachfolgenden Beispiel heißt diese &amp;lt;code&amp;gt;logdb&amp;lt;/code&amp;gt; und besitzt wie üblich zwei Tabellen: &amp;lt;code&amp;gt;current&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;history&amp;lt;/code&amp;gt; (der zeitliche Verlauf liegt in letzterer). Der Tabellenname wird bei &#039;&#039;&#039;data-logfile&#039;&#039;&#039; eingetragen. Da die Daten in der Datenbank etwas anders abgelegt werden, muss auch &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; entsprechend angepasst werden. Statt der Spalte wird hier das FHEM-Device, gefolgt von Doppelpunkt und Readingname angegeben.&lt;br /&gt;
&lt;br /&gt;
Für das oben beschriebene Homematic-Heizungsthermostat ergibt sich dann folgende Definition, um die gleichen Daten aus einer Datenbank, statt einem LogFile zu lesen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;DG.wz.HZ.Heizungsventil&amp;quot;&lt;br /&gt;
	 data-logdevice=&amp;quot;logdb&amp;quot;&lt;br /&gt;
	 data-logfile=&amp;quot;HISTORY&amp;quot;&lt;br /&gt;
	 data-columnspec=&#039;[&amp;quot;DG.wz.HZ.Heizungsventil:measured-temp&amp;quot;,&amp;quot;DG.wz.HZ.Heizungsventil:desired-temp&amp;quot;,&amp;quot;DG.wz.HZ.Heizungsventil:actuator&amp;quot;]&#039;&lt;br /&gt;
	 ...&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die Anzeige von unterschiedlichen Geräten in einem Diagramm, muss nur &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; entsprechend angepasst werden, solange sich alle Daten in der Datenbank befinden.&lt;br /&gt;
&lt;br /&gt;
===LogProxy===&lt;br /&gt;
Um die Daten mittels [[LogProxy]] berechnen und anzeigen zu können, muss in FHEM ein LogProxy-Device definiert sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define myLogProxy logProxy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Einstellungen am LogProxy sind nicht nötig, die bloße Existenz reicht.&lt;br /&gt;
&lt;br /&gt;
Bei &#039;&#039;&#039;data-logdevice&#039;&#039;&#039; wird das FHEM-Device für den LogProxy angegeben. Im nachfolgenden Beispiel heißt dieses &amp;lt;code&amp;gt;myLogProxy&amp;lt;/code&amp;gt;. Das Attribut &#039;&#039;&#039;data-logfile&#039;&#039;&#039; wird für LogProxy nicht benötigt. Befinden sich nur LogProxy-Werte im Diagramm kann das Attribut komplett entfallen. Sollen weitere Werte angezeigt werden, bleibt die Definition im Array einfach leer.&lt;br /&gt;
&lt;br /&gt;
Im Attribut &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; wird eine Formel angegeben, wie die Werte berechnet werden sollen. Hier können die Formeln 1:1 von einem eventuell vorhandenen SVG-Plot übernommen werden. &#039;&#039;&#039;Dabei gibt es jedoch folgendes zu beachten:&#039;&#039;&#039; Befindet sich die Formel in einem Array, dürfen die Formeln keine Anführungszeichen (&amp;lt;code&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;) beinhalten. Stattdessen müssen sie als escapter Ascii-Code (&amp;lt;code&amp;gt;\\x22&amp;lt;/code&amp;gt;) eingefügt werden.&lt;br /&gt;
&lt;br /&gt;
Das nachfolgende Beispiel zeigt, wie Vorhersagewerte aus einem FHEM-Device vom Typ Proplanta (Name hier &amp;lt;code&amp;gt;AU.xx.WE.Proplanta&amp;lt;/code&amp;gt;) angezeigt werden können.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;AU.xx.WE.Proplanta&amp;quot;&lt;br /&gt;
	 data-logdevice=&#039;[&lt;br /&gt;
						&amp;quot;myLogProxy&amp;quot;,&lt;br /&gt;
						&amp;quot;myLogProxy&amp;quot;,&lt;br /&gt;
						&amp;quot;myLogProxy&amp;quot;,&lt;br /&gt;
						&amp;quot;myLogProxy&amp;quot;&lt;br /&gt;
					]&#039;&lt;br /&gt;
	 data-columnspec=&#039;[&lt;br /&gt;
						&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22temp_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
						&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22rain_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
						&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22chOfRain_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
						&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22cloud_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;&lt;br /&gt;
					]&#039;&lt;br /&gt;
	 ...&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Auch alle anderen Funktionen, die [[LogProxy]] bietet, können hier angewendet werden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Hinweise==&lt;br /&gt;
===Aktualisierung des Charts===&lt;br /&gt;
Damit der Refresh des Charts funktioniert, muss auch ein Device angegeben werden, der das Refresh triggert. Das Diagramm wird immer dann aktualisiert, wenn sich der Inhalt von &#039;&#039;&#039;data-get&#039;&#039;&#039; ändert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	data-device=&amp;quot;WohnzimmerHeizung&amp;quot;&lt;br /&gt;
	data-logdevice=&amp;quot;FileLog_WohnzimmerHeizung&amp;quot;&lt;br /&gt;
	...&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Aussehen der Linien===&lt;br /&gt;
Mit dem Attribut &#039;&#039;&#039;data-style&#039;&#039;&#039; kann das Aussehen der Linien des jeweiligen Graphen verändert werden. Hierfür können die Standard-FHEM-Styles verwendet werden. Dazu wird das Attribut mit &amp;lt;code&amp;gt;SVGplot&amp;lt;/code&amp;gt;, gefolgt von einem Leerzeichen und der gewünschten Farbe/Stil befüllt. Es existieren jedoch auch noch weitere, an FTUI angepasste Styles, zu finden in der CSS-Datei &amp;lt;code&amp;gt;css/ftui_chart.css&amp;lt;/code&amp;gt;. Um diese zu verwenden, wird das Attribut mit &amp;lt;code&amp;gt;ftui&amp;lt;/code&amp;gt;, gefolgt von einem Leerzeichen und der gewünschten Farbe/Stil befüllt. Eigene Styles können zum Beispiel in der Datei &amp;lt;code&amp;gt;css/fhem-table-ui-user.css&amp;lt;/code&amp;gt; definiert werden.&lt;br /&gt;
&lt;br /&gt;
Folgende Übersicht zeigt die im Standard verfügbaren &#039;&#039;&#039;Farben&#039;&#039;&#039;, alle Abbildungen sind mit im FTUI-Style entstanden:&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f0.png|thumb|none|150px|Farbe &amp;quot;l0&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f1.png|thumb|none|150px|Farbe &amp;quot;l1&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f2.png|thumb|none|150px|Farbe &amp;quot;l2&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f3.png|thumb|none|150px|Farbe &amp;quot;l3&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f4.png|thumb|none|150px|Farbe &amp;quot;l4&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f5.png|thumb|none|150px|Farbe &amp;quot;l5&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Farbe-f6.png|thumb|none|150px|Farbe &amp;quot;l6&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Angabe zur Farbe kann dann mit der Linienart kombiniert werden. Dazu stehen folgende &#039;&#039;&#039;Stile&#039;&#039;&#039; zur Verfügung:&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-2D-normal.png|thumb|none|225px|Darstellung in 2D: Stil &amp;quot;normal&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-2D-dot.png|thumb|none|225px|Darstellung in 2D: Stil &amp;quot;dot&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-2D-dash.png|thumb|none|225px|Darstellung in 2D: Stil &amp;quot;dash&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-2D-fill.png|thumb|none|225px|Darstellung in 2D: Stil &amp;quot;fill&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-2D-sym.png|thumb|none|225px|Darstellung in 2D: Stil &amp;quot;sym&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-3D-normal.png|thumb|none|225px|Darstellung in 3D: Stil &amp;quot;normal&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-3D-dot.png|thumb|none|225px|Darstellung in 3D: Stil &amp;quot;dot&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-3D-dash.png|thumb|none|225px|Darstellung in 3D: Stil &amp;quot;dash&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-3D-fill.png|thumb|none|225px|Darstellung in 3D: Stil &amp;quot;fill&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li style=&amp;quot;display: inline-block;&amp;quot;&amp;gt; [[File:FTUI_Widget_Chart_Form-3D-sym.png|thumb|none|225px|Darstellung in 3D: Stil &amp;quot;sym&amp;quot;]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Farbe und Stil werden kombiniert (zusammengeschrieben) beim Attribut &#039;&#039;&#039;data-style&#039;&#039;&#039; angegeben, sodass sich beispielsweise für eine graue Punktlinie folgendes ergibt: &amp;lt;code&amp;gt;data-style=&amp;quot;ftui l1dot&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
Um die Darstellung als normale Linie zu erhalten, darf im Gegensatz zu den anderen Linienformen der Stil &amp;lt;code&amp;gt;normal&amp;lt;/code&amp;gt; nicht angegeben werden. Für eine einfache graue Linie ist also die Angabe &amp;lt;code&amp;gt;data-style=&amp;quot;ftui l1&amp;quot;&amp;lt;/code&amp;gt; korrekt, wohingegen &amp;lt;code&amp;gt;data-style=&amp;quot;ftui l1normal&amp;quot;&amp;lt;/code&amp;gt; zu einer fehlerhaften Anzeige führt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Der Stil &#039;&#039;sym&#039;&#039; ist speziell dafür geeignet, Symbole statt Linien zu zeichnen. Dazu kann beim Attribut &#039;&#039;&#039;data-ptype&#039;&#039;&#039; als Linienform ein beliebiges Font-Awsome-, oder Open Automation-Icon angegeben werden. Alle in diesem Abschnitt enthaltenen Abbildungen sind mit &amp;lt;code&amp;gt;data-ptype=&amp;quot;lines&amp;quot;&amp;lt;/code&amp;gt; entstanden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Übergänge mit datenabhängigen Grenzen:&#039;&#039;&#039; Plotstile (data-style) können auch direkt als Gradienten auf Basis von Plot-Datenwerten definiert werden. Dazu muss der Plotstil als Array angegeben werden. Der erste Wert des Arrays gibt an, ob nur die Linie gezeichnet werden soll (Zahl angeben, die die Dicke der Linie definiert) oder gefüllt (&amp;quot;fill&amp;quot; eintragen). Alle danach folgenden Array Elemente sind beliebig viele Stopp Punkte für die Farbübergänge, welche wiederum aus Arrays mit 3 Parametern bestehen. Für jeden Stopp Punkt werden der Datenwert, die Farbe und die Durchsichtigkeit gesetzt. Hierdurch lassen sich z.B. Einfärbungen setzen, die für Temperaturplots immer negative Werte blau einfärben und positive Werte rot. Zwischen den Stop Punkten wird die Farbe interpoliert, also ein weicher Übergang generiert. Will man harte Übergänge muss man Zwei Stopp Punkte mit unterschiedlichen Farbwerten aber dem gleichen Datenwert erzeugen.&amp;lt;br&amp;gt;&lt;br /&gt;
Beispiel 1 für einen weichen Gradienten, der bei 0 von blau nach rot übergeht, bei diesem Übergang durchsichtig ist und von dort nach negativen bzw. positiven Werden immer deckender wird:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;data-style=&#039;[&amp;quot;fill&amp;quot;,[&amp;quot;-20&amp;quot;,&amp;quot;#0000ff&amp;quot;,&amp;quot;0.7&amp;quot;],[&amp;quot;0&amp;quot;,&amp;quot;#0000ff&amp;quot;,&amp;quot;0&amp;quot;],[&amp;quot;0&amp;quot;,&amp;quot;#ff0000&amp;quot;,&amp;quot;0&amp;quot;],[&amp;quot;302&amp;quot;,&amp;quot;#ff0000&amp;quot;,&amp;quot;0.7&amp;quot;]]&#039;&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Beispiel 2 mit einem harten Übergang von blau nach rot bei 0:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;data-style=&#039;[&amp;quot;fill&amp;quot;,[&amp;quot;-20&amp;quot;,&amp;quot;#0000ff&amp;quot;,&amp;quot;0.7&amp;quot;],[&amp;quot;0&amp;quot;,&amp;quot;#0000ff&amp;quot;,&amp;quot;0.7&amp;quot;],[&amp;quot;0&amp;quot;,&amp;quot;#ff0000&amp;quot;,&amp;quot;0.7&amp;quot;],[&amp;quot;50&amp;quot;,&amp;quot;#ff0000&amp;quot;,&amp;quot;0.7&amp;quot;]]&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
Es gibt auch die Möglichkeit den Bereich zwischen zwei Graphen einzufärben. Dazu muss ein Wert in Columnspec als Array angegeben werden. Ist dies der Fall, dann wird der zweite Graph umgekehrt an den ersten angehängt.&amp;lt;br&amp;gt;&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
data-columnspec=&#039;[&lt;br /&gt;
    &amp;quot;Func:logProxy_proplanta2Plot(\\x22AgroWeather\\x22,\\x22weatherIcon\\x22,$from,$to,12)&amp;quot;,&lt;br /&gt;
    [&lt;br /&gt;
        &amp;quot;Func:logProxy_proplanta2Plot(\\x22AgroWeather\\x22,\\x22tempMax\\x22,$from,$to,12)&amp;quot;,&lt;br /&gt;
        &amp;quot;Func:logProxy_proplanta2Plot(\\x22AgroWeather\\x22,\\x22tempMin\\x22,$from,$to,12)&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;Func:logProxy_proplanta2Plot(\\x22AgroWeather\\x22,\\x22rain\\x22,$from,$to,0,\\x22day\\x22)&amp;quot;&lt;br /&gt;
]&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Datei:FTUI Widget Chart DynamicStyles.png|thumb|none|225px|dynamischer Übergang]]&lt;br /&gt;
&lt;br /&gt;
===Form der Linien===&lt;br /&gt;
Das Attribut &#039;&#039;&#039;data-ptype&#039;&#039;&#039; beeinflusst die Form der Linien. Hier sind folgende Werte möglich:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;lines&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;steps&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;fsteps&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;histeps&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bars&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ibars&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;cubic&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;quadratic&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;quadraticSmooth&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusätzlich ist es möglich, Symbole anzeigen zu lassen. Unterstützt werden Font-Awesome (&#039;fa-...&#039;), Open Automation (&#039;oa-...&#039;) und FHEM-Symbole (&#039;fs-...&#039;)). Damit die Symbole korrekt angezeigt werden, muss  im Attribut &#039;&#039;&#039;data-style&#039;&#039;&#039; der Stil &amp;lt;code&amp;gt;sym&amp;lt;/code&amp;gt; gewählt werden, da sonst nur Punkte, statt der Symbole gezeichnet werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;DG.wz.HZ.Heizungsventil&amp;quot;&lt;br /&gt;
	 data-logdevice=&amp;quot;FileLog_DG.wz.HZ.Heizungsventil&amp;quot;&lt;br /&gt;
	 ...&lt;br /&gt;
	 data-style=&amp;quot;ftui l1sym&amp;quot;&lt;br /&gt;
	 data-ptype=&amp;quot;fa-cog&amp;quot;&lt;br /&gt;
	 ...&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Größe der Symbole ist in der Datei &amp;lt;code&amp;gt;css/ftui_chart.css&amp;lt;/code&amp;gt; auf 12px festgelegt. Dieser Wert kann in einer eigenen CSS-Datei durch Anpassung von &amp;lt;code&amp;gt;stroke-width&amp;lt;/code&amp;gt; überschrieben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.ftui.l0sym		{ stroke:#DDA400; stroke-width:12px; fill:none; }&lt;br /&gt;
.ftui.l1sym		{ stroke:#BBBBBB; stroke-width:12px; fill:none; }&lt;br /&gt;
.ftui.l2sym		{ stroke:#CC0000; stroke-width:12px; fill:none; }&lt;br /&gt;
.ftui.l3sym		{ stroke:#CCCC00; stroke-width:12px; fill:none; }&lt;br /&gt;
.ftui.l4sym		{ stroke:#33CC33; stroke-width:12px; fill:none; }&lt;br /&gt;
.ftui.l5sym		{ stroke:#33CCCC; stroke-width:12px; fill:none; }&lt;br /&gt;
.ftui.l6sym		{ stroke:#3333CC; stroke-width:12px; fill:none; }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;data-ptype&#039;&#039;&#039; kann auch Inhalt im Format &amp;lt;code&amp;gt;&#039;icon:1&#039;&amp;lt;/code&amp;gt; verarbeiten. Dann muss der zugehörige Wert in &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; den Pfad zu einem Icon (z.B. für Wettervorhersagen) beinhalten. Der Y-Wert wird dann vom ersten Graphen übernommen. Weitere Ausführungen hierzu im Beispiel [[#Darstellung der Wetter Icons im Diagramm]]. &lt;br /&gt;
&lt;br /&gt;
===Stapeln von Linien===&lt;br /&gt;
Über &#039;&#039;&#039;data-ptype&#039;&#039;&#039; kann zusätzlich festgelegt werden, ob Graphen übereinander gestapelt werden sollen. &amp;lt;code&amp;gt;data-ptype=&#039;lines:1&#039;&amp;lt;/code&amp;gt; bedeutet, dass der zugehörige Graph auf den Graph mit der Nummer 1 gestapelt werden soll. So etwas kann z.B. Sinn machen, wenn man den Stromverbrauch einzelner Devices darstellen und zusätzlich sehen will, wie hoch die Summe ist. Beispiel siehe unten.&lt;br /&gt;
&lt;br /&gt;
[[Datei:FTUI Widget Chart Stacked.png]]&lt;br /&gt;
&lt;br /&gt;
===Zeitstrahl / Start &amp;amp; Ende auf der X-Achse===&lt;br /&gt;
Die Attribute &#039;&#039;&#039;data-daysago_start&#039;&#039;&#039; und &#039;&#039;&#039;data-daysago_end&#039;&#039;&#039; dienen der Definition von Anfang und Ende der X-Achse. Im einfachsten Fall wird eine Anzahl an Tagen eingegeben, die sich auf das aktuelle Datum beziehen. Dabei gilt es zu beachten, dass es sich um &#039;&#039;vergangene Tage&#039;&#039; handelt. Das bedeutet, dass Tage in der Vergangenheit als positive Zahl angegeben werden, Tage in der Zukunft hingegen als negative Zahl. Es kann jeweils  auch ein fixes Datum (z.B. &#039;2013-10-23&#039;) angegeben werden. Uhrzeitangaben werden nur berücksichtigt, wenn &#039;&#039;&#039;data-nofulldays=&#039;true&#039; &#039;&#039;&#039; verwendet wird.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Relative Zeitangabe in Stunden&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Zur Ausgabe einer Anzahl an zurückliegenden Stunden bis zum aktuellen Zeitpunkt wird als Startzeitpunkt die Anzahl der Stunden angegeben werden, die angezeigt werden sollen, gefolgt vom Kleinbuchstaben &#039;&#039;&#039;h&#039;&#039;&#039;. Als Endzeitpunkt wird &#039;&#039;&#039;now&#039;&#039;&#039; gewählt.&amp;lt;br /&amp;gt;&lt;br /&gt;
Das nachfolgende Beispiel zeigt die Werte der vergangenen 3 Stunden an:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
data-nofulldays=&amp;quot;true&amp;quot;&lt;br /&gt;
data-daysago_start=&amp;quot;3h&amp;quot;&lt;br /&gt;
data-daysago_end=&amp;quot;now&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fester Zeitbereich des heutigen Tages (Stunden)&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Um ein festes Stundenfenster des heutigen Tages anzuzeigen, werden die absoluten Stundenzahlen mit negativem Vorzeichen, gefolgt vom Großbuchstaben &#039;&#039;&#039;H&#039;&#039;&#039; angegeben. Wird &#039;&#039;&#039;data-daysago_start&#039;&#039;&#039; als positiver Wert angegeben, wird die Anzahl der Stunden von heute 0:00 Uhr subtrahiert (siehe Rechenweg weiter unten).&amp;lt;br /&amp;gt;&lt;br /&gt;
Das Beispiel zeigt den Zeitbereich von heute 5:00 Uhr bis heute 22:00 Uhr:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
data-nofulldays=&amp;quot;true&amp;quot;&lt;br /&gt;
data-daysago_start=&amp;quot;-5H&amp;quot;&lt;br /&gt;
data-daysago_end=&amp;quot;-22H&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fester Zeitbereich Tage-übergreifend&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Die Zeit in Tagen kann als Gleitkommazahl angegeben werden. Damit ist es möglich, Tage und Uhrzeiten zu kombinieren. Die Werte sind dann als Teil eines ganzen Tages, bezogen auf heute 0:00 Uhr zu errechnen und mit &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; als Teiler anzugeben.&amp;lt;br /&amp;gt;&lt;br /&gt;
Das nachfolgende Beispiel zeigt einen Zeitbereich von &#039;&#039;&#039;gestern 15:00 Uhr&#039;&#039;&#039; bis &#039;&#039;&#039;morgen 3:00 Uhr&#039;&#039;&#039;.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
data-nofulldays=&amp;quot;true&amp;quot;&lt;br /&gt;
data-daysago_start=&amp;quot;0.375&amp;quot;&lt;br /&gt;
data-daysago_end=&amp;quot;-1.125&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die nachfolgenden Rechenwege sind die Einheiten nur zur Verdeutlichung angegeben. Die Einheiten werden im Attribut nicht angegeben.&lt;br /&gt;
&lt;br /&gt;
Der Wert für &#039;&#039;&#039;GESTERN&#039;&#039;&#039; wird wie folgt ermittelt:&amp;lt;br /&amp;gt;&lt;br /&gt;
Ausgangspunkt ist heute 0:00 Uhr, gestern 15:00 Uhr liegt also 9 Stunden davor. Diese 9 Stunden sind ein &amp;lt;code&amp;gt;9/24 Tag&amp;lt;/code&amp;gt; und errechnet sich so:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1d / 24h = 0.0416666...d/h&lt;br /&gt;
0.0416d/h * 9h = 0.375d&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Wert für &#039;&#039;&#039;MORGEN&#039;&#039;&#039; wird wie folgt ermittelt:&amp;lt;br /&amp;gt;&lt;br /&gt;
Ausgangspunkt ist wieder heute 0:00 Uhr, morgen 3:00 Uhr liegt dann 27 Stunden dahinter. Der Einfachheit halber werden hier nur die 3 Stunden errechnet und dann ein ganzer Tag addiert:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1d / 24h = 0.0416666...d/h&lt;br /&gt;
0.0416d/h * 3h = 0.125d&lt;br /&gt;
&lt;br /&gt;
0.125d + 1d = 1.125d&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Da das Attribut Tage in der Vergangenheit erwartet, muss für einen Wert in der Zukunft wieder eine negative Zahl angegeben werden.&lt;br /&gt;
&lt;br /&gt;
===Zeitformat der X-Achse===&lt;br /&gt;
Die Zeitanzeige auf der X-Achse kann sehr flexibel eingestellt werden. Dafür stehen verschiedene Platzhalter zur Verfügung, die durch spezielle Zeichen (&amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt; &amp;lt;/code&amp;gt; (Leerzeichen), &amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;,&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;\&amp;lt;/code&amp;gt;) getrennt werden. Alle Zeichen werden trotz Escape-Zeichen (&amp;lt;code&amp;gt;\&amp;lt;/code&amp;gt;) in der Ausgabe angezeigt.&lt;br /&gt;
&lt;br /&gt;
Folgende Platzhalter werden unterstützt:&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;mm&#039;&amp;lt;/code&amp;gt;: Minuten als zweistellige Zahl&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;hh&#039;&amp;lt;/code&amp;gt;: Stunden als zweistellige Zahl&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;dd&#039;&amp;lt;/code&amp;gt;: Tag als zweistellige Zahl (Kalenderdatum)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;MM&#039;&amp;lt;/code&amp;gt;: Monat als zweistellige Zahl (z.B. 02 für Februar)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;MMM&#039;&amp;lt;/code&amp;gt;: Monat als dreistellige Abkürzung (z.B. Dec für Dezember)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;MMMM&#039;&amp;lt;/code&amp;gt;: Langname des Monats (z.B. March)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;ee&#039;&amp;lt;/code&amp;gt;: Wochentag als zweistellige Zahl (z.B. 00 für Sonntag)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;eee&#039;&amp;lt;/code&amp;gt;: Wochentag als dreistellige Abkürzung (z.B. Mon für Montag)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;eeee&#039;&amp;lt;/code&amp;gt;: Langname des Wochentags (z.B. Tuesday)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;yy&#039;&amp;lt;/code&amp;gt;: Jahr als zweistellige Zahl (z.B. 16 für 2016)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;yyyy&#039;&amp;lt;/code&amp;gt;: Jahr als vierstellige Zahl (z.B. 2016)&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;LF&#039;&amp;lt;/code&amp;gt;: Fügt einen Zeilenumbruch hinzu&lt;br /&gt;
&lt;br /&gt;
Beispiel: Der String &amp;lt;code&amp;gt;&#039;MMM\LF\yyyy&#039;&amp;lt;/code&amp;gt; zeigt &amp;lt;code&amp;gt;&#039;Jan&#039;&amp;lt;/code&amp;gt; in der ersten, und &amp;lt;code&amp;gt;&#039;2016&#039;&amp;lt;/code&amp;gt; in der zweiten Zeile. &amp;lt;code&amp;gt;&#039;MM.dd 2016&#039;&amp;lt;/code&amp;gt; wird zu &amp;lt;code&amp;gt;&#039;03.05 2016&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Fadenkreuz-Cursor===&lt;br /&gt;
Der Fadenkreuz-Cursor zeigt die Momentanwerte, indem man ihn über die Graphen bewegt. In Desktop-Browsern reicht einfaches Bewegen des Maus. Unter iOS und Android kann der Cursor wird der Cursor durch einfaches Tippen auf die neue Position bewegt.&lt;br /&gt;
&lt;br /&gt;
Mit dem Attribut &#039;&#039;&#039;data-cursorgroup&#039;&#039;&#039; können Graphen gruppiert werden. Am Cursor werden dann die Momentanwerte aller Graphen gleichzeitig angezeigt, die die selbe Zahl besitzen, sobald man die Maus über einen aus der Gruppe bewegt.&lt;br /&gt;
&lt;br /&gt;
===Legende===&lt;br /&gt;
Mit dem Attribut &#039;&#039;&#039;data-legendpos&#039;&#039;&#039; kann die Position der Legende innerhalb des Diagramms festgelegt werden. Die Position wird mit einem Array, bestehend aus zwei Werten im Format &amp;lt;code&amp;gt;&#039;[&amp;quot;&amp;lt;horizontal&amp;gt;&amp;quot;,&amp;quot;&amp;lt;vertikal&amp;gt;&amp;quot;]&#039;&amp;lt;/code&amp;gt; angegeben. Für die horizontale Positionierung sind &amp;lt;code&amp;gt;&#039;left&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&#039;right&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&#039;before&#039;&amp;lt;/code&amp;gt;, und &amp;lt;code&amp;gt;&#039;behind&#039;&amp;lt;/code&amp;gt;, die vertikale Positionierung &amp;lt;code&amp;gt;&#039;top&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&#039;bottom&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&#039;above&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&#039;below&#039;&amp;lt;/code&amp;gt; erlaubt (der Unterschied zwischen &amp;lt;code&amp;gt;&#039;left&#039;&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;&#039;before&#039;&amp;lt;/code&amp;gt; liegt darin, dass im zweiten Fall die Legende nicht in den Zeichenbereich gesetzt wird sondern vor das ganze Chart (entsprechend für &amp;lt;code&amp;gt;&#039;after&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&#039;above&#039;&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;&#039;below&#039;&amp;lt;/code&amp;gt;). Alternativ können auch Zahlen verwendet werden, die die Position in Prozent angeben. Durch verschieben mit der Maus oder durch verschieben mit dem Finger oder Stift auf Touch Devices kann die Legende auch an eine andere Position verschoben werden.&lt;br /&gt;
&lt;br /&gt;
Wenn die Legende eingeblendet ist, kann mittels Klick auf einen Legendeneintrag der zugehörige Graph ein- und ausgeblendet werden.&lt;br /&gt;
&lt;br /&gt;
===3-dimensionale Drehung===&lt;br /&gt;
&#039;&#039;&#039;data-ddd&#039;&#039;&#039; ermöglicht, den Graphen 3-dimensional zu drehen. Als Wert wird ein Array mit den 3 Winkeln für x, y und z erwartet, wobei z selbst bisher nicht unterstützt wird.&lt;br /&gt;
&lt;br /&gt;
Beispiel: &amp;lt;code&amp;gt;data-ddd=&#039;[&amp;quot;40&amp;quot;,&amp;quot;60&amp;quot;,&amp;quot;0&amp;quot;]&#039;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Wenn der 3D Modus aktiv ist (&#039;&#039;&#039;data-ddd&#039;&#039;&#039; gesetzt) sind 2 zusätzliche Parameter verfügbar um das Aussehen der Graphen zu beeinflussen. &#039;&#039;&#039;data-dddspace&#039;&#039;&#039; gibt an, wie viele pixel der Raum zwischen den einzelnen in z-Richtung hintereinander angeordneten Graphen betragen soll.&lt;br /&gt;
&#039;&#039;&#039;data-dddwidth&#039;&#039;&#039; legt fest, wie viele pixel die einzelnen Graphen tief (oder dick) sein sollen.&lt;br /&gt;
&lt;br /&gt;
Wenn das Array angegeben wird, erscheinen zwei zusätzliche Buttons im Diagramm, mit denen die Drehung in X- und Y-Richtung verändert werden kann.&lt;br /&gt;
&lt;br /&gt;
===Diagrammtitel===&lt;br /&gt;
Mit dem Attribut &#039;&#039;&#039;data-title&#039;&#039;&#039; kann dem Diagramm, ähnlich wie in FHEM-SVG-Plots, ein Titel hinzugefügt werden.&lt;br /&gt;
&lt;br /&gt;
Folgende Platzhalter werden unterstützt:&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;min1&#039;&amp;lt;/code&amp;gt;: Minimaler Y-Wert des ersten Graphs&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;max1&#039;&amp;lt;/code&amp;gt;: Maximaler Y-Wert des ersten Graphs&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;avg1&#039;&amp;lt;/code&amp;gt;: Mittlerer Y-Wert des ersten Graphs&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;cnt1&#039;&amp;lt;/code&amp;gt;: Anzahl der dargestellten Einzelwerte im ersten Graph&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;currval1&#039;&amp;lt;/code&amp;gt;: Letzter, bzw. aktuellster Y-Wert des ersten Graphs&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;mindate1&#039;&amp;lt;/code&amp;gt;: Niedrigster Wert auf der X-Achse des ersten Graphs&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;maxdate1&#039;&amp;lt;/code&amp;gt;: Höchster Wert auf der X-Achse vom ersten Graphs&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;currdate1&#039;&amp;lt;/code&amp;gt;: Letzter, bzw. aktuellster Wert auf der X-Achse des ersten Graphs&lt;br /&gt;
&lt;br /&gt;
Durch Einsetzen einer anderen Zahl statt &#039;1&#039; können auch die Werte der anderen Graphen angezeigt werden. Das Weglassen der Zahl bewirkt, dass der jeweils zutreffende Wert automatisch ermittelt wird. Bedeutet: &amp;lt;code&amp;gt;max&amp;lt;/code&amp;gt; führt dazu, dass der höchste Wert aller angezeigter Graphen verwendet wird.&lt;br /&gt;
Zusätzlich ist es möglich durch &amp;quot;$eval(&amp;lt;regexp&amp;gt;)&amp;quot; regular Expressions auszuwerten (also z.B. Berechnungen durchzuführen). In &amp;lt;regexp&amp;gt; können auch &amp;quot;$data()&amp;quot; vorkommen.&lt;br /&gt;
&lt;br /&gt;
Beispiel: &amp;lt;code&amp;gt;data-title=&amp;quot;Klima Wohnzimmer Average: $eval(parseInt($data{avg1}*10)/10)°C / Max: $eval(parseInt($data{max1}*10)/10)°C&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Buttons im Diagramm===&lt;br /&gt;
Es gibt mehrere Buttons, mit denen sich die Anzeige des Diagramms verändern lässt. &amp;lt;code&amp;gt;&amp;lt;-&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;-&amp;gt;&amp;lt;/code&amp;gt; bewegen die Graphen nach links und rechts. &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt; zoomen die Anzeige. &amp;lt;code&amp;gt;legend&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;cursor&amp;lt;/code&amp;gt; schalten die zugehörigen Anzeigen ein und aus. Falls der 3D Modus eingeschaltet ist, gibt es Buttons zum Drehen der Darstellung um die X- und Y-Achse. Falls &amp;lt;code&amp;gt;data-timeranges&amp;lt;/code&amp;gt; gesetzt ist, wird ein Pulldown Menü dargestellt, welches die Auswahl von dort definierten Zeiträumen für die X-Achse erlaubt.&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
===Einfaches Diagramm===&lt;br /&gt;
Das Beispiel zeigt ein einfaches Diagramm mit 4 unterschiedlich formatierten Graphen, Legende und Momentanwerten am Fadenkreuz-Cursor.&lt;br /&gt;
&lt;br /&gt;
[[File:Chart_tabletUI.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	data-logdevice=&#039;[&amp;quot;Log.Garden&amp;quot;,&amp;quot;Log.Garden&amp;quot;,&amp;quot;Log.Garden&amp;quot;,&amp;quot;Log.Predicted&amp;quot;]&#039;&lt;br /&gt;
	data-columnspec=&#039;[&amp;quot;4:Garden.T:15:&amp;quot;,&amp;quot;10:Garden.T:0:delta-h&amp;quot;,&amp;quot;10:Garden.T:0:delta-d&amp;quot;,&amp;quot;4:predicted.*:15:&amp;quot;]&#039;&lt;br /&gt;
	data-style=&#039;[&amp;quot;ftui l0fill&amp;quot;,&amp;quot;ftui l1fill&amp;quot;,&amp;quot;ftui l2&amp;quot;,&amp;quot;ftui l3dot&amp;quot;]&#039;&lt;br /&gt;
	data-ptype=&#039;[&amp;quot;lines&amp;quot;,&amp;quot;histeps&amp;quot;,&amp;quot;histeps&amp;quot;,&amp;quot;cubic&amp;quot;]&#039;&lt;br /&gt;
	data-uaxis=&#039;[&amp;quot;primary&amp;quot;,&amp;quot;secondary&amp;quot;,&amp;quot;secondary&amp;quot;,&amp;quot;primary&amp;quot;]&#039;&lt;br /&gt;
	data-legend=&#039;[&amp;quot;Temperature&amp;quot;,&amp;quot;Rain/hour&amp;quot;,&amp;quot;Rain/day&amp;quot;,&amp;quot;Predicted Temp.&amp;quot;]&#039;&lt;br /&gt;
	data-yunit=&amp;quot;°C&amp;quot;&lt;br /&gt;
	data-ytext=&amp;quot;Temperature&amp;quot;&lt;br /&gt;
	data-minvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	data-maxvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	data-yunit_sec=&amp;quot;mm&amp;quot;&lt;br /&gt;
	data-ytext_sec=&amp;quot;Rain (mm)&amp;quot;&lt;br /&gt;
	data-height=&amp;quot;250&amp;quot;&lt;br /&gt;
	data-yticks=&amp;quot;auto&amp;quot;&lt;br /&gt;
	data-minvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	data-maxvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	data-nofulldays=&amp;quot;true&amp;quot;&lt;br /&gt;
	data-daysago_start=&amp;quot;2013-08-13T00:00:00&amp;quot;&lt;br /&gt;
	data-daysago_end=&amp;quot;2013-08-14T00:00:00&amp;quot;&lt;br /&gt;
	data-cursorgroup=&amp;quot;1&amp;quot;&lt;br /&gt;
	data-scrollgroup=&amp;quot;1&amp;quot;&lt;br /&gt;
	data-xticks=&amp;quot;auto&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===7-Tage-Wettervorhersage mit Proplanta===&lt;br /&gt;
In diesem Beispiel wird gezeigt, wie die Vorhersagewerte von [[PROPLANTA]] in einem Diagramm dargestellt werden können. Da die Werte nicht in einer Datenbank oder einem FileLog vorliegen, müssen sie über [[LogProxy]] verarbeitet werden. Dafür sind einige Vorbereitungen in FHEM nötig.&lt;br /&gt;
&lt;br /&gt;
[[File:FTUI_Widget_Chart-fc-Proplanta.png|941px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.&#039;&#039;&#039; Ein LogProxy-Device muss vorhanden sein:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define myLogProxy logProxy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2.&#039;&#039;&#039; In der Datei &amp;lt;code&amp;gt;99_myUtils.pm&amp;lt;/code&amp;gt; muss folgende Routine hinzugefügt werden, die die Daten bereitstellt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#---------------------------------------&lt;br /&gt;
# Proplanta LogProxy-Funktion&lt;br /&gt;
#---------------------------------------&lt;br /&gt;
sub logProxy_proplanta2Plot($$$$;$$) {&lt;br /&gt;
	my ($device, $fcValue, $from, $to, $fcHour, $expMode) = @_;&lt;br /&gt;
    my $regex;&lt;br /&gt;
    my @rl;&lt;br /&gt;
    &lt;br /&gt;
	return undef if(!$device);&lt;br /&gt;
    &lt;br /&gt;
    if($fcValue =~ s/_$//) {&lt;br /&gt;
        $regex = &amp;quot;^fc[\\d]+_&amp;quot;.$fcValue.&amp;quot;[\\d]{2}\$&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
        $regex = &amp;quot;^fc[\\d]+_&amp;quot;.$fcValue.&amp;quot;\$&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    $fcHour = 12 if(!defined $fcHour);&lt;br /&gt;
    $expMode = &amp;quot;point&amp;quot; if(!defined $expMode);&lt;br /&gt;
&lt;br /&gt;
	if( defined($defs{$device}) ) {&lt;br /&gt;
		if( $defs{$device}{TYPE} eq &amp;quot;PROPLANTA&amp;quot; ) {&lt;br /&gt;
            @rl = sort{&lt;br /&gt;
                my ($an) = ($a =~ m/fc(\d+)_.*/);&lt;br /&gt;
                my ($bn) = ($b =~ m/fc(\d+)_.*/);&lt;br /&gt;
                $an &amp;lt;=&amp;gt; $bn or $a cmp $b;&lt;br /&gt;
                }( grep /${regex}/,keys %{$defs{$device}{READINGS}} );&lt;br /&gt;
			return undef if( !@rl );&lt;br /&gt;
		} else {&lt;br /&gt;
			Log3 undef, 2, &amp;quot;logProxy_proplanta2Plot: $device is not a PROPLANTA device&amp;quot;;&lt;br /&gt;
			return undef;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	my $fromsec = SVG_time_to_sec($from);&lt;br /&gt;
	my $tosec   = SVG_time_to_sec($to);&lt;br /&gt;
	my $sec = $fromsec;&lt;br /&gt;
	my ($h,$fcDay,$mday,$mon,$year);&lt;br /&gt;
	my $timestamp;&lt;br /&gt;
    &lt;br /&gt;
	my $reading;&lt;br /&gt;
	my $value;&lt;br /&gt;
	my $prev_value;&lt;br /&gt;
	my $min = 999999;&lt;br /&gt;
	my $max = -999999;&lt;br /&gt;
	my $ret = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	# while not end of plot range reached&lt;br /&gt;
	while(($sec &amp;lt; $tosec) &amp;amp;&amp;amp; @rl) {&lt;br /&gt;
		#remember previous value for start of plot range&lt;br /&gt;
		$prev_value = $value;&lt;br /&gt;
&lt;br /&gt;
		$reading = shift @rl;&lt;br /&gt;
        ($fcDay) = $reading =~ m/^fc(\d+).*/;&lt;br /&gt;
   		$h = ($reading =~ m/.*(\d\d)$/)?$1:$fcHour;&lt;br /&gt;
		$value = ReadingsVal($device,$reading,undef);&lt;br /&gt;
        &lt;br /&gt;
		($mday,$mon,$year) = split(&#039;\.&#039;,ReadingsVal($device,&amp;quot;fc&amp;quot;.$fcDay.&amp;quot;_date&amp;quot;,undef));&lt;br /&gt;
		$timestamp = sprintf(&amp;quot;%04d-%02d-%02d_%02d:%02d:%02d&amp;quot;, $year, $mon, $mday, $h, 0, 0);&lt;br /&gt;
		$sec = SVG_time_to_sec($timestamp);&lt;br /&gt;
        &lt;br /&gt;
		# skip all values before start of plot range&lt;br /&gt;
		next if( SVG_time_to_sec($timestamp) &amp;lt; $fromsec );&lt;br /&gt;
&lt;br /&gt;
		# add first value at start of plot range&lt;br /&gt;
		if( !$ret &amp;amp;&amp;amp; $prev_value ) {&lt;br /&gt;
		$min = $prev_value if( $prev_value &amp;lt; $min );&lt;br /&gt;
		$max = $prev_value if( $prev_value &amp;gt; $max );&lt;br /&gt;
		$ret .= &amp;quot;$from $prev_value\n&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		# done if after end of plot range&lt;br /&gt;
		last if($sec &amp;gt; $tosec);&lt;br /&gt;
&lt;br /&gt;
		$min = $value if( $value &amp;lt; $min );&lt;br /&gt;
		$max = $value if( $value &amp;gt; $max );&lt;br /&gt;
&lt;br /&gt;
		# add actual controll point&lt;br /&gt;
		$ret .= &amp;quot;$timestamp $value\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#		Log 1, &amp;quot;$timestamp $value -0- $reading&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
    if(($sec &amp;lt; $tosec) &amp;amp;&amp;amp; !@rl &amp;amp;&amp;amp; ($expMode eq &amp;quot;day&amp;quot;)) {&lt;br /&gt;
    	$timestamp = sprintf(&amp;quot;%04d-%02d-%02d_%02d:%02d:%02d&amp;quot;, $year, $mon, $mday, 23, 59, 59);&lt;br /&gt;
    	if(SVG_time_to_sec($timestamp) &amp;lt; $tosec) {&lt;br /&gt;
        	$ret .= &amp;quot;$timestamp $value\n&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
			$ret .= &amp;quot;$to $value\n&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    elsif(($sec &amp;gt; $tosec) &amp;amp;&amp;amp; ($expMode eq &amp;quot;day&amp;quot;)) {&lt;br /&gt;
       	$value = $prev_value + ($value - $prev_value)*(86400 + ($tosec - $sec))/86400;&lt;br /&gt;
       	$ret .= &amp;quot;$to $value\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
	return ($ret,$min,$max,$prev_value);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend können die Daten im Chart-Widget angezeigt werden. Der Device-Name von Proplanta heißt hier im Beispiel &amp;lt;code&amp;gt;AU.xx.WE.Proplanta&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;AU.xx.WE.Proplanta&amp;quot;&lt;br /&gt;
	 data-logdevice=&#039;[&lt;br /&gt;
	 					&amp;quot;myLogProxy&amp;quot;,&lt;br /&gt;
	 					&amp;quot;myLogProxy&amp;quot;,&lt;br /&gt;
	 					&amp;quot;myLogProxy&amp;quot;&lt;br /&gt;
	 				]&#039;&lt;br /&gt;
	 data-columnspec=&#039;[&lt;br /&gt;
	 					&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22rain_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
	 					&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22chOfRain_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
	 					&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22cloud_\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;&lt;br /&gt;
	 				]&#039;&lt;br /&gt;
	 data-style=&#039;[&lt;br /&gt;
	 					&amp;quot;ftui l6fill&amp;quot;,&lt;br /&gt;
	 					&amp;quot;ftui l5fill&amp;quot;,&lt;br /&gt;
	 					&amp;quot;ftui l1fill&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-ptype=&#039;[&lt;br /&gt;
	 					&amp;quot;steps&amp;quot;,&lt;br /&gt;
	 					&amp;quot;quadraticSmooth&amp;quot;,&lt;br /&gt;
	 					&amp;quot;quadraticSmooth&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-uaxis=&#039;[&lt;br /&gt;
	 					&amp;quot;primary&amp;quot;,&lt;br /&gt;
	 					&amp;quot;secondary&amp;quot;,&lt;br /&gt;
	 					&amp;quot;secondary&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-legend=&#039;[&lt;br /&gt;
	 					&amp;quot;Regen&amp;quot;,&lt;br /&gt;
	 					&amp;quot;Regenwahrscheinlichkeit&amp;quot;,&lt;br /&gt;
	 					&amp;quot;Wolken&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-yunit=&amp;quot;mm&amp;quot;&lt;br /&gt;
	 data-ytext=&amp;quot;Regen&amp;quot;&lt;br /&gt;
	 data-yunit_sec=&amp;quot;%&amp;quot;&lt;br /&gt;
	 data-ytext_sec=&amp;quot;Chance auf Regen / Wolken&amp;quot;&lt;br /&gt;
	 data-timeformat=&amp;quot;eeee&amp;quot;&lt;br /&gt;
	 data-minvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-maxvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-minvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-maxvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-daysago_start = &amp;quot;0&amp;quot;&lt;br /&gt;
	 data-daysago_end = &amp;quot;-7&amp;quot;&lt;br /&gt;
	 data-xticks=&amp;quot;1440&amp;quot;&lt;br /&gt;
	 data-yticks=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-title=&amp;quot;7-Tage-Wettervorhersage&amp;quot;&lt;br /&gt;
	 data-showlegend=&amp;quot;true&amp;quot;&lt;br /&gt;
	 class=&amp;quot;nobuttons fullsize&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hilfreiche Links und Quellen zu diesem Beispiel:&#039;&#039;&#039;&lt;br /&gt;
*[[LogProxy|LogProxy im FHEM-Wiki]]&lt;br /&gt;
*{{Link2Forum|Topic=22967|Message=246973|LinkText=Stundengenaue Wettervorhersage (#1) im FHEM-Forum}}&lt;br /&gt;
*{{Link2Forum|Topic=22967|Message=334713|LinkText=Stundengenaue Wettervorhersage (#2) im FHEM-Forum}}&lt;br /&gt;
&lt;br /&gt;
===Darstellung der Wetter Icons im Diagramm===&lt;br /&gt;
&lt;br /&gt;
[[File:Wetterchart2.png]]&lt;br /&gt;
&lt;br /&gt;
Wie oben bereits beschrieben, gibt es beim Chart grundsätzlich die Möglichkeit, Icons, welche in Form von URLs in den Logs abgelegt sind oder welche per logProxy generiert werden, darzustellen. Die Icons werden auf genau dem gleichen Weg von FHEM gelesen, wie alle anderen Datenpunkte. Im Folgenden wird ein Beispiel gezeigt, mit dem die im Proplanta Modul als Readings abgelegten Icons per logProxy Funktion gelesen und in ein Chart eingebaut werden könnnen.&lt;br /&gt;
Da es beim Proplanta Modul für die ersten 7 Tage nicht das Reading &amp;lt;code&amp;gt;fc#_weatherIcon&amp;lt;/code&amp;gt; gibt, sondern mehrere Readings für unterschiedliche Tageszeiten wogegen für die zweiten 7 Tage ausschließlich das Reading &amp;lt;code&amp;gt;fc#_weatherIcon&amp;lt;/code&amp;gt; vorhanden ist, sollte per &amp;lt;code&amp;gt;attr device userReading&amp;lt;/code&amp;gt; mit folgendem Eintrag dafür gesorgt werden, dass für alle Tage ein Reading &amp;lt;code&amp;gt;fc#_weatherIcon&amp;lt;/code&amp;gt; vorhanden ist (alternativ könnten auch 2 Graphen gezeichnet werden, wobei der erste dann nur die ersten 7 Tage enthält und der zweite die letzen 7 Tage, will man nur die ersten 7 Tage darstellen braucht man das userReading nicht unbedingt).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
fc0_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc0_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);},&lt;br /&gt;
fc1_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc1_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);},&lt;br /&gt;
fc2_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc2_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);},&lt;br /&gt;
fc3_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc3_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);},&lt;br /&gt;
fc4_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc4_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);},&lt;br /&gt;
fc5_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc5_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);},&lt;br /&gt;
fc6_weatherIcon {ReadingsVal(&amp;quot;AU.xx.WE.Proplanta&amp;quot;,&amp;quot;fc6_weatherDayIcon&amp;quot;,&amp;quot;&amp;quot;);}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Um die Icons darzustellen muss ein zusätzlicher Graph definiert werden. Dieser nutzt neben der Columnspec, die die URLs abruft den Parameter &amp;lt;code&amp;gt;data-ptype=&amp;quot;icons:#&amp;quot;&amp;lt;/code&amp;gt; (# ist eine Zahl und steht für die Nummer, beginnend bei 0 des Graphen, welcher für die y-Position der Icons verwendet werden soll) und den Stil &amp;lt;code&amp;gt;sym&amp;lt;/code&amp;gt;. Der Wert für die Symbolgröße sollte z.B. durch eine zusätzliche Definition im File fhem-tablet-ui-user.css in der Form:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* icon lines */&lt;br /&gt;
.ftui.l99icon	{ stroke:#DDA400; stroke-width:48px; fill:none; }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Im folgenden ein Beispiel, welches eine Linie für die Maximale Tagestemperatur zeichnet und auf dieser Linie die Wetter Icons darstellt.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	 data-device=&amp;quot;AU.xx.WE.Proplanta&amp;quot;&lt;br /&gt;
	 data-logdevice=&#039;[&lt;br /&gt;
	 					&amp;quot;myLogProxy&amp;quot;,&lt;br /&gt;
	 					&amp;quot;myLogProxy&amp;quot;&lt;br /&gt;
	 				]&#039;&lt;br /&gt;
	 data-columnspec=&#039;[&lt;br /&gt;
	 					&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22weatherIcon\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;,&lt;br /&gt;
	 					&amp;quot;Func:logProxy_proplanta2Plot(\\x22AU.xx.WE.Proplanta\\x22,\\x22tempMax\\x22,$from,$to,12,\\x22day\\x22)&amp;quot;&lt;br /&gt;
	 				]&#039;&lt;br /&gt;
	 data-style=&#039;[&lt;br /&gt;
	 					&amp;quot;ftui l99icon&amp;quot;,&lt;br /&gt;
	 					&amp;quot;ftui l1fill&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-ptype=&#039;[&lt;br /&gt;
	 					&amp;quot;icons:1&amp;quot;,&lt;br /&gt;
	 					&amp;quot;quadraticSmooth&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-uaxis=&#039;[&lt;br /&gt;
	 					&amp;quot;primary&amp;quot;,&lt;br /&gt;
	 					&amp;quot;primary&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-legend=&#039;[&lt;br /&gt;
	 					&amp;quot;Wetterbedingung&amp;quot;,&lt;br /&gt;
	 					&amp;quot;Max. Temperature&amp;quot;&lt;br /&gt;
	 			]&#039;&lt;br /&gt;
	 data-yunit=&amp;quot;°C&amp;quot;&lt;br /&gt;
	 data-ytext=&amp;quot;Temperature (°C)&amp;quot;&lt;br /&gt;
	 data-timeformat=&amp;quot;ee\LF\dd.MM&amp;quot;&lt;br /&gt;
	 data-minvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-maxvalue=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-minvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-maxvalue_sec=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-daysago_start=&amp;quot;-1w&amp;quot;&lt;br /&gt;
	 data-y_margin=&amp;quot;20&amp;quot;&lt;br /&gt;
	 data-daysago_end=&amp;quot;-3w&amp;quot;&lt;br /&gt;
	 data-xticks=&amp;quot;1440&amp;quot;&lt;br /&gt;
	 data-yticks=&amp;quot;auto&amp;quot;&lt;br /&gt;
	 data-title=&amp;quot;14-Tage-Wettervorhersage&amp;quot;&lt;br /&gt;
	 data-showlegend=&amp;quot;true&amp;quot;&lt;br /&gt;
	 class=&amp;quot;nobuttons fullsize&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Kuchendiagramme===&lt;br /&gt;
In folgendem Beispiel wird gezeigt, wie man ein &amp;quot;Kuchendiagramm&amp;quot; darstellen kann.&lt;br /&gt;
&lt;br /&gt;
[[File:PieChart.png]]&lt;br /&gt;
&lt;br /&gt;
Ähnlich wie bei den Beispielen für die Wetter Darstellungen wird hierzu auch wieder logProxy benötigt. Zunächst muss die folgende zusätzliche Funktion in &amp;lt;code&amp;gt;99_myUtils.pm&amp;lt;/code&amp;gt; einfügen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#---------------------------------------&lt;br /&gt;
# Funktion zum Erzeugen der Inputs für Kuchendiagramme&lt;br /&gt;
#---------------------------------------&lt;br /&gt;
sub logProxy_values2PieChart($$$$;$$) {&lt;br /&gt;
	my ($device, $reading, $angle_start, $angle_dif, $inner_rad, $show_text) = @_;&lt;br /&gt;
	Log3 undef, 1, &amp;quot;$device, $reading, $angle_start, $angle_dif, $inner_rad, $show_text\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	use constant PI =&amp;gt; 4 * atan2(1,1);&lt;br /&gt;
	&lt;br /&gt;
	my $value=ReadingsVal($device,$reading,0);&lt;br /&gt;
&lt;br /&gt;
	my $angle_delta = $value/100*360;&lt;br /&gt;
	$angle_start = $angle_start/100*360;&lt;br /&gt;
	&lt;br /&gt;
	my $rad=10;&lt;br /&gt;
	my $irad=0;&lt;br /&gt;
	if ($inner_rad) {&lt;br /&gt;
		$irad = $rad*$inner_rad;&lt;br /&gt;
	}&lt;br /&gt;
	my $angle=$angle_start/360*2.0*PI;&lt;br /&gt;
	my $x=$irad*sin($angle);&lt;br /&gt;
	my $y=$irad*cos($angle);&lt;br /&gt;
	my $ret .= &amp;quot;;p &amp;quot;.$x.&amp;quot; &amp;quot;.$y.&amp;quot;\n&amp;quot;; # add segment at angle $angle&lt;br /&gt;
	&lt;br /&gt;
	for (my $i=$angle_start; $i&amp;lt;=$angle_start+$angle_delta; $i+=$angle_dif) {&lt;br /&gt;
		$angle = $i/360*2.0*PI;&lt;br /&gt;
		$x = $rad*sin($angle);&lt;br /&gt;
		$y = $rad*cos($angle);&lt;br /&gt;
		$ret .= &amp;quot;;p &amp;quot;.$x.&amp;quot; &amp;quot;.$y.&amp;quot;\n&amp;quot;; # add segment at angle $angle&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	$angle = ($angle_start+$angle_delta)/360*2.0*PI; # add last segment &lt;br /&gt;
	$ret .= &amp;quot;;p &amp;quot;.$rad*sin($angle).&amp;quot; &amp;quot;.$rad*cos($angle).&amp;quot;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	if ($inner_rad) {&lt;br /&gt;
		for (my $i=$angle_start; $i&amp;lt;$angle_start+$angle_delta; $i+=$angle_dif) {&lt;br /&gt;
			$angle = ($angle_start+$angle_start+$angle_delta-$i)/360*2.0*PI;&lt;br /&gt;
			$x = $irad*sin($angle);&lt;br /&gt;
			$y = $irad*cos($angle);&lt;br /&gt;
			$ret .= &amp;quot;;p &amp;quot;.$x.&amp;quot; &amp;quot;.$y.&amp;quot;\n&amp;quot;; # add segment at angle $angle&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$angle = ($angle_start)/360*2.0*PI; # add last segment &lt;br /&gt;
	$ret .= &amp;quot;;p &amp;quot;.$irad*sin($angle).&amp;quot; &amp;quot;.$irad*cos($angle).&amp;quot;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	if ($show_text) { # show text values&lt;br /&gt;
		$x = ($rad+$irad)/2*sin((2*$angle_start+$angle_delta)/2/360*2.0*PI);&lt;br /&gt;
		$y = ($rad+$irad)/2*cos((2*$angle_start+$angle_delta)/2/360*2.0*PI);&lt;br /&gt;
&lt;br /&gt;
		$ret .= &amp;quot;;t &amp;quot;.$x.&amp;quot; &amp;quot;.$y.&amp;quot; middle &amp;quot;.$show_text.&amp;quot;:&amp;quot;.$value.&amp;quot;%\n&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return($ret);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
In FHEM braucht man Readings, welche eine Zahl enthalten, die als Prozentwert interpretiert wird. Für jeden Prozentwert (also für jedes Reading) generiert die o.a. Funktion nun den Chart Input für ein Kuchenstück und liefert diesen als Antwort auf das GET, welches das Chart Widget auslöst. Dazu braucht die Funktion folgende Parameter: (Name des FHEM Devices, Name des Readings, Start Winkel des Kuchenstücks (Mathematisch gegen den Uhrzeigersinn in Grad), Delta Winkel zum Zeichnen (legt fest in welchen Schritten der Teilkreis des Kuchenstücks gezeichnet wird), Skalierungsfaktor für inneren Ring wenn ein Ring gezeichtnet werden soll (0 bedeutet komplette Kuchenstücke), optionaler Text der ins Kuchenstück vor die Prozentzahl geschrieben wird).&lt;br /&gt;
Im Folgenden eine Beispielkonfiguration für die Darstellung als Kuchendiagramm, die Readings heißen hier dPer1 bis dPer4. Der Startwinkel wird duch Aufsummierung der jeweils vorher schon gezeichneten Kuchenstücke gebildet, dadurch entstehen aneinander hängende Stücke.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
[[Datei:[[Datei:Beispiel.jpg]]]]&amp;lt;div class=&amp;quot;normal noaxes nobuttons&amp;quot;&lt;br /&gt;
        data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
        data-logdevice=&#039;[&amp;quot;lp&amp;quot;]&#039;&lt;br /&gt;
		data-logfile=&amp;quot;CURRENT&amp;quot;&lt;br /&gt;
        data-columnspec=&#039;[&lt;br /&gt;
			&amp;quot;Func:logProxy_values2PieChart(\&amp;quot;dPer1\&amp;quot;,\&amp;quot;state\&amp;quot;,ReadingsVal(\&amp;quot;dPer4\&amp;quot;,\&amp;quot;state\&amp;quot;,0)+ReadingsVal(\&amp;quot;dPer3\&amp;quot;,\&amp;quot;state\&amp;quot;,0),5,0,\&amp;quot;first\&amp;quot;)&amp;quot;,&lt;br /&gt;
			&amp;quot;Func:logProxy_values2PieChart(\&amp;quot;dPer2\&amp;quot;,\&amp;quot;state\&amp;quot;,ReadingsVal(\&amp;quot;dPer4\&amp;quot;,\&amp;quot;state\&amp;quot;,0)+ReadingsVal(\&amp;quot;dPer3\&amp;quot;,\&amp;quot;state\&amp;quot;,0)+ReadingsVal(\&amp;quot;dPer1\&amp;quot;,\&amp;quot;state\&amp;quot;,0),5,0,\&amp;quot;second\&amp;quot;)&amp;quot;,&lt;br /&gt;
			&amp;quot;Func:logProxy_values2PieChart(\&amp;quot;dPer3\&amp;quot;,\&amp;quot;state\&amp;quot;,ReadingsVal(\&amp;quot;dPer4\&amp;quot;,\&amp;quot;state\&amp;quot;,0),5,0,\&amp;quot;third\&amp;quot;)&amp;quot;,&lt;br /&gt;
			&amp;quot;Func:logProxy_values2PieChart(\&amp;quot;dPer4\&amp;quot;,\&amp;quot;state\&amp;quot;,0,5,0,\&amp;quot;fourth\&amp;quot;)&amp;quot;&lt;br /&gt;
		]&#039;&lt;br /&gt;
        data-style=&#039;[&amp;quot;ftui l0fill&amp;quot;,&amp;quot;ftui l1fill&amp;quot;,&amp;quot;ftui l2fill&amp;quot;,&amp;quot;ftui l3fill&amp;quot;]&#039;&lt;br /&gt;
        data-ptype=&#039;[&amp;quot;lines&amp;quot;]&#039;&lt;br /&gt;
        data-uaxis=&#039;[&amp;quot;primary&amp;quot;]&#039;&lt;br /&gt;
        data-legend=&#039;[&amp;quot;First&amp;quot;,&amp;quot;Second&amp;quot;,&amp;quot;Third&amp;quot;,&amp;quot;Fourth&amp;quot;]&#039;&lt;br /&gt;
		data-legendpos=&#039;[&amp;quot;left&amp;quot;,&amp;quot;top&amp;quot;]&#039;&lt;br /&gt;
        data-yunit=&amp;quot;&amp;quot;&lt;br /&gt;
        data-height=&amp;quot;300&amp;quot;&lt;br /&gt;
        data-width=&amp;quot;300&amp;quot;&lt;br /&gt;
		data-ddd=&#039;[&amp;quot;-40&amp;quot;,&amp;quot;0&amp;quot;,&amp;quot;0&amp;quot;]&#039;&lt;br /&gt;
		data-dddspace=&#039;[&amp;quot;-10&amp;quot;]&#039;&lt;br /&gt;
		data-dddwidth=&#039;[&amp;quot;10&amp;quot;]&#039;&lt;br /&gt;
		data-showlegend=&amp;quot;true&amp;quot;&lt;br /&gt;
		data-legend_horiz=&amp;quot;true&amp;quot;&lt;br /&gt;
        data-xticks=&amp;quot;auto&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Fensterstatus offen/geschlossen===&lt;br /&gt;
Dieses Beispiel zeigt, wie ein Fensterkontakt, dessen Reading die Werte &amp;lt;code&amp;gt;closed&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;open&amp;lt;/code&amp;gt; einnimmt, als Graph gezeichnet werden kann. Technisch gesehen werden hier die Werte &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; gezeichnet, indem über das Attribut &#039;&#039;&#039;data-columnspec&#039;&#039;&#039; dem Zustand &amp;lt;code&amp;gt;open&amp;lt;/code&amp;gt; der Wert &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; und allen anderen Zuständen der Wert &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; zugeordnet wird. Über das Attribut &#039;&#039;&#039;data-yticks&#039;&#039;&#039; wird die Beschriftung an der Y-Achse (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;) gegen einen frei definierbaren Text ausgetauscht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;chart&amp;quot;&lt;br /&gt;
	data-device=&amp;quot;wz_fensterstatus&amp;quot;&lt;br /&gt;
	data-logdevice=&#039;[&amp;quot;myDbLog&amp;quot;]&#039;&lt;br /&gt;
	data-logfile=&#039;[&amp;quot;HISTORY&amp;quot;]&#039;&lt;br /&gt;
	data-columnspec=&#039;[&amp;quot;wz_fensterstatus:state:0::$val=($val=~\\x22open\\x22?1:0)&amp;quot;]&#039;&lt;br /&gt;
	data-style=&#039;[&amp;quot;ftui l4fill&amp;quot;]&#039;&lt;br /&gt;
	data-ptype=&#039;[&amp;quot;steps&amp;quot;]&#039;&lt;br /&gt;
	data-height=&amp;quot;290&amp;quot;&lt;br /&gt;
	data-yticks=&#039;[[0,&amp;quot;geschlossen&amp;quot;],[1,&amp;quot;offen&amp;quot;]]&#039;&lt;br /&gt;
	data-minvalue=&amp;quot;0&amp;quot;&lt;br /&gt;
	data-maxvalue=&amp;quot;1.1&amp;quot;&lt;br /&gt;
	data-nofulldays=&amp;quot;true&amp;quot;&lt;br /&gt;
	data-daysago_start=&amp;quot;1&amp;quot;&lt;br /&gt;
	data-daysago_end=&amp;quot;-1&amp;quot;&lt;br /&gt;
	data-cursorgroup=&amp;quot;1&amp;quot;&lt;br /&gt;
	data-scrollgroup=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Das Beispiel funktioniert nur mit DbLog. Falls Logfiles verwendet werden muss statt &#039;$val&#039; &#039;$fld[&#039;&#039;num&#039;&#039;]&#039; verwendet werden. Hierbei steht &#039;&#039;num&#039;&#039; für die Spalte (beginnend bei 0) in der die Daten stehen.&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
{{Link2Forum|Topic= 48450 |Message=401006|LinkText=Thread im FHEM-Forum}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Tablet UI|Chart]]&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Slider&amp;diff=26143</id>
		<title>FTUI Widget Slider</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Slider&amp;diff=26143"/>
		<updated>2018-03-20T09:17:08Z</updated>

		<summary type="html">&lt;p&gt;Eki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das [[{{PAGENAME}}|Slider Widget]] ist ein Widget für [[FHEM Tablet UI]] in Form eines Schiebereglers, mit dem ein beliebiger Wert zwischen zwei festgelegten Grenzwerten auswählen lässt. Es eignet sich zum Beispiel zum Einstellen der Lautstärke eines Audio-Gerätes oder der Helligkeit einer Lampe.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Slider_tabletUI.png&lt;br /&gt;
File:Slider_tabletUI2.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Steuer-Attribute==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-device&#039;&#039;&#039;||FHEM-Device, dessen Reading gesetzt werden soll (&amp;lt;command&amp;gt; &#039;&#039;&#039;&amp;lt;device&amp;gt;&#039;&#039;&#039; &amp;lt;reading&amp;gt; &amp;lt;value&amp;gt;)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-get&#039;&#039;&#039;||Reading, dessen Inhalt den aktuellen Wert wiedergibt||&#039;STATE&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-set&#039;&#039;&#039;||Reading, das gesetzt werden soll (&amp;lt;command&amp;gt; &amp;lt;device&amp;gt; &#039;&#039;&#039;&amp;lt;reading&amp;gt;&#039;&#039;&#039; &amp;lt;value&amp;gt;)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-on&#039;&#039;&#039;||Wert, bei dem der Slider zum maximalen Ausschlag springt||&#039;on&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-off&#039;&#039;&#039;||Wert, bei dem der Slider minimalen Ausschlag springt||&#039;off&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-part&#039;&#039;&#039;||Wählt bei Werten, die durch Leerzeichen getrennt sind, den Teil aus, der angezeigt werden soll. Der Teil kann auch mit RegEx ermittelt werden.||&#039;-1&#039;: alles Anzeigen||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-set-value&#039;&#039;&#039;||Format, wie der eingestellte Wert an FHEM übergeben werden soll||&#039;$v&#039;: Nur den Wert||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-cmd&#039;&#039;&#039;||Befehl, der gesendet werden soll (&#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; &amp;lt;device&amp;gt; &amp;lt;reading&amp;gt; &amp;lt;value&amp;gt;) (z.B. setstate, set, setreading, trigger)||set||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-min&#039;&#039;&#039;||Minimaler Wert, der eingestellt werden kann||0||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-max&#039;&#039;&#039;||Maximaler Wert, der eingestellt werden kann||100||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-step&#039;&#039;&#039;||Schrittweite beim Schieben des Sliders||1||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-width&#039;&#039;&#039;||Breite des Sliders, wenn er horizontal ausgerichtet ist||normal &#039;120px&#039;, mini &#039;60px&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-height&#039;&#039;&#039;||Höhe des Sliders, wenn er vertikal ausgerichtet ist||normal &#039;120px&#039;, mini &#039;60px&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-color&#039;&#039;&#039;||Farbe des Sliders für den Bereich 0...&amp;lt;eingestellter Wert&amp;gt;||&#039;#aa6900&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-background-color&#039;&#039;&#039;||Farbe des Sliders für den Bereich &amp;lt;eingestellter Wert&amp;gt;...&amp;lt;Maximaler Wert&amp;gt;||&#039;#404040&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-handle-diameter&#039;&#039;&#039;||Größe des Griffs||&#039;20&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-touch-diameter&#039;&#039;&#039;||Größe des Griffs, wenn er bewegt wird||wie &#039;&#039;&#039;data-handle-diameter&#039;&#039;&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-timer-state&#039;&#039;&#039;||Statusvariable mit der eine timergesteuerte Bewegung des Sliders ausgelöst werden kann||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-timer-state-on&#039;&#039;&#039;||Zustand der Statusvariablen der die Bewegung startet||&#039;on&#039;||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;data-timer-state-off&#039;&#039;&#039;||Zustand der Statusvariablen der die Bewegung stoppt||&#039;off&#039;||!on (alles was nicht on ist stoppt den Timer)&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;data-timer-step&#039;&#039;&#039;||Erhöhung des Wertes pro Timer-Intervall||1||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;data-timer-interval&#039;&#039;&#039;||Timer-Intervall in Millisekunden||1000||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==CSS-Klassen==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Klasse&lt;br /&gt;
!Beschreibung&lt;br /&gt;
{{FTUI Klasse|mini}}{{FTUI Klasse|big}}{{FTUI Klasse|bigger}}{{FTUI Klasse|large}}{{FTUI Klasse|horizontal}}{{FTUI Klasse|right}}{{FTUI Klasse|negated}}{{FTUI Klasse|value}}{{FTUI Klasse|FS20}}{{FTUI Klasse|tap}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Der Slider unterstützt &#039;&#039;tap to target&#039;&#039;, also das Springen zum gewünschten Wert durch einfaches Antippen, nur, wenn die CSS-Klasse &#039;&#039;&#039;tap&#039;&#039;&#039; verwendet wird.&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
===Vertikaler Schieberegler===&lt;br /&gt;
Einfacher Schieberegler mit dem Einstellbereich 10...90&lt;br /&gt;
&lt;br /&gt;
[[File:Slider_tabletUI.png]]&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;slider&amp;quot; &lt;br /&gt;
     data-device=&#039;Dummy1&#039; &lt;br /&gt;
     data-min=&amp;quot;10&amp;quot; &lt;br /&gt;
     data-max=&amp;quot;90&amp;quot; &lt;br /&gt;
     class=&amp;quot;cell&amp;quot; &amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;label&amp;quot; class=&amp;quot;cell&amp;quot;&amp;gt;Light1&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Horizontaler Schieberegler===&lt;br /&gt;
Einfacher Schieberegler mit dem Einstellbereich 0...100&lt;br /&gt;
&lt;br /&gt;
[[File:Slider_tabletUI2.jpg]]&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;slider&amp;quot;&lt;br /&gt;
     data-device=&#039;Dummy1&#039; &lt;br /&gt;
     data-min=&amp;quot;0&amp;quot; &lt;br /&gt;
     data-max=&amp;quot;100&amp;quot; &lt;br /&gt;
     class=&amp;quot;horizontal&amp;quot; &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Retro-Schieberegler mit Skala und rechteckigem Riffelknopf===&lt;br /&gt;
Kombination aus Slider- und Scale-Widget und Modifikation des Buttons in fhem-tablet-ui-user.css&lt;br /&gt;
&lt;br /&gt;
[[File:retroslider.jpg]]&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;doublebox-h&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;right-narrow&amp;quot;&lt;br /&gt;
		 data-type=&amp;quot;scale&amp;quot;&lt;br /&gt;
		 data-orientation=&amp;quot;vertical&amp;quot;&lt;br /&gt;
		 data-device=&amp;quot;amp&amp;quot;&lt;br /&gt;
		 data-get=&amp;quot;volume&amp;quot; &lt;br /&gt;
		 data-set=&amp;quot;volume&amp;quot;&lt;br /&gt;
		 data-height=&amp;quot;155&amp;quot;&lt;br /&gt;
		 data-width=&amp;quot;45&amp;quot;&lt;br /&gt;
		 data-value-interval=&amp;quot;50&amp;quot;&lt;br /&gt;
		 data-tick=&amp;quot;5&amp;quot;&lt;br /&gt;
		 data-extra-tick=&amp;quot;25&amp;quot;&lt;br /&gt;
		 data-font-size=&amp;quot;16&amp;quot;&lt;br /&gt;
		 data-colors=&#039;[&amp;quot;green&amp;quot;,&amp;quot;#FFBF00&amp;quot;,&amp;quot;#EF0002&amp;quot;]&#039;&lt;br /&gt;
		 data-limits=&#039;[&amp;quot;1&amp;quot;,&amp;quot;50&amp;quot;,&amp;quot;75&amp;quot;]&#039;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class = &amp;quot;value left-narrow&amp;quot;&lt;br /&gt;
		 data-type=&amp;quot;slider&amp;quot;&lt;br /&gt;
		 data-height=&amp;quot;150&amp;quot;&lt;br /&gt;
		 data-device=&amp;quot;amp&amp;quot;&lt;br /&gt;
		 data-get=&amp;quot;volume&amp;quot; &lt;br /&gt;
		 data-set=&amp;quot;volume&amp;quot;&lt;br /&gt;
		 data-color=&amp;quot;grey&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Eintrag in fhem-tablet-ui-user.css:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
.vertical .range-handle {&lt;br /&gt;
    left: -17px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.range-handle {&lt;br /&gt;
  width: 35px !important;&lt;br /&gt;
  height: 15px !important;&lt;br /&gt;
  border-radius: 3px !important;&lt;br /&gt;
  background-color: black;&lt;br /&gt;
  background-image: linear-gradient(180deg, white,black);&lt;br /&gt;
  background-size: 2px 2px;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Darstellungsmöglichkeit bei Nutzung des Schiebereglers für Rolladen-/Jalousien-/Markisensteuerung===&lt;br /&gt;
&lt;br /&gt;
[[File:blindsslider.png|200px]] [[File:DarstellungSliderRolladenBunt.png|240px]]&lt;br /&gt;
&lt;br /&gt;
Folgende Anpasssungen sind zu machen:&lt;br /&gt;
&lt;br /&gt;
im file fhem-tablet-ui-user.css (falls das noch nicht verwendet wird, muss es natürlich noch in das html file, das aufgerufen wird, eingetragen werden) folgende Zeilen einfügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* Definition for styles to be used for extension of slider widget for display of blinds, awnings etc. */&lt;br /&gt;
/* normal lines */&lt;br /&gt;
&lt;br /&gt;
.blind&amp;gt; .vertical .range-bar {&lt;br /&gt;
    width: 70%;&lt;br /&gt;
	border-radius: 2px;&lt;br /&gt;
	background-image: url(../blinds.jpg);&lt;br /&gt;
	background-position: center bottom;&lt;br /&gt;
	background-blend-mode: multiply;&lt;br /&gt;
	background-size: cover;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.blind&amp;gt; .vertical .range-quantity {&lt;br /&gt;
	border-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.blind&amp;gt; .vertical .range-handle {&lt;br /&gt;
	margin-left: 52% !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.blindview&amp;gt; .vertical .range-quantity {&lt;br /&gt;
	border-radius: 2px;&lt;br /&gt;
	background-image: url(../windowContentSimpleGrey.png);&lt;br /&gt;
	background-repeat: no-repeat;&lt;br /&gt;
	background-position: center bottom;&lt;br /&gt;
	background-size: cover;&lt;br /&gt;
	background-blend-mode: difference;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.awning&amp;gt; .vertical .range-bar {&lt;br /&gt;
    width: 70%;&lt;br /&gt;
	border-radius: 2px;&lt;br /&gt;
	background-image: url(../awningContentSimpleGrey.png);&lt;br /&gt;
	background-position: center bottom;&lt;br /&gt;
	background-blend-mode: difference;&lt;br /&gt;
	background-size: 100% 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.awning&amp;gt; .vertical .range-quantity {&lt;br /&gt;
	border-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.awning&amp;gt; .vertical .range-handle {&lt;br /&gt;
	margin-left: 52% !important;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die nachfolgenden Grafiken müssen in das Verzeichnis oberhalb des css directories kopiert werden (zumindest die, die im css File auch referenziert werden. Es gibt eine Graustufenvariante und eine farbige, entsprechend müssen die Filenamen im css file ausgetauscht werden also jeweils das &amp;quot;Grey&amp;quot; im Filenamen weglassen wenn man bunte Fenster will. Wer will, kann sich natürlich auch eigene Fenster und Rolladenbildchen basteln, ein Beispiel für den &amp;quot;Fensterausblick&amp;quot; ist auch noch enthalten).&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:windowContentSimple.png&lt;br /&gt;
File:awningContentSimple.png&lt;br /&gt;
File:windowContentSimpleGrey.png&lt;br /&gt;
File:awningContentSimpleGrey.png&lt;br /&gt;
File:windowContentGrey.jpg&lt;br /&gt;
File:windowContent.jpg&lt;br /&gt;
File:blinds.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
im &amp;quot;class&amp;quot; parameter des Sliders müssen folgende Klassen hinzugefügt werden:&lt;br /&gt;
blind (dadurch wird die Darstellung eines verschiebbaren Rollladens bewirkt)&lt;br /&gt;
awning (dadurch wird die Darstellung einer Markise bewirkt)&lt;br /&gt;
blindview (dadurch wird im Hintergrund ein Fenster symbolisiert)&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für die Definition eines Sliders mit Rolladendarstellung und Fenster als Hintergrundbild wäre:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;slider&amp;quot;&lt;br /&gt;
    data-handle-diameter=&amp;quot;15&amp;quot;&lt;br /&gt;
    data-device=&amp;quot;&amp;quot;&lt;br /&gt;
    data-color=&amp;quot;#969696&amp;quot;&lt;br /&gt;
    data-height=&amp;quot;125&amp;quot;&lt;br /&gt;
    data-device=&amp;quot;dg_SZ_Rolladen&amp;quot;&lt;br /&gt;
    class=&amp;quot;blind blindview&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wird in der Klasse &amp;quot;awning&amp;quot; statt &amp;quot;blind&amp;quot; gesetzt, so wird eine Markisendarstellung erzeugt.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Tablet UI|Slider]]&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Slider&amp;diff=26141</id>
		<title>FTUI Widget Slider</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Slider&amp;diff=26141"/>
		<updated>2018-03-20T09:11:58Z</updated>

		<summary type="html">&lt;p&gt;Eki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das [[{{PAGENAME}}|Slider Widget]] ist ein Widget für [[FHEM Tablet UI]] in Form eines Schiebereglers, mit dem ein beliebiger Wert zwischen zwei festgelegten Grenzwerten auswählen lässt. Es eignet sich zum Beispiel zum Einstellen der Lautstärke eines Audio-Gerätes oder der Helligkeit einer Lampe.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Slider_tabletUI.png&lt;br /&gt;
File:Slider_tabletUI2.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Steuer-Attribute==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-device&#039;&#039;&#039;||FHEM-Device, dessen Reading gesetzt werden soll (&amp;lt;command&amp;gt; &#039;&#039;&#039;&amp;lt;device&amp;gt;&#039;&#039;&#039; &amp;lt;reading&amp;gt; &amp;lt;value&amp;gt;)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-get&#039;&#039;&#039;||Reading, dessen Inhalt den aktuellen Wert wiedergibt||&#039;STATE&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-set&#039;&#039;&#039;||Reading, das gesetzt werden soll (&amp;lt;command&amp;gt; &amp;lt;device&amp;gt; &#039;&#039;&#039;&amp;lt;reading&amp;gt;&#039;&#039;&#039; &amp;lt;value&amp;gt;)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-on&#039;&#039;&#039;||Wert, bei dem der Slider zum maximalen Ausschlag springt||&#039;on&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-off&#039;&#039;&#039;||Wert, bei dem der Slider minimalen Ausschlag springt||&#039;off&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-part&#039;&#039;&#039;||Wählt bei Werten, die durch Leerzeichen getrennt sind, den Teil aus, der angezeigt werden soll. Der Teil kann auch mit RegEx ermittelt werden.||&#039;-1&#039;: alles Anzeigen||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-set-value&#039;&#039;&#039;||Format, wie der eingestellte Wert an FHEM übergeben werden soll||&#039;$v&#039;: Nur den Wert||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-cmd&#039;&#039;&#039;||Befehl, der gesendet werden soll (&#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; &amp;lt;device&amp;gt; &amp;lt;reading&amp;gt; &amp;lt;value&amp;gt;) (z.B. setstate, set, setreading, trigger)||set||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-min&#039;&#039;&#039;||Minimaler Wert, der eingestellt werden kann||0||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-max&#039;&#039;&#039;||Maximaler Wert, der eingestellt werden kann||100||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-step&#039;&#039;&#039;||Schrittweite beim Schieben des Sliders||1||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-width&#039;&#039;&#039;||Breite des Sliders, wenn er horizontal ausgerichtet ist||normal &#039;120px&#039;, mini &#039;60px&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-height&#039;&#039;&#039;||Höhe des Sliders, wenn er vertikal ausgerichtet ist||normal &#039;120px&#039;, mini &#039;60px&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-color&#039;&#039;&#039;||Farbe des Sliders für den Bereich 0...&amp;lt;eingestellter Wert&amp;gt;||&#039;#aa6900&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-background-color&#039;&#039;&#039;||Farbe des Sliders für den Bereich &amp;lt;eingestellter Wert&amp;gt;...&amp;lt;Maximaler Wert&amp;gt;||&#039;#404040&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-handle-diameter&#039;&#039;&#039;||Größe des Griffs||&#039;20&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-touch-diameter&#039;&#039;&#039;||Größe des Griffs, wenn er bewegt wird||wie &#039;&#039;&#039;data-handle-diameter&#039;&#039;&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-timer-state&#039;&#039;&#039;||Statusvariable mit der eine timergesteuerte Bewegung des Sliders ausgelöst werden kann||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-timer-state-on&#039;&#039;&#039;||Zustand der Statusvariablen der die Bewegung startet||&#039;on&#039;||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;data-timer-state-off&#039;&#039;&#039;||Zustand der Statusvariablen der die Bewegung stoppt||&#039;off&#039;||!on (alles was nicht on ist stoppt den Timer)&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;data-timer-step&#039;&#039;&#039;||Erhöhung des Wertes pro Timer-Intervall||1||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;data-timer-interval&#039;&#039;&#039;||Timer-Intervall in Millisekunden||1000||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==CSS-Klassen==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Klasse&lt;br /&gt;
!Beschreibung&lt;br /&gt;
{{FTUI Klasse|mini}}{{FTUI Klasse|big}}{{FTUI Klasse|bigger}}{{FTUI Klasse|large}}{{FTUI Klasse|horizontal}}{{FTUI Klasse|right}}{{FTUI Klasse|negated}}{{FTUI Klasse|value}}{{FTUI Klasse|FS20}}{{FTUI Klasse|tap}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Der Slider unterstützt &#039;&#039;tap to target&#039;&#039;, also das Springen zum gewünschten Wert durch einfaches Antippen, nur, wenn die CSS-Klasse &#039;&#039;&#039;tap&#039;&#039;&#039; verwendet wird.&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
===Vertikaler Schieberegler===&lt;br /&gt;
Einfacher Schieberegler mit dem Einstellbereich 10...90&lt;br /&gt;
&lt;br /&gt;
[[File:Slider_tabletUI.png]]&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;slider&amp;quot; &lt;br /&gt;
     data-device=&#039;Dummy1&#039; &lt;br /&gt;
     data-min=&amp;quot;10&amp;quot; &lt;br /&gt;
     data-max=&amp;quot;90&amp;quot; &lt;br /&gt;
     class=&amp;quot;cell&amp;quot; &amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;label&amp;quot; class=&amp;quot;cell&amp;quot;&amp;gt;Light1&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Horizontaler Schieberegler===&lt;br /&gt;
Einfacher Schieberegler mit dem Einstellbereich 0...100&lt;br /&gt;
&lt;br /&gt;
[[File:Slider_tabletUI2.jpg]]&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;slider&amp;quot;&lt;br /&gt;
     data-device=&#039;Dummy1&#039; &lt;br /&gt;
     data-min=&amp;quot;0&amp;quot; &lt;br /&gt;
     data-max=&amp;quot;100&amp;quot; &lt;br /&gt;
     class=&amp;quot;horizontal&amp;quot; &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Retro-Schieberegler mit Skala und rechteckigem Riffelknopf===&lt;br /&gt;
Kombination aus Slider- und Scale-Widget und Modifikation des Buttons in fhem-tablet-ui-user.css&lt;br /&gt;
&lt;br /&gt;
[[File:retroslider.jpg]]&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;doublebox-h&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;right-narrow&amp;quot;&lt;br /&gt;
		 data-type=&amp;quot;scale&amp;quot;&lt;br /&gt;
		 data-orientation=&amp;quot;vertical&amp;quot;&lt;br /&gt;
		 data-device=&amp;quot;amp&amp;quot;&lt;br /&gt;
		 data-get=&amp;quot;volume&amp;quot; &lt;br /&gt;
		 data-set=&amp;quot;volume&amp;quot;&lt;br /&gt;
		 data-height=&amp;quot;155&amp;quot;&lt;br /&gt;
		 data-width=&amp;quot;45&amp;quot;&lt;br /&gt;
		 data-value-interval=&amp;quot;50&amp;quot;&lt;br /&gt;
		 data-tick=&amp;quot;5&amp;quot;&lt;br /&gt;
		 data-extra-tick=&amp;quot;25&amp;quot;&lt;br /&gt;
		 data-font-size=&amp;quot;16&amp;quot;&lt;br /&gt;
		 data-colors=&#039;[&amp;quot;green&amp;quot;,&amp;quot;#FFBF00&amp;quot;,&amp;quot;#EF0002&amp;quot;]&#039;&lt;br /&gt;
		 data-limits=&#039;[&amp;quot;1&amp;quot;,&amp;quot;50&amp;quot;,&amp;quot;75&amp;quot;]&#039;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class = &amp;quot;value left-narrow&amp;quot;&lt;br /&gt;
		 data-type=&amp;quot;slider&amp;quot;&lt;br /&gt;
		 data-height=&amp;quot;150&amp;quot;&lt;br /&gt;
		 data-device=&amp;quot;amp&amp;quot;&lt;br /&gt;
		 data-get=&amp;quot;volume&amp;quot; &lt;br /&gt;
		 data-set=&amp;quot;volume&amp;quot;&lt;br /&gt;
		 data-color=&amp;quot;grey&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Eintrag in fhem-tablet-ui-user.css:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
.vertical .range-handle {&lt;br /&gt;
    left: -17px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.range-handle {&lt;br /&gt;
  width: 35px !important;&lt;br /&gt;
  height: 15px !important;&lt;br /&gt;
  border-radius: 3px !important;&lt;br /&gt;
  background-color: black;&lt;br /&gt;
  background-image: linear-gradient(180deg, white,black);&lt;br /&gt;
  background-size: 2px 2px;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Darstellungsmöglichkeit bei Nutzung des Schiebereglers für Rolladen-/Jalousien-/Markisensteuerung===&lt;br /&gt;
&lt;br /&gt;
[[File:blindsslider.png|200px]] [[File:DarstellungSliderRolladenBunt.png|240px]]&lt;br /&gt;
&lt;br /&gt;
Folgende Anpasssungen sind zu machen:&lt;br /&gt;
&lt;br /&gt;
im file fhem-tablet-ui-user.css (falls das noch nicht verwendet wird, muss es natürlich noch in das html file, das aufgerufen wird eingetragen werden) folgende Zeilen einfügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* Definition for styles to be used for extension of slider widget for display of blinds, awnings etc. */&lt;br /&gt;
/* normal lines */&lt;br /&gt;
&lt;br /&gt;
.blind&amp;gt; .vertical .range-bar {&lt;br /&gt;
    width: 70%;&lt;br /&gt;
	border-radius: 2px;&lt;br /&gt;
	background-image: url(../blinds.jpg);&lt;br /&gt;
	background-position: center bottom;&lt;br /&gt;
	background-blend-mode: multiply;&lt;br /&gt;
	background-size: cover;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.blind&amp;gt; .vertical .range-quantity {&lt;br /&gt;
	border-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.blind&amp;gt; .vertical .range-handle {&lt;br /&gt;
	margin-left: 52% !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.blindview&amp;gt; .vertical .range-quantity {&lt;br /&gt;
	border-radius: 2px;&lt;br /&gt;
	background-image: url(../windowContentSimpleGrey.png);&lt;br /&gt;
	background-repeat: no-repeat;&lt;br /&gt;
	background-position: center bottom;&lt;br /&gt;
	background-size: cover;&lt;br /&gt;
	background-blend-mode: difference;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.awning&amp;gt; .vertical .range-bar {&lt;br /&gt;
    width: 70%;&lt;br /&gt;
	border-radius: 2px;&lt;br /&gt;
	background-image: url(../awningContentSimpleGrey.png);&lt;br /&gt;
	background-position: center bottom;&lt;br /&gt;
	background-blend-mode: difference;&lt;br /&gt;
	background-size: 100% 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.awning&amp;gt; .vertical .range-quantity {&lt;br /&gt;
	border-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.awning&amp;gt; .vertical .range-handle {&lt;br /&gt;
	margin-left: 52% !important;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die nachfolgenden Grafiken müssen in das Verzeichnis oberhalb des css directories kopiert werden (zumindest die, die im css File auch referenziert werden. Es gibt eine Graustufenvariante und eine farbige, entsprechend müssen die Filenamen im css file ausgetauscht werden also jeweils das &amp;quot;Grey&amp;quot; im Filenamen weglassen wenn man bunte Fenster will. Wer will, kann sich natürlich auch eigene Fenster und Rolladenbildchen basteln, ein Beispiel für den &amp;quot;Fensterausblick&amp;quot; ist auch noch enthalten).&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:windowContentSimple.png&lt;br /&gt;
File:awningContentSimple.png&lt;br /&gt;
File:windowContentSimpleGrey.png&lt;br /&gt;
File:awningContentSimpleGrey.png&lt;br /&gt;
File:windowContentGrey.jpg&lt;br /&gt;
File:windowContent.jpg&lt;br /&gt;
File:blinds.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
im &amp;quot;class&amp;quot; parameter des Sliders müssen folgende Klassen hinzugefügt werden:&lt;br /&gt;
blind (dadurch wird die Darstellung eines verschiebbaren Rollladens bewirkt)&lt;br /&gt;
awning (dadurch wird die Darstellung einer Markise bewirkt)&lt;br /&gt;
blindview (dadurch wird im Hintergrund ein Fenster symbolisiert)&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für die Definition eines Sliders mit Rolladendarstellung und Fenster als Hintergrundbild wäre:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;slider&amp;quot;&lt;br /&gt;
    data-handle-diameter=&amp;quot;15&amp;quot;&lt;br /&gt;
    data-device=&amp;quot;&amp;quot;&lt;br /&gt;
    data-color=&amp;quot;#969696&amp;quot;&lt;br /&gt;
    data-height=&amp;quot;125&amp;quot;&lt;br /&gt;
    data-device=&amp;quot;dg_SZ_Rolladen&amp;quot;&lt;br /&gt;
    class=&amp;quot;blind blindview&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wird in der Klasse &amp;quot;awning&amp;quot; statt &amp;quot;blind&amp;quot; gesetzt, so wird eine Markisendarstellung erzeugt.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Tablet UI|Slider]]&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Slider&amp;diff=26140</id>
		<title>FTUI Widget Slider</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Slider&amp;diff=26140"/>
		<updated>2018-03-20T09:08:03Z</updated>

		<summary type="html">&lt;p&gt;Eki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das [[{{PAGENAME}}|Slider Widget]] ist ein Widget für [[FHEM Tablet UI]] in Form eines Schiebereglers, mit dem ein beliebiger Wert zwischen zwei festgelegten Grenzwerten auswählen lässt. Es eignet sich zum Beispiel zum Einstellen der Lautstärke eines Audio-Gerätes oder der Helligkeit einer Lampe.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Slider_tabletUI.png&lt;br /&gt;
File:Slider_tabletUI2.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Steuer-Attribute==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-device&#039;&#039;&#039;||FHEM-Device, dessen Reading gesetzt werden soll (&amp;lt;command&amp;gt; &#039;&#039;&#039;&amp;lt;device&amp;gt;&#039;&#039;&#039; &amp;lt;reading&amp;gt; &amp;lt;value&amp;gt;)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-get&#039;&#039;&#039;||Reading, dessen Inhalt den aktuellen Wert wiedergibt||&#039;STATE&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-set&#039;&#039;&#039;||Reading, das gesetzt werden soll (&amp;lt;command&amp;gt; &amp;lt;device&amp;gt; &#039;&#039;&#039;&amp;lt;reading&amp;gt;&#039;&#039;&#039; &amp;lt;value&amp;gt;)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-on&#039;&#039;&#039;||Wert, bei dem der Slider zum maximalen Ausschlag springt||&#039;on&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-off&#039;&#039;&#039;||Wert, bei dem der Slider minimalen Ausschlag springt||&#039;off&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-part&#039;&#039;&#039;||Wählt bei Werten, die durch Leerzeichen getrennt sind, den Teil aus, der angezeigt werden soll. Der Teil kann auch mit RegEx ermittelt werden.||&#039;-1&#039;: alles Anzeigen||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-set-value&#039;&#039;&#039;||Format, wie der eingestellte Wert an FHEM übergeben werden soll||&#039;$v&#039;: Nur den Wert||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-cmd&#039;&#039;&#039;||Befehl, der gesendet werden soll (&#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; &amp;lt;device&amp;gt; &amp;lt;reading&amp;gt; &amp;lt;value&amp;gt;) (z.B. setstate, set, setreading, trigger)||set||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-min&#039;&#039;&#039;||Minimaler Wert, der eingestellt werden kann||0||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-max&#039;&#039;&#039;||Maximaler Wert, der eingestellt werden kann||100||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-step&#039;&#039;&#039;||Schrittweite beim Schieben des Sliders||1||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-width&#039;&#039;&#039;||Breite des Sliders, wenn er horizontal ausgerichtet ist||normal &#039;120px&#039;, mini &#039;60px&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-height&#039;&#039;&#039;||Höhe des Sliders, wenn er vertikal ausgerichtet ist||normal &#039;120px&#039;, mini &#039;60px&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-color&#039;&#039;&#039;||Farbe des Sliders für den Bereich 0...&amp;lt;eingestellter Wert&amp;gt;||&#039;#aa6900&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-background-color&#039;&#039;&#039;||Farbe des Sliders für den Bereich &amp;lt;eingestellter Wert&amp;gt;...&amp;lt;Maximaler Wert&amp;gt;||&#039;#404040&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-handle-diameter&#039;&#039;&#039;||Größe des Griffs||&#039;20&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-touch-diameter&#039;&#039;&#039;||Größe des Griffs, wenn er bewegt wird||wie &#039;&#039;&#039;data-handle-diameter&#039;&#039;&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-timer-state&#039;&#039;&#039;||Statusvariable mit der eine timergesteuerte Bewegung des Sliders ausgelöst werden kann||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-timer-state-on&#039;&#039;&#039;||Zustand der Statusvariablen der die Bewegung startet||&#039;on&#039;||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;data-timer-state-off&#039;&#039;&#039;||Zustand der Statusvariablen der die Bewegung stoppt||&#039;off&#039;||!on (alles was nicht on ist stoppt den Timer)&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;data-timer-step&#039;&#039;&#039;||Erhöhung des Wertes pro Timer-Intervall||1||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;data-timer-interval&#039;&#039;&#039;||Timer-Intervall in Millisekunden||1000||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==CSS-Klassen==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Klasse&lt;br /&gt;
!Beschreibung&lt;br /&gt;
{{FTUI Klasse|mini}}{{FTUI Klasse|big}}{{FTUI Klasse|bigger}}{{FTUI Klasse|large}}{{FTUI Klasse|horizontal}}{{FTUI Klasse|right}}{{FTUI Klasse|negated}}{{FTUI Klasse|value}}{{FTUI Klasse|FS20}}{{FTUI Klasse|tap}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Der Slider unterstützt &#039;&#039;tap to target&#039;&#039;, also das Springen zum gewünschten Wert durch einfaches Antippen, nur, wenn die CSS-Klasse &#039;&#039;&#039;tap&#039;&#039;&#039; verwendet wird.&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
===Vertikaler Schieberegler===&lt;br /&gt;
Einfacher Schieberegler mit dem Einstellbereich 10...90&lt;br /&gt;
&lt;br /&gt;
[[File:Slider_tabletUI.png]]&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;slider&amp;quot; &lt;br /&gt;
     data-device=&#039;Dummy1&#039; &lt;br /&gt;
     data-min=&amp;quot;10&amp;quot; &lt;br /&gt;
     data-max=&amp;quot;90&amp;quot; &lt;br /&gt;
     class=&amp;quot;cell&amp;quot; &amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;label&amp;quot; class=&amp;quot;cell&amp;quot;&amp;gt;Light1&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Horizontaler Schieberegler===&lt;br /&gt;
Einfacher Schieberegler mit dem Einstellbereich 0...100&lt;br /&gt;
&lt;br /&gt;
[[File:Slider_tabletUI2.jpg]]&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;slider&amp;quot;&lt;br /&gt;
     data-device=&#039;Dummy1&#039; &lt;br /&gt;
     data-min=&amp;quot;0&amp;quot; &lt;br /&gt;
     data-max=&amp;quot;100&amp;quot; &lt;br /&gt;
     class=&amp;quot;horizontal&amp;quot; &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Retro-Schieberegler mit Skala und rechteckigem Riffelknopf===&lt;br /&gt;
Kombination aus Slider- und Scale-Widget und Modifikation des Buttons in fhem-tablet-ui-user.css&lt;br /&gt;
&lt;br /&gt;
[[File:retroslider.jpg]]&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;doublebox-h&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;right-narrow&amp;quot;&lt;br /&gt;
		 data-type=&amp;quot;scale&amp;quot;&lt;br /&gt;
		 data-orientation=&amp;quot;vertical&amp;quot;&lt;br /&gt;
		 data-device=&amp;quot;amp&amp;quot;&lt;br /&gt;
		 data-get=&amp;quot;volume&amp;quot; &lt;br /&gt;
		 data-set=&amp;quot;volume&amp;quot;&lt;br /&gt;
		 data-height=&amp;quot;155&amp;quot;&lt;br /&gt;
		 data-width=&amp;quot;45&amp;quot;&lt;br /&gt;
		 data-value-interval=&amp;quot;50&amp;quot;&lt;br /&gt;
		 data-tick=&amp;quot;5&amp;quot;&lt;br /&gt;
		 data-extra-tick=&amp;quot;25&amp;quot;&lt;br /&gt;
		 data-font-size=&amp;quot;16&amp;quot;&lt;br /&gt;
		 data-colors=&#039;[&amp;quot;green&amp;quot;,&amp;quot;#FFBF00&amp;quot;,&amp;quot;#EF0002&amp;quot;]&#039;&lt;br /&gt;
		 data-limits=&#039;[&amp;quot;1&amp;quot;,&amp;quot;50&amp;quot;,&amp;quot;75&amp;quot;]&#039;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class = &amp;quot;value left-narrow&amp;quot;&lt;br /&gt;
		 data-type=&amp;quot;slider&amp;quot;&lt;br /&gt;
		 data-height=&amp;quot;150&amp;quot;&lt;br /&gt;
		 data-device=&amp;quot;amp&amp;quot;&lt;br /&gt;
		 data-get=&amp;quot;volume&amp;quot; &lt;br /&gt;
		 data-set=&amp;quot;volume&amp;quot;&lt;br /&gt;
		 data-color=&amp;quot;grey&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Eintrag in fhem-tablet-ui-user.css:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
.vertical .range-handle {&lt;br /&gt;
    left: -17px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.range-handle {&lt;br /&gt;
  width: 35px !important;&lt;br /&gt;
  height: 15px !important;&lt;br /&gt;
  border-radius: 3px !important;&lt;br /&gt;
  background-color: black;&lt;br /&gt;
  background-image: linear-gradient(180deg, white,black);&lt;br /&gt;
  background-size: 2px 2px;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Darstellungsmöglichkeit bei Nutzung des Schiebereglers für Rolladen-/Jalousien-/Markisensteuerung===&lt;br /&gt;
&lt;br /&gt;
[[File:blindsslider.png|200x100px]][[File:DarstellungSliderRolladenBunt.png|200x100px]]&lt;br /&gt;
&lt;br /&gt;
Folgende Anpasssungen sind zu machen:&lt;br /&gt;
&lt;br /&gt;
im file fhem-tablet-ui-user.css (falls das noch nicht verwendet wird, muss es natürlich noch in das html file, das aufgerufen wird eingetragen werden) folgende Zeilen einfügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* Definition for styles to be used for extension of slider widget for display of blinds, awnings etc. */&lt;br /&gt;
/* normal lines */&lt;br /&gt;
&lt;br /&gt;
.blind&amp;gt; .vertical .range-bar {&lt;br /&gt;
    width: 70%;&lt;br /&gt;
	border-radius: 2px;&lt;br /&gt;
	background-image: url(../blinds.jpg);&lt;br /&gt;
	background-position: center bottom;&lt;br /&gt;
	background-blend-mode: multiply;&lt;br /&gt;
	background-size: cover;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.blind&amp;gt; .vertical .range-quantity {&lt;br /&gt;
	border-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.blind&amp;gt; .vertical .range-handle {&lt;br /&gt;
	margin-left: 52% !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.blindview&amp;gt; .vertical .range-quantity {&lt;br /&gt;
	border-radius: 2px;&lt;br /&gt;
	background-image: url(../windowContentSimpleGrey.png);&lt;br /&gt;
	background-repeat: no-repeat;&lt;br /&gt;
	background-position: center bottom;&lt;br /&gt;
	background-size: cover;&lt;br /&gt;
	background-blend-mode: difference;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.awning&amp;gt; .vertical .range-bar {&lt;br /&gt;
    width: 70%;&lt;br /&gt;
	border-radius: 2px;&lt;br /&gt;
	background-image: url(../awningContentSimpleGrey.png);&lt;br /&gt;
	background-position: center bottom;&lt;br /&gt;
	background-blend-mode: difference;&lt;br /&gt;
	background-size: 100% 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.awning&amp;gt; .vertical .range-quantity {&lt;br /&gt;
	border-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.awning&amp;gt; .vertical .range-handle {&lt;br /&gt;
	margin-left: 52% !important;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die nachfolgenden Grafiken müssen in das Verzeichnis oberhalb des css directories kopiert werden (zumindest die, die im css File auch referenziert werden. Es gibt eine Graustufenvariante und eine farbige, entsprechend müssen die Filenamen im css file ausgetauscht werden also jeweils das &amp;quot;Grey&amp;quot; im Filenamen weglassen wenn man bunte Fenster will. Wer will, kann sich natürlich auch eigene Fenster und Rolladenbildchen basteln, ein Beispiel für den &amp;quot;Fensterausblick&amp;quot; ist auch noch enthalten).&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:windowContentSimple.png&lt;br /&gt;
File:awningContentSimple.png&lt;br /&gt;
File:windowContentSimpleGrey.png&lt;br /&gt;
File:awningContentSimpleGrey.png&lt;br /&gt;
File:windowContentGrey.jpg&lt;br /&gt;
File:windowContent.jpg&lt;br /&gt;
File:blinds.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
im &amp;quot;class&amp;quot; parameter des Sliders müssen folgende Klassen hinzugefügt werden:&lt;br /&gt;
blind (dadurch wird die Darstellung eines verschiebbaren Rollladens bewirkt)&lt;br /&gt;
awning (dadurch wird die Darstellung einer Markise bewirkt)&lt;br /&gt;
blindview (dadurch wird im Hintergrund ein Fenster symbolisiert)&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für die Definition eines Sliders mit Rolladendarstellung und Fenster als Hintergrundbild wäre:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;slider&amp;quot;&lt;br /&gt;
    data-handle-diameter=&amp;quot;15&amp;quot;&lt;br /&gt;
    data-device=&amp;quot;&amp;quot;&lt;br /&gt;
    data-color=&amp;quot;#969696&amp;quot;&lt;br /&gt;
    data-height=&amp;quot;125&amp;quot;&lt;br /&gt;
    data-device=&amp;quot;dg_SZ_Rolladen&amp;quot;&lt;br /&gt;
    class=&amp;quot;blind blindview&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wird in der Klasse &amp;quot;awning&amp;quot; statt &amp;quot;blind&amp;quot; gesetzt, so wird eine Markisendarstellung erzeugt.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Tablet UI|Slider]]&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Slider&amp;diff=26138</id>
		<title>FTUI Widget Slider</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Slider&amp;diff=26138"/>
		<updated>2018-03-20T09:03:13Z</updated>

		<summary type="html">&lt;p&gt;Eki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das [[{{PAGENAME}}|Slider Widget]] ist ein Widget für [[FHEM Tablet UI]] in Form eines Schiebereglers, mit dem ein beliebiger Wert zwischen zwei festgelegten Grenzwerten auswählen lässt. Es eignet sich zum Beispiel zum Einstellen der Lautstärke eines Audio-Gerätes oder der Helligkeit einer Lampe.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Slider_tabletUI.png&lt;br /&gt;
File:Slider_tabletUI2.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Steuer-Attribute==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-device&#039;&#039;&#039;||FHEM-Device, dessen Reading gesetzt werden soll (&amp;lt;command&amp;gt; &#039;&#039;&#039;&amp;lt;device&amp;gt;&#039;&#039;&#039; &amp;lt;reading&amp;gt; &amp;lt;value&amp;gt;)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-get&#039;&#039;&#039;||Reading, dessen Inhalt den aktuellen Wert wiedergibt||&#039;STATE&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-set&#039;&#039;&#039;||Reading, das gesetzt werden soll (&amp;lt;command&amp;gt; &amp;lt;device&amp;gt; &#039;&#039;&#039;&amp;lt;reading&amp;gt;&#039;&#039;&#039; &amp;lt;value&amp;gt;)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-on&#039;&#039;&#039;||Wert, bei dem der Slider zum maximalen Ausschlag springt||&#039;on&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-off&#039;&#039;&#039;||Wert, bei dem der Slider minimalen Ausschlag springt||&#039;off&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-part&#039;&#039;&#039;||Wählt bei Werten, die durch Leerzeichen getrennt sind, den Teil aus, der angezeigt werden soll. Der Teil kann auch mit RegEx ermittelt werden.||&#039;-1&#039;: alles Anzeigen||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-set-value&#039;&#039;&#039;||Format, wie der eingestellte Wert an FHEM übergeben werden soll||&#039;$v&#039;: Nur den Wert||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-cmd&#039;&#039;&#039;||Befehl, der gesendet werden soll (&#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; &amp;lt;device&amp;gt; &amp;lt;reading&amp;gt; &amp;lt;value&amp;gt;) (z.B. setstate, set, setreading, trigger)||set||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-min&#039;&#039;&#039;||Minimaler Wert, der eingestellt werden kann||0||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-max&#039;&#039;&#039;||Maximaler Wert, der eingestellt werden kann||100||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-step&#039;&#039;&#039;||Schrittweite beim Schieben des Sliders||1||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-width&#039;&#039;&#039;||Breite des Sliders, wenn er horizontal ausgerichtet ist||normal &#039;120px&#039;, mini &#039;60px&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-height&#039;&#039;&#039;||Höhe des Sliders, wenn er vertikal ausgerichtet ist||normal &#039;120px&#039;, mini &#039;60px&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-color&#039;&#039;&#039;||Farbe des Sliders für den Bereich 0...&amp;lt;eingestellter Wert&amp;gt;||&#039;#aa6900&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-background-color&#039;&#039;&#039;||Farbe des Sliders für den Bereich &amp;lt;eingestellter Wert&amp;gt;...&amp;lt;Maximaler Wert&amp;gt;||&#039;#404040&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-handle-diameter&#039;&#039;&#039;||Größe des Griffs||&#039;20&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-touch-diameter&#039;&#039;&#039;||Größe des Griffs, wenn er bewegt wird||wie &#039;&#039;&#039;data-handle-diameter&#039;&#039;&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-timer-state&#039;&#039;&#039;||Statusvariable mit der eine timergesteuerte Bewegung des Sliders ausgelöst werden kann||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-timer-state-on&#039;&#039;&#039;||Zustand der Statusvariablen der die Bewegung startet||&#039;on&#039;||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;data-timer-state-off&#039;&#039;&#039;||Zustand der Statusvariablen der die Bewegung stoppt||&#039;off&#039;||!on (alles was nicht on ist stoppt den Timer)&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;data-timer-step&#039;&#039;&#039;||Erhöhung des Wertes pro Timer-Intervall||1||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;data-timer-interval&#039;&#039;&#039;||Timer-Intervall in Millisekunden||1000||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==CSS-Klassen==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Klasse&lt;br /&gt;
!Beschreibung&lt;br /&gt;
{{FTUI Klasse|mini}}{{FTUI Klasse|big}}{{FTUI Klasse|bigger}}{{FTUI Klasse|large}}{{FTUI Klasse|horizontal}}{{FTUI Klasse|right}}{{FTUI Klasse|negated}}{{FTUI Klasse|value}}{{FTUI Klasse|FS20}}{{FTUI Klasse|tap}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Der Slider unterstützt &#039;&#039;tap to target&#039;&#039;, also das Springen zum gewünschten Wert durch einfaches Antippen, nur, wenn die CSS-Klasse &#039;&#039;&#039;tap&#039;&#039;&#039; verwendet wird.&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
===Vertikaler Schieberegler===&lt;br /&gt;
Einfacher Schieberegler mit dem Einstellbereich 10...90&lt;br /&gt;
&lt;br /&gt;
[[File:Slider_tabletUI.png]]&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;slider&amp;quot; &lt;br /&gt;
     data-device=&#039;Dummy1&#039; &lt;br /&gt;
     data-min=&amp;quot;10&amp;quot; &lt;br /&gt;
     data-max=&amp;quot;90&amp;quot; &lt;br /&gt;
     class=&amp;quot;cell&amp;quot; &amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;label&amp;quot; class=&amp;quot;cell&amp;quot;&amp;gt;Light1&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Horizontaler Schieberegler===&lt;br /&gt;
Einfacher Schieberegler mit dem Einstellbereich 0...100&lt;br /&gt;
&lt;br /&gt;
[[File:Slider_tabletUI2.jpg]]&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;slider&amp;quot;&lt;br /&gt;
     data-device=&#039;Dummy1&#039; &lt;br /&gt;
     data-min=&amp;quot;0&amp;quot; &lt;br /&gt;
     data-max=&amp;quot;100&amp;quot; &lt;br /&gt;
     class=&amp;quot;horizontal&amp;quot; &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Retro-Schieberegler mit Skala und rechteckigem Riffelknopf===&lt;br /&gt;
Kombination aus Slider- und Scale-Widget und Modifikation des Buttons in fhem-tablet-ui-user.css&lt;br /&gt;
&lt;br /&gt;
[[File:retroslider.jpg]]&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;doublebox-h&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;right-narrow&amp;quot;&lt;br /&gt;
		 data-type=&amp;quot;scale&amp;quot;&lt;br /&gt;
		 data-orientation=&amp;quot;vertical&amp;quot;&lt;br /&gt;
		 data-device=&amp;quot;amp&amp;quot;&lt;br /&gt;
		 data-get=&amp;quot;volume&amp;quot; &lt;br /&gt;
		 data-set=&amp;quot;volume&amp;quot;&lt;br /&gt;
		 data-height=&amp;quot;155&amp;quot;&lt;br /&gt;
		 data-width=&amp;quot;45&amp;quot;&lt;br /&gt;
		 data-value-interval=&amp;quot;50&amp;quot;&lt;br /&gt;
		 data-tick=&amp;quot;5&amp;quot;&lt;br /&gt;
		 data-extra-tick=&amp;quot;25&amp;quot;&lt;br /&gt;
		 data-font-size=&amp;quot;16&amp;quot;&lt;br /&gt;
		 data-colors=&#039;[&amp;quot;green&amp;quot;,&amp;quot;#FFBF00&amp;quot;,&amp;quot;#EF0002&amp;quot;]&#039;&lt;br /&gt;
		 data-limits=&#039;[&amp;quot;1&amp;quot;,&amp;quot;50&amp;quot;,&amp;quot;75&amp;quot;]&#039;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class = &amp;quot;value left-narrow&amp;quot;&lt;br /&gt;
		 data-type=&amp;quot;slider&amp;quot;&lt;br /&gt;
		 data-height=&amp;quot;150&amp;quot;&lt;br /&gt;
		 data-device=&amp;quot;amp&amp;quot;&lt;br /&gt;
		 data-get=&amp;quot;volume&amp;quot; &lt;br /&gt;
		 data-set=&amp;quot;volume&amp;quot;&lt;br /&gt;
		 data-color=&amp;quot;grey&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Eintrag in fhem-tablet-ui-user.css:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
.vertical .range-handle {&lt;br /&gt;
    left: -17px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.range-handle {&lt;br /&gt;
  width: 35px !important;&lt;br /&gt;
  height: 15px !important;&lt;br /&gt;
  border-radius: 3px !important;&lt;br /&gt;
  background-color: black;&lt;br /&gt;
  background-image: linear-gradient(180deg, white,black);&lt;br /&gt;
  background-size: 2px 2px;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Darstellungsmöglichkeit bei Nutzung des Schiebereglers für Rolladen-/Jalousien-/Markisensteuerung===&lt;br /&gt;
&lt;br /&gt;
[[File:blindsslider.png]][[File:DarstellungSliderRolladenBunt.png]]&lt;br /&gt;
&lt;br /&gt;
Folgende Anpasssungen sind zu machen:&lt;br /&gt;
&lt;br /&gt;
im file fhem-tablet-ui-user.css (falls das noch nicht verwendet wird, muss es natürlich noch in das html file, das aufgerufen wird eingetragen werden) folgende Zeilen einfügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* Definition for styles to be used for extension of slider widget for display of blinds, awnings etc. */&lt;br /&gt;
/* normal lines */&lt;br /&gt;
&lt;br /&gt;
.blind&amp;gt; .vertical .range-bar {&lt;br /&gt;
    width: 70%;&lt;br /&gt;
	border-radius: 2px;&lt;br /&gt;
	background-image: url(../blinds.jpg);&lt;br /&gt;
	background-position: center bottom;&lt;br /&gt;
	background-blend-mode: multiply;&lt;br /&gt;
	background-size: cover;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.blind&amp;gt; .vertical .range-quantity {&lt;br /&gt;
	border-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.blind&amp;gt; .vertical .range-handle {&lt;br /&gt;
	margin-left: 52% !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.blindview&amp;gt; .vertical .range-quantity {&lt;br /&gt;
	border-radius: 2px;&lt;br /&gt;
	background-image: url(../windowContentSimpleGrey.png);&lt;br /&gt;
	background-repeat: no-repeat;&lt;br /&gt;
	background-position: center bottom;&lt;br /&gt;
	background-size: cover;&lt;br /&gt;
	background-blend-mode: difference;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.awning&amp;gt; .vertical .range-bar {&lt;br /&gt;
    width: 70%;&lt;br /&gt;
	border-radius: 2px;&lt;br /&gt;
	background-image: url(../awningContentSimpleGrey.png);&lt;br /&gt;
	background-position: center bottom;&lt;br /&gt;
	background-blend-mode: difference;&lt;br /&gt;
	background-size: 100% 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.awning&amp;gt; .vertical .range-quantity {&lt;br /&gt;
	border-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.awning&amp;gt; .vertical .range-handle {&lt;br /&gt;
	margin-left: 52% !important;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die nachfolgenden Grafiken müssen in das Verzeichnis oberhalb des css directories kopiert werden (zumindest die, die im css File auch referenziert werden. Es gibt eine Graustufenvariante und eine farbige, entsprechend müssen die Filenamen im css file ausgetauscht werden also jeweils das &amp;quot;Grey&amp;quot; im Filenamen weglassen wenn man bunte Fenster will. Wer will, kann sich natürlich auch eigene Fenster und Rolladenbildchen basteln, ein Beispiel für den &amp;quot;Fensterausblick&amp;quot; ist auch noch enthalten).&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:windowContentSimple.png&lt;br /&gt;
File:awningContentSimple.png&lt;br /&gt;
File:windowContentSimpleGrey.png&lt;br /&gt;
File:awningContentSimpleGrey.png&lt;br /&gt;
File:windowContentGrey.jpg&lt;br /&gt;
File:windowContent.jpg&lt;br /&gt;
File:blinds.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
im &amp;quot;class&amp;quot; parameter des Sliders müssen folgende Klassen hinzugefügt werden:&lt;br /&gt;
blind (dadurch wird die Darstellung eines verschiebbaren Rollladens bewirkt)&lt;br /&gt;
awning (dadurch wird die Darstellung einer Markise bewirkt)&lt;br /&gt;
blindview (dadurch wird im Hintergrund ein Fenster symbolisiert)&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für die Definition eines Sliders mit Rolladendarstellung und Fenster als Hintergrundbild wäre:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;slider&amp;quot;&lt;br /&gt;
    data-handle-diameter=&amp;quot;15&amp;quot;&lt;br /&gt;
    data-device=&amp;quot;&amp;quot;&lt;br /&gt;
    data-color=&amp;quot;#969696&amp;quot;&lt;br /&gt;
    data-height=&amp;quot;125&amp;quot;&lt;br /&gt;
    data-device=&amp;quot;dg_SZ_Rolladen&amp;quot;&lt;br /&gt;
    class=&amp;quot;blind blindview&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wird in der Klasse &amp;quot;awning&amp;quot; statt &amp;quot;blind&amp;quot; gesetzt, so wird eine Markisendarstellung erzeugt.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Tablet UI|Slider]]&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:DarstellungSliderRolladenBunt.png&amp;diff=26137</id>
		<title>Datei:DarstellungSliderRolladenBunt.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:DarstellungSliderRolladenBunt.png&amp;diff=26137"/>
		<updated>2018-03-20T09:02:37Z</updated>

		<summary type="html">&lt;p&gt;Eki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Slider&amp;diff=26136</id>
		<title>FTUI Widget Slider</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FTUI_Widget_Slider&amp;diff=26136"/>
		<updated>2018-03-20T08:53:25Z</updated>

		<summary type="html">&lt;p&gt;Eki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das [[{{PAGENAME}}|Slider Widget]] ist ein Widget für [[FHEM Tablet UI]] in Form eines Schiebereglers, mit dem ein beliebiger Wert zwischen zwei festgelegten Grenzwerten auswählen lässt. Es eignet sich zum Beispiel zum Einstellen der Lautstärke eines Audio-Gerätes oder der Helligkeit einer Lampe.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Slider_tabletUI.png&lt;br /&gt;
File:Slider_tabletUI2.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Steuer-Attribute==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Standard-Wert&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-device&#039;&#039;&#039;||FHEM-Device, dessen Reading gesetzt werden soll (&amp;lt;command&amp;gt; &#039;&#039;&#039;&amp;lt;device&amp;gt;&#039;&#039;&#039; &amp;lt;reading&amp;gt; &amp;lt;value&amp;gt;)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-get&#039;&#039;&#039;||Reading, dessen Inhalt den aktuellen Wert wiedergibt||&#039;STATE&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-set&#039;&#039;&#039;||Reading, das gesetzt werden soll (&amp;lt;command&amp;gt; &amp;lt;device&amp;gt; &#039;&#039;&#039;&amp;lt;reading&amp;gt;&#039;&#039;&#039; &amp;lt;value&amp;gt;)||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-on&#039;&#039;&#039;||Wert, bei dem der Slider zum maximalen Ausschlag springt||&#039;on&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-off&#039;&#039;&#039;||Wert, bei dem der Slider minimalen Ausschlag springt||&#039;off&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-part&#039;&#039;&#039;||Wählt bei Werten, die durch Leerzeichen getrennt sind, den Teil aus, der angezeigt werden soll. Der Teil kann auch mit RegEx ermittelt werden.||&#039;-1&#039;: alles Anzeigen||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-set-value&#039;&#039;&#039;||Format, wie der eingestellte Wert an FHEM übergeben werden soll||&#039;$v&#039;: Nur den Wert||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-cmd&#039;&#039;&#039;||Befehl, der gesendet werden soll (&#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; &amp;lt;device&amp;gt; &amp;lt;reading&amp;gt; &amp;lt;value&amp;gt;) (z.B. setstate, set, setreading, trigger)||set||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-min&#039;&#039;&#039;||Minimaler Wert, der eingestellt werden kann||0||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-max&#039;&#039;&#039;||Maximaler Wert, der eingestellt werden kann||100||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-step&#039;&#039;&#039;||Schrittweite beim Schieben des Sliders||1||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-width&#039;&#039;&#039;||Breite des Sliders, wenn er horizontal ausgerichtet ist||normal &#039;120px&#039;, mini &#039;60px&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-height&#039;&#039;&#039;||Höhe des Sliders, wenn er vertikal ausgerichtet ist||normal &#039;120px&#039;, mini &#039;60px&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-color&#039;&#039;&#039;||Farbe des Sliders für den Bereich 0...&amp;lt;eingestellter Wert&amp;gt;||&#039;#aa6900&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-background-color&#039;&#039;&#039;||Farbe des Sliders für den Bereich &amp;lt;eingestellter Wert&amp;gt;...&amp;lt;Maximaler Wert&amp;gt;||&#039;#404040&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-handle-diameter&#039;&#039;&#039;||Größe des Griffs||&#039;20&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-touch-diameter&#039;&#039;&#039;||Größe des Griffs, wenn er bewegt wird||wie &#039;&#039;&#039;data-handle-diameter&#039;&#039;&#039;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-timer-state&#039;&#039;&#039;||Statusvariable mit der eine timergesteuerte Bewegung des Sliders ausgelöst werden kann||||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;data-timer-state-on&#039;&#039;&#039;||Zustand der Statusvariablen der die Bewegung startet||&#039;on&#039;||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;data-timer-state-off&#039;&#039;&#039;||Zustand der Statusvariablen der die Bewegung stoppt||&#039;off&#039;||!on (alles was nicht on ist stoppt den Timer)&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;data-timer-step&#039;&#039;&#039;||Erhöhung des Wertes pro Timer-Intervall||1||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;data-timer-interval&#039;&#039;&#039;||Timer-Intervall in Millisekunden||1000||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==CSS-Klassen==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Klasse&lt;br /&gt;
!Beschreibung&lt;br /&gt;
{{FTUI Klasse|mini}}{{FTUI Klasse|big}}{{FTUI Klasse|bigger}}{{FTUI Klasse|large}}{{FTUI Klasse|horizontal}}{{FTUI Klasse|right}}{{FTUI Klasse|negated}}{{FTUI Klasse|value}}{{FTUI Klasse|FS20}}{{FTUI Klasse|tap}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Der Slider unterstützt &#039;&#039;tap to target&#039;&#039;, also das Springen zum gewünschten Wert durch einfaches Antippen, nur, wenn die CSS-Klasse &#039;&#039;&#039;tap&#039;&#039;&#039; verwendet wird.&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
===Vertikaler Schieberegler===&lt;br /&gt;
Einfacher Schieberegler mit dem Einstellbereich 10...90&lt;br /&gt;
&lt;br /&gt;
[[File:Slider_tabletUI.png]]&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;slider&amp;quot; &lt;br /&gt;
     data-device=&#039;Dummy1&#039; &lt;br /&gt;
     data-min=&amp;quot;10&amp;quot; &lt;br /&gt;
     data-max=&amp;quot;90&amp;quot; &lt;br /&gt;
     class=&amp;quot;cell&amp;quot; &amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;label&amp;quot; class=&amp;quot;cell&amp;quot;&amp;gt;Light1&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Horizontaler Schieberegler===&lt;br /&gt;
Einfacher Schieberegler mit dem Einstellbereich 0...100&lt;br /&gt;
&lt;br /&gt;
[[File:Slider_tabletUI2.jpg]]&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;slider&amp;quot;&lt;br /&gt;
     data-device=&#039;Dummy1&#039; &lt;br /&gt;
     data-min=&amp;quot;0&amp;quot; &lt;br /&gt;
     data-max=&amp;quot;100&amp;quot; &lt;br /&gt;
     class=&amp;quot;horizontal&amp;quot; &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Retro-Schieberegler mit Skala und rechteckigem Riffelknopf===&lt;br /&gt;
Kombination aus Slider- und Scale-Widget und Modifikation des Buttons in fhem-tablet-ui-user.css&lt;br /&gt;
&lt;br /&gt;
[[File:retroslider.jpg]]&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;doublebox-h&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;right-narrow&amp;quot;&lt;br /&gt;
		 data-type=&amp;quot;scale&amp;quot;&lt;br /&gt;
		 data-orientation=&amp;quot;vertical&amp;quot;&lt;br /&gt;
		 data-device=&amp;quot;amp&amp;quot;&lt;br /&gt;
		 data-get=&amp;quot;volume&amp;quot; &lt;br /&gt;
		 data-set=&amp;quot;volume&amp;quot;&lt;br /&gt;
		 data-height=&amp;quot;155&amp;quot;&lt;br /&gt;
		 data-width=&amp;quot;45&amp;quot;&lt;br /&gt;
		 data-value-interval=&amp;quot;50&amp;quot;&lt;br /&gt;
		 data-tick=&amp;quot;5&amp;quot;&lt;br /&gt;
		 data-extra-tick=&amp;quot;25&amp;quot;&lt;br /&gt;
		 data-font-size=&amp;quot;16&amp;quot;&lt;br /&gt;
		 data-colors=&#039;[&amp;quot;green&amp;quot;,&amp;quot;#FFBF00&amp;quot;,&amp;quot;#EF0002&amp;quot;]&#039;&lt;br /&gt;
		 data-limits=&#039;[&amp;quot;1&amp;quot;,&amp;quot;50&amp;quot;,&amp;quot;75&amp;quot;]&#039;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class = &amp;quot;value left-narrow&amp;quot;&lt;br /&gt;
		 data-type=&amp;quot;slider&amp;quot;&lt;br /&gt;
		 data-height=&amp;quot;150&amp;quot;&lt;br /&gt;
		 data-device=&amp;quot;amp&amp;quot;&lt;br /&gt;
		 data-get=&amp;quot;volume&amp;quot; &lt;br /&gt;
		 data-set=&amp;quot;volume&amp;quot;&lt;br /&gt;
		 data-color=&amp;quot;grey&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Eintrag in fhem-tablet-ui-user.css:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
.vertical .range-handle {&lt;br /&gt;
    left: -17px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.range-handle {&lt;br /&gt;
  width: 35px !important;&lt;br /&gt;
  height: 15px !important;&lt;br /&gt;
  border-radius: 3px !important;&lt;br /&gt;
  background-color: black;&lt;br /&gt;
  background-image: linear-gradient(180deg, white,black);&lt;br /&gt;
  background-size: 2px 2px;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Darstellungsmöglichkeit bei Nutzung des Schiebereglers für Rolladen-/Jalousien-/Markisensteuerung===&lt;br /&gt;
&lt;br /&gt;
[[File:blindsslider.png]]&lt;br /&gt;
&lt;br /&gt;
Folgende Anpasssungen sind zu machen:&lt;br /&gt;
&lt;br /&gt;
im file fhem-tablet-ui-user.css (falls das noch nicht verwendet wird, muss es natürlich noch in das html file, das aufgerufen wird eingetragen werden) folgende Zeilen einfügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* Definition for styles to be used for extension of slider widget for display of blinds, awnings etc. */&lt;br /&gt;
/* normal lines */&lt;br /&gt;
&lt;br /&gt;
.blind&amp;gt; .vertical .range-bar {&lt;br /&gt;
    width: 70%;&lt;br /&gt;
	border-radius: 2px;&lt;br /&gt;
	background-image: url(../blinds.jpg);&lt;br /&gt;
	background-position: center bottom;&lt;br /&gt;
	background-blend-mode: multiply;&lt;br /&gt;
	background-size: cover;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.blind&amp;gt; .vertical .range-quantity {&lt;br /&gt;
	border-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.blind&amp;gt; .vertical .range-handle {&lt;br /&gt;
	margin-left: 52% !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.blindview&amp;gt; .vertical .range-quantity {&lt;br /&gt;
	border-radius: 2px;&lt;br /&gt;
	background-image: url(../windowContentSimpleGrey.png);&lt;br /&gt;
	background-repeat: no-repeat;&lt;br /&gt;
	background-position: center bottom;&lt;br /&gt;
	background-size: cover;&lt;br /&gt;
	background-blend-mode: difference;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.awning&amp;gt; .vertical .range-bar {&lt;br /&gt;
    width: 70%;&lt;br /&gt;
	border-radius: 2px;&lt;br /&gt;
	background-image: url(../awningContentSimpleGrey.png);&lt;br /&gt;
	background-position: center bottom;&lt;br /&gt;
	background-blend-mode: difference;&lt;br /&gt;
	background-size: 100% 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.awning&amp;gt; .vertical .range-quantity {&lt;br /&gt;
	border-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.awning&amp;gt; .vertical .range-handle {&lt;br /&gt;
	margin-left: 52% !important;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die nachfolgenden Grafiken müssen in das Verzeichnis oberhalb des css directories kopiert werden (zumindest die, die im css File auch referenziert werden. Es gibt eine Graustufenvariante und eine farbige, entsprechend müssen die Filenamen im css file ausgetauscht werden also jeweils das &amp;quot;Grey&amp;quot; im Filenamen weglassen wenn man bunte Fenster will. Wer will, kann sich natürlich auch eigene Fenster und Rolladenbildchen basteln, ein Beispiel für den &amp;quot;Fensterausblick&amp;quot; ist auch noch enthalten).&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:windowContentSimple.png&lt;br /&gt;
File:awningContentSimple.png&lt;br /&gt;
File:windowContentSimpleGrey.png&lt;br /&gt;
File:awningContentSimpleGrey.png&lt;br /&gt;
File:windowContentGrey.jpg&lt;br /&gt;
File:windowContent.jpg&lt;br /&gt;
File:blinds.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
im &amp;quot;class&amp;quot; parameter des Sliders müssen folgende Klassen hinzugefügt werden:&lt;br /&gt;
blind (dadurch wird die Darstellung eines verschiebbaren Rollladens bewirkt)&lt;br /&gt;
awning (dadurch wird die Darstellung einer Markise bewirkt)&lt;br /&gt;
blindview (dadurch wird im Hintergrund ein Fenster symbolisiert)&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für die Definition eines Sliders mit Rolladendarstellung und Fenster als Hintergrundbild wäre:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div data-type=&amp;quot;slider&amp;quot;&lt;br /&gt;
    data-handle-diameter=&amp;quot;15&amp;quot;&lt;br /&gt;
    data-device=&amp;quot;&amp;quot;&lt;br /&gt;
    data-color=&amp;quot;#969696&amp;quot;&lt;br /&gt;
    data-height=&amp;quot;125&amp;quot;&lt;br /&gt;
    data-device=&amp;quot;dg_SZ_Rolladen&amp;quot;&lt;br /&gt;
    class=&amp;quot;blind blindview&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wird in der Klasse &amp;quot;awning&amp;quot; statt &amp;quot;blind&amp;quot; gesetzt, so wird eine Markisendarstellung erzeugt.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Tablet UI|Slider]]&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:WindowContentSimpleGrey.png&amp;diff=26135</id>
		<title>Datei:WindowContentSimpleGrey.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:WindowContentSimpleGrey.png&amp;diff=26135"/>
		<updated>2018-03-20T08:51:11Z</updated>

		<summary type="html">&lt;p&gt;Eki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Eki</name></author>
	</entry>
</feed>